Tesseract-OCR を使った ocr フィルタで文字認証を行う。本家と同様に英語や日本語などたくさんの言語に対応している。ただし日本語の漢字の精度はかなりよくない。識字率を上げるのに OCR する前に対象文字周辺を crop フィルタで切り取ると上がりそうだがその他はわからない。

x:y は出力解像度。横:縦
w:h は出力解像度の左上隅の座標。横:縦
Windows の ffmpeg で生放送する方法 : crop
crop=x:y:w:h,ocr

インストール方法

tesseract をインストールする前に leptonica を先にインストールする。
Leptonica Source Downloads
$ ./autobuild
$ ./configure --prefix=/mingw
$ make && make install

tesseract-ocr/tesseract: Tesseract Open Source OCR Engine (main repository)
$ autogen.sh
$ MINGW_LIB_DIR=/mingw/lib LIBLEPT_HEADERSDIR=/mingw/include PKG_CONFIG_PATH="/mingw/lib/pkgconfig" ./configure --prefix=/mingw
$ make && make install

Windows の MSYS ではうまくいかなかったので dll をリンクさせた。
ここ から liblept172.dll、libtesseract304.dll をダウンロードし、libtesseract を有効にするために必要なヘッダ類を個別に利用する。

tesseract/api から capi.h、baseapi.h、renderer.h。tesseract/ccutil から platform.h。tesseract/ccmain から pageiterator.h、resultiterator.h を include/tesseract にコピーし、lib に libtesseract304.dll にコピーする。そして lib/pkgconfig に tesseract.pc を以下のように作ってコピーする。

tesseract.pc

prefix=/mingw/i686-w64-mingw32
exec_prefix=${prefix}
bindir=${exec_prefix}/bin
datarootdir=${exec_prefix}/tessdata
datadir=${exec_prefix}/tessdata
libdir=${exec_prefix}/lib
includedir=${prefix}/include/tesseract

Name: libtesseract
Description: An OCR Engine that was developed at HP Labs between 1985 and 1995... and now at Google.
Version: 3.04
Libs: ${exec_prefix}/lib/libtesseract304.dll
Cflags: -I${includedir}

ffmpeg の configure には –enable-libtesseract をつけて、実行には ffmpeg と同じフォルダ内に liblept172.dll、libtesseract304.dll をコピーする。

ffmpeg, ffplay, ffprobe のサンプル(Windows用)

基本コマンド

ocr フィルタを使うには上の ffmpeg の他に 学習データを ffmpeg と同じフォルダ内に tessdata フォルダを作って eng.traineddata などをコピーしてから使う。

img.png に書いてある英語を OCR し、コンソールに表示する
ffprobe -show_entries frame_tags=lavfi.ocr.text -f lavfi -i "movie=img.png,ocr"
日本語のひらがなとカタカナを OCR し、コンソールに表示する
ffprobe -show_entries frame_tags=lavfi.ocr.text -f lavfi -i "movie=img.png,ocr=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
テキストで出力するには -report オプションを利用するか、リダイレクトさせて grep などで整形する。
ffplay -rtbufsize 10MB -f dshow -video_size 640x360 -framerate 30 -i video="SCFF DirectShow Filter" -vf ocr,metadata=print:key=lavfi.ocr.text -report
公式ドキュメント:FFmpeg Filters Documentation : ocr

オプション

  • datapath[string]
    学習データのフォルダの指定。指定や変更できない。変更するには tesseract をコンパイルするときに書き換える
    既定値:ffmpeg と同じフォルダ内の tessdata フォルダ
    学習データの配布先:eng, jpn(最新版はエラーになるので昔のを使う)
  • language[string]
    認識言語
    既定値:eng
    他の言語の指定文字一覧
  • whitelist[string]
    認識する文字の種類
    既定値:”0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.:;,-+_!?”‘[]{}()<>|/\=*&%$#@!~”
  • blacklist[string]
    認識させない文字の種類
    既定値:””

関連記事
tesseract カテゴリーの記事一覧 – ながいものには、まかれたくない
Tesseract-OCRの学習 – はだしの元さん : web.archive.org
Tesseract-OCRの学習(識字率をあげる) – wiki – PCスキルの小技・忘却防止メモ

コメントを残す

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

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