機械学習による光学文字認識(OCR)を行い、文字起こしするソフトです。 端末内ですべて計算されるため、外部へのデータの送信は一切ありません。 ふりがなが付いている文庫本を見開きで撮影して、認識させることができます。
このアプリは、アプリ内課金メニューが設定されていますが、全ての機能が無料で使用できます。 課金メニューは、作者への寄附とお考えください。 購入した場合、シークレット画像が解放されます。 機械学習モデルの作成にGPUを長期間使用する必要があるため、より精度の高いモデルに改良するために支援を募集中です。
使用している機械学習モデルのソースコードは、 https://github.com/lithium0003/findtextCenterNet にあります。
Windows版はこちら
プライバシーポリシーはこちらで確認できます。 このアプリによるデータの送信はありません。
このアプリによってOCR処理したサンプルです。
撮影に使用した文庫本は、江戸川乱歩傑作選(新潮文庫) / 著:江戸川乱歩 より「二銭銅貨」
トップメニューから、カメラで撮影するか画像データを選んでOCR処理を行います。画像は複数枚同時に選択できます。
トップメニューから、「カメラ撮影」を選択して、カメラを起動します。 プレビュー画面のピントを合わせたい場所をタップして、ピントを合わせます。 レンズが複数ある場合は、切り替えることが可能です。
設定メニューから、「遅延シャッター」オプションにより、撮影ボタンを押してから指定秒数後に撮影されます。 iPhoneをスタンドに保持して、両手で本を保持することが可能になります。
また、連続撮影をONにすることで、遅延シャッターを10秒とした場合は、10秒毎に連続して撮影され続けます。 停止する場合は撮影ボタンを再度押してください。 本のページをめくりながら、順次撮影したい場合に有用です。
カメラで撮影した後に撮影画面を閉じるか、画像を選択した後には、自動でOCR結果画面に切り替わり、進捗状況が表示されます。 初回起動時は、機械学習モデルの前処理が行われるので少し時間がかかります。 各項目のプログレスバーが100%になりDoneとなると終了です。 カメラで撮影した画像サイズで、平均的な文庫本の見開きの文字数で、デバイスの性能にもよりますが1枚30秒程度かかります。 処理時間は、画面サイズと、写っている文字数に比例して長くなります。
撮影、または画像選択ごとに、1枚目の縮小画像をサムネイルとして、デフォルトで処理開始時間を名前としています。 各行をタップすると、処理結果が表示されます。
各行で、左スワイプすると削除メニューが出ます。 右スワイプすると、再解析メニューと、名前の編集メニューが出ます。
認識結果を見ながら、設定を微調整したい場合は、再解析メニューから同じ画像に対して再度処理を行うと便利です。
OCR結果画面で、見たい結果をタップすると認識結果画面に切り替わり、認識文字列が表示されます。
上部にあるアイコンから、いくつか操作して見やすくできます。
複数枚ある場合に、次の画像へ切り替え 長押しでページ選択ウインドウ | |
テキストをエクスポートする | |
詳細な認識結果画像を表示 | |
文字サイズを変更 | |
縦書きと横書きの切り替え | |
認識結果を読み上げ |
認識結果画面から、上部のアイコンをタップすると、見ることができます。
右上のボタンから、オリジナル表示と、認識結果のオーバーレイ表示を切り替えて表示できます。
認識した文字の、認識boxと1文字ずつの認識文字や、文字の順番の連番が振られています。青線で示されているのは、文字列の認識ラインで、 緑色で示されているのは、段組の間や罫線で文章が切れるところのラインです。また、ふりがなはピンク色、ふりがなの親文字はシアン色でBoxが囲われています。 英文の単語区切りの空白や、行頭の字下げ等の空白の次の文字は、赤色でBoxが囲われています。
認識が上手くいかない場合は、この詳細な認識結果を元にパラメータを調整すると、よい結果が得られることがあります。
デフォルトのパラメータで、おおむねよい結果が得られるように調整してありますが、画像の状態によっては上手く認識できないときがあります。 その際は、設定からパラメータを微調整すると上手くいくことがありますのでお試しください。
文字検出閾値のデフォルトは0.75ですが、画像によってはこれが高すぎる場合があり、文字を取り損なうことがあります。
文字検出閾値を0.5程度まで下げると、全ての文字を検出することができます。
画像処理の都合上、512ピクセル四方に画像を切って処理します。 そのため、処理する画像に写っている文字の大きさは、おおむね30ピクセル以上で200ピクセル程度の大きさが望ましいです。
画像が小さすぎる場合、または大きすぎる文字が写っている場合等は、リサイズにより適切な画像サイズに変換するとよい結果が得られます。
オリジナルサイズの場合、画像が小さすぎるようで認識が上手くいっていません。
リサイズにより、2倍の大きさにすると上手く認識できるようになりました。ふりがなも認識できています。
段組の間などの空白で区切られている部分は、自動的に検出されて、その部分を文が跨がないように処理されます。 この処理のための閾値です。デフォルトでは0.2、0.25に設定されています。
この画像の場合、段組の間の検出ライン(緑色)が薄いことがわかります。
デフォルトのパラメータでは、このように段組の間を貫通して文が繋がっている場所があります。 この場合、行の切断検出閾値の値を下げると上手くいきます。 このくらいの検出ライン(緑色)であれば、行の切断検出閾値1を0.1、行の切断検出閾値2を0.15程度が適切です。
行の切断検出閾値1を0.1、行の切断検出閾値2を0.15とした場合の結果を見ると、段組が正しく認識されています。
機械学習モデルは、学習時にぼやけた画像や、エッジが綺麗な画像など多数与えて学習しているので、基本的にあまり調整する必要がありません。 入力画像があまりにぼやけている場合や、ディスプレイを撮影した画像などピクセルの四角が目立つなどして、認識が上手くいかない場合や、 カラー差が少なすぎて認識できない場合は、フィルタ処理をすることで改善するかもしれません。
ガウスぼかし半径 | 0より大きくすると、その半径ピクセルでガウスぼかしをかけます |
鮮鋭化 | アンシャープマスクフィルタの強度と半径を指定します |
彩度 | saturationを調整します |
輝度 | brightnessを調整します |
コントラスト | contrastを調整します |
以下の画像のように、OCR処理しにくい画像の場合は、詳細表示画面で画像をオリジナル表示にして、 右下にある "PreProcess" ボタンからフィルタ処理を試しながら調整することができます。
画像の引用元 https://x.com/shibayan/status/1702575226985623981"PreProcess" ボタンを押すと、画像下部に設定画面の画像処理設定と同じ調節メニューが出ます。 なにか設定して、"Done" ボタンを押すと、設定した前処理パラメータで実際に処理した画像が表示されます。
色域を制限というオプションで、画像のカラー輝度値の上限と下限を設定することができます。
この場合は、必要な文字は黒で、背景はそれより全て明るいので、上限を非常に低い輝度値に設定することにより次の結果を得ます。
色域を選択というオプションで、画像の中から特定の色とその類似色だけを選択できます。
「選択の色」というオプションで、選択の中心となる色を指定できます。スポイトを選ぶことにより画像から色を拾うことができます。 次に、H range, S range, V rangeを設定します。選択の色をHSV空間にしたときの範囲で、選択色を選びます。
地の模様である文字を取りたい場合、スポイトで文字から色を拾って、HSVを適切に制限すると次の結果を得ることができます。
OCR処理は、2段階に分かれていて、文字の位置と特徴量を検出した後、文の方向に並べてTransformerにより文字列にしています。 Transformerによる後段の処理は、文字数が多くなるのに比例して遅くなります。 デフォルトでONですが、高速化したい場合や前段だけで十分な精度が得られている場合はこれをOFFにすることもできます。
結果の文字列は、ふりがな有りで表示されますが、カタカナや漢字の紛らわしい文字と入れ替わっていないか確認したいときがあります。 その際は、文字種によって色づけをONにすることで、ひらがな、カタカナ、漢字、及び「ぱぴぷぺぽ」に色が付いて表示されます。
読み上げる際の設定です。
ここで挙げた以外の設定は、細かく調整する場合に必要ですが、通常はあまり触る必要がないと思います。 項目名の部分をタップするとデフォルト値に戻りますので、変えてしまってわからなくなったときに利用してください。
目次に戻る