Swiftパッケージ · v0.1.0

KLReadingOrder

OCRの認識結果が順不同でも、座標情報を使って人が読む順番に並べ直します。

KLReadingOrderは、文字列、信頼度、正規化した矩形、ページ番号、元の並び順を受け取り、読み順にまとめた行を返すSwiftパッケージです。OCR自体や文章の意味解析は行わず、認識結果を読みやすい順番へ並べる処理だけを担当します。

対応OS
iOS 17+ · macOS 14+
開発環境
Swift 6.0+
ライセンス
MIT
外部依存
なし

できること

  • 横書きは上から下、同じ行では左から右
  • 縦書きは右の列から左へ、同じ列では上から下
  • ページごとに横書きか縦書きかを自動判定
  • 文字の大きさに合わせて行と列の判定幅を調整

このパッケージがしないこと

このパッケージは、OCR、傾きや回転の補正、遠近補正、信頼度による除外、言語判定、表の抽出、文章の意味解析を行いません。同じページに含まれる矩形は、必ず同じ正規化座標系で渡してください。

SwiftPMで追加

Package.swiftSwift
.package(url: "https://github.com/KoenLee1023/KLReadingOrder.git", from: "0.1.0")

使い方

最小構成Swift
let engine = ReadingOrderEngine()
let lines = engine.reconstruct(
    candidates: observations,
    preferredDirection: .unknown
)

for line in lines {
    print(line.text)
}
ReadingOrderEngine

空の候補の除外、ページ分割、方向判定、行または列への分類、並べ替え、結果の集約を同期的に行います。通信やファイル操作は行いません。

ReadingOrderPolicy

行と列の判定に使うしきい値を公開しており、用途に合わせて調整できます。

ReadingOrderLine

読み順に並べた候補ID、結合した矩形と文字列、平均信頼度、ページ番号、確定した書字方向を返します。

デモアプリ

Reading Flow

横書きは上から下、同じ行では左から右 · 縦書きは右の列から左へ、同じ列では上から下

Layout Comparator

ページごとに横書きか縦書きかを自動判定 · 文字の大きさに合わせて行と列の判定幅を調整