オープンソースなOCRソフトTesseractを試してみた。

コンピュータ

私の環境は64bitなので、
tesseract-ocr-w64-setup-v4.1.0.20190314 (rc1) (64 bit) resp.
をクリックしダウンロード。

日本語の辞書データ?が必要ですので以下のサイトからダウンロード
tesseract-ocr/tessdata
Contribute to tesseract-ocr/tessdata development by creating an account on GitHub.

jpn_vert.traineddata
jpn.traineddata
の2つのファイルをダウンロードしをC:\Program Files\Tesseract-OCR\tessdataにコピー

コマンドプロンプトから以下のコマンドを実行し対応言語を確認てみます。
"c:\Program Files\Tesseract-OCR\tesseract.exe" --list-langs

eng
jpn
jpn_vert
osd

使い方
"c:\Program Files\Tesseract-OCR\tesseract.exe" 画像ファイルのパス 出力テキストファイルのパス -l jpn

TesseractはCUIなコマンドですのでPowerShellから呼び出すスクリプトを作成してみました。
スクリプト実行すると当サイトのロゴを文字認識して出力してくれます。

<#
.SYNOPSIS
Tesseract-OCRを試してみた。
<CommonParameters> はサポートしていません

.DESCRIPTION
Webサイトからダウンロードした画像ファイルを文字認識してみる。

.EXAMPLE
PS>.\Test-Tesseract-OCR.ps1


#>


# tesseract.exeのパス
$tesseract_exe = Join-Path $env:ProgramFiles '\Tesseract-OCR\tesseract.exe'

$scriptPath = $PSCommandPath

# OCRの実行
function Exec-OCR
{
    param (
        [string]$in
    )

    # テンポラリファイル
    $TmpFile = New-TemporaryFile
    $out = $TmpFile.FullName

    $sp = (Get-Item -LiteralPath $scriptPath)
    # 標準出力のパス
    $log_path = Join-Path $sp.DirectoryName ($sp.BaseName + ".log")
    # 標準エラーのパス
    $err_path = Join-Path $sp.DirectoryName ($sp.BaseName + ".err")

    


    # -FilePath 実行ファイルのパス
    # -ArgumentList 実行ファイルの引数
    # -Wait コマンドの終了をまつ。
    # -PassThru 結果をオブジェクトで返す。
    # -RedirectStandardOutput 標準出力
    # -RedirectStandardError 標準エラー
    # -NoNewWindow ウィンドウを新たに開かない
    $proc = Start-Process -FilePath $tesseract_exe "${in} ${out} -l jpn" -Wait -PassThru -RedirectStandardOutput $log_path -RedirectStandardError $err_path -NoNewWindow

    $result = ""
    switch ($proc.ExitCode) {
        0 {
            # echo "成功"
            $result = Get-Content -Encoding UTF8 ($out+".txt")
        }
        default {
            # echo "失敗"
        }
    }


    # テンポラリファイルを削除
    rm $TmpFile
    rm ($out+".txt")

    return $result
}

# ロゴの画像ファイルをダウンロード
$uri = "https://maywork.net/wp/wp-content/uploads/2018/10/logo.png"
$localpath = ".\logo.png"
Invoke-WebRequest -Uri $uri -OutFile $localpath

$result = Exec-OCR $localpath
echo $result

# 画像ファイルを削除
rm $localpath

結果

迷 惑 堂 本 舗
創 業 平 成 参 拾 年

コメント