Tesseract-OCR を使った ocr フィルタで文字認証を行う。本家と同様に英語や日本語などたくさんの言語に対応している。ただし日本語の漢字の精度はかなりよくない。2018年10月にリリースした 4.0 でひらがなとカタカナの識字率はかなり上がった。ただし漢字は似た漢字になる場合も多い。以下の Wiki によると、識字率は OCR する前に対象文字周辺を crop フィルタで切り取ると上がる。また解像度が小さすぎても大きすぎても識字率は下がることがある。

識字率を上げる方法

ImproveQuality · tesseract-ocr/tesseract Wiki より

  • 少なくとも300dpi以上
  • 2色グレースケール化
  • ノイズ削除
  • 傾いている文字を補正
  • スキャンしたとき外枠やページとページの間の黒くなっている部分をカット

3系統の日本語、中国語の効果的な設定。最新版の4系統は不明。
ControlParams · tesseract-ocr/tesseract Wiki

Tesseract-OCR 3.04 を試してみる – ながいものには、まかれたくない
Tesseract.Net parameters

x:y は出力解像度。横:縦
w:h は出力解像度の左上隅の座標。横:縦
映像を指定座標に切り取る crop
crop=x:y:w:h,ocr

インストール

tesseract をインストールする前に leptonica を先にインストールする。
The official github repository for Leptonica is: danbloomberg/leptonica. See leptonica.org for more documentation and recent releases.
tesseract-ocr/tesseract: Tesseract Open Source OCR Engine (main repository)

Tesseract OCR 3.05 のインストールと新機能 – ながいものには、まかれたくない

Windows 向けのバイナリの配布を始めた。

基本コマンド

ocr フィルタを使うには学習データを ffmpeg と同じフォルダ内に英語なら eng.traineddata フォルダを作ってその中に eng.traineddata をコピーして使う。

ffprobe の使い方

img.png に書いてある英語を OCR し、コンソールに表示する。
ffprobe -show_entries frame_tags=lavfi.ocr.text -f lavfi -i "movie=img.png,ocr"

日本語のひらがなとカタカナを OCR し、コンソールに表示する。漢字も OCR するなら whitelist に一覧を追加する。
ffprobe -show_entries frame_tags=lavfi.ocr.text -f lavfi -i "movie=img.png,ocr=jpn.traineddata:language=jpn:whitelist=あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをんアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワオンぁぃぅぇぉァィゥェォゃゅょャュォがぎぐげござじずぜぞだぢづでどばびぶべぼぱぴぷぺぽガギグゲゴザジズゼゾダチヅデドバビブベボパピプペポー~、。"

日本語の画像サンプル

動画ファイルを再生しながら OCR し、コンソールに表示する。
ffplay -i input -vf ocr,metadata=print:key=lavfi.ocr.text

dshow 入力した映像(SCFF DirectShow Filter)に OCR し、コンソールに表示する。1フレームではないのでフレーム毎に OCR すれば結果がコンソールに表示される。ウェブカメラも取り込めるのでレシートなどの数字やカタカナも読み込める。
ffplay -rtbufsize 10MB -f dshow -video_size 640x360 -framerate 30 -i video="SCFF DirectShow Filter" -vf ocr,metadata=print:key=lavfi.ocr.text

OCR の背景が単色の場合。crop フィルタで座標 758:334 の 31x24p で切り取り、1度目の colorchannelmixer でモノクロにし、2度目で80以上を255にする2色に変え、xbr で2倍に拡大し、sab でデノイズしている。
ffprobe -show_entries frame_tags=lavfi.ocr.text -f lavfi -i "movie=img.png,crop=31:24:758:334,colorchannelmixer=.299:.587:.114:0:.299:.587:.114:0:.299:.587:.114:0,colorchannelmixer=.3:.59:.11:0:.3:.59:.11:0:.3:.59:.11:0,lutrgb='between(val,80,255)*255:between(val,80,255)*255:between(val,80,255)*255',xbr=2,sab,ocr=eng.traineddata:eng" -show_entries frame_tags=lavfi.ocr.text -of csv > output.csv

ffmpeg 4.2(予定) からは lavfi.ocr.confidence が使え、 フレーム毎に1文字ずつの OCR 結果の信頼性を0から100までの数値で調べることも出来る。高ければ信頼性が高いが、0になったからといって常に間違いとも限らない。
ffprobe -show_entries frame_tags=lavfi.ocr.confidence,lavfi.ocr.text -f lavfi -i "movie=img.png,ocr"

公式ドキュメント:FFmpeg Filters Documentation : ocr

オプション

  • datapath[string]
    学習データのフォルダの指定。インストールPCと実行PCが異なる場合は指定しないとエラーになるかもしれない。Windows なら ffmpeg と同じ場所に学習データのフォルダを作りその中に eng.traineddata などを入れる
    既定値:インストールしたときに TESSDATA_PREFIX で指定したところ
    学習データの配布先:eng, jpn
  • language[string]
    認識言語
    既定値:eng
    他の言語の指定文字一覧。日本語は jpn。アルファベット、数字記号だけなら英語でよい
  • whitelist[string]
    認識する文字の種類。日本語は language を日本語にしても whitelist にない文字は OCR してくれない。漢字も認識するなら 常用漢字一覧 – Wikipedia を参考にする。漢字一覧
    既定値:”0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.:;,-+_!?”‘[]{}()<>|/\=*&%$#@!~”
  • blacklist[string]
    認識させない文字の種類
    既定値:””

関連記事

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)