手書きの数字の 1 行を認識しようとしています。現在、私はPythonとOpenCVでいくつかの前処理を行い、画像を接続されたコンポーネントに分割し、これらのコンポーネントをPSM = 10(ページセグメンテーションモード、10は「画像を1文字のように扱う」)でTesseractにフィードし、文字のホワイトリストは「0123456789に制限されています"。接続コンポーネントのセグメンテーションが失敗した場合は Tesseract がガベージを返し、セグメンテーションが成功した場合は正確に 1 桁を返すことを期待しています。多くの場合、Tesseract は何も返しません。
Python の Tesseract インターフェイスとしてpytesseractとpython-tesseract の両方を試しました。Pytesseract は、実行可能ファイルを見つけtesseract.exe
、シェルから適切なパラメーターを指定して実行し、回答を収集することで機能します。これが私が自分の問題を知った方法です。その後、本格的な C API を実装した python-tesseract を試してみました。当然、結果は同じでした。
以下は、Tesseract に個別にフィードした 5 つの画像のサンプルです (同じ画像を別のファイルとしてここにアップロードしました)。
これらの画像で 1,*,4,*,* を取得しました。これは * Tesseract が空白のみを返したことを意味します。
他のページ セグメンテーション モードでは、次のようになります。
PSM_SINGLE_CHAR: 1*4**
PSM_SINGLE_BLOCK_VERT_TEXT: **43*
PSM_CIRCLE_WORD: 11***
PSM_SINGLE_LINE: 11491
PSM_AUTO: *****
PSM_SPARSE_TEXT: *****
PSM_SINGLE_WORD: 11499
PSM_AUTO_ONLY: *****
PSM_SINGLE_COLUMN: *****
PSM_SPARSE_TEXT_OS: *****
PSM_SINGLE_BLOCK: 11499
PSM_OSD_ONLY: *****
PSM_AUTO_OSD: *****
PSM_COUNT: 11499
奇妙なことに、これらの画像に対して実行するtesseract image.png image -l eng -psm 10 digits-only
と、*,*,4,9,* が返されます。(digits-only
はtessedit_char_whitelist 0123456789
)
Tesseract に何も答えさせずに、何らかの答えを与えるにはどうすればよいですか?