Tesseract(テッセラクト)は、Googleが開発した高性能なOCR(文字認識)エンジンです。
通常は画像全体から文字を抽出しますが、「特定の座標(範囲)だけをOCRしたい」という場面も多いでしょう。
たとえば、領収書の金額欄や画面の一部だけを認識したい場合などです。
本記事では、PowerShellからTesseractを呼び出して、特定の座標範囲を指定して文字を抽出する方法を詳しく解説します。
実際のコマンド例・コードサンプル・環境構築の手順も紹介しますので、ぜひ最後までご覧ください。
Tesseractとは?PowerShellでも使える高精度OCRエンジン
Tesseractは、Googleが提供しているオープンソースのOCR(Optical Character Recognition)エンジンです。
画像から文字を抽出することができ、日本語にも対応しています。
通常はコマンドラインで利用しますが、PowerShellから呼び出すことで、スクリプト処理や自動化にも活用できます。
主な特徴
- 無料・オープンソース
- 100以上の言語に対応(日本語対応は
tessdata
の追加で可能) - コマンドラインから簡単に利用できる
- Python・PowerShell・C#などさまざまな言語と連携可能
PowerShellでTesseractを使う準備手順
① Tesseractのインストール
まずはTesseract本体をインストールします。
- 下記URLからWindows版をダウンロード:
https://github.com/UB-Mannheim/tesseract/wiki - インストール時に「Add Tesseract to the system path for current user」にチェックを入れる
- コマンドプロンプトで動作確認:
tesseract -v
バージョン情報が表示されればOKです。
② 日本語OCRデータを追加する
日本語を認識したい場合は、言語データファイル(jpn.traineddata
)を追加します。
- 下記からファイルをダウンロード:
https://github.com/tesseract-ocr/tessdata - ダウンロードした
jpn.traineddata
を下記フォルダに配置:C:\Program Files\Tesseract-OCR\tessdata\
- 確認:
tesseract --list-langs
jpn
が表示されれば設定完了です。
PowerShellでTesseractを呼び出す基本構文
PowerShellからTesseractを実行する場合は、Start-Process
または Invoke-Expression
を使用します。
例:単純なOCR
$imagePath = "C:\temp\sample.png"
$outputPath = "C:\temp\result"
Start-Process -FilePath "tesseract.exe" -ArgumentList "$imagePath $outputPath -l jpn" -Wait
これで C:\temp\result.txt
に認識結果が出力されます。
座標を指定してOCRする方法
Tesseract自体には直接「座標を指定してOCRする」オプションはありません。
しかし、PowerShellで座標範囲を切り取った画像を作成してからTesseractに渡すことで実現できます。
つまり、以下の手順です。
- PowerShellでスクリーンショットまたは画像の一部を切り出す
- 切り出した画像をTesseractに渡す
- 結果をテキストで保存
PowerShellで座標指定の画像を切り取る方法
PowerShellでは .NET
クラスを使って画像を扱うことができます。
以下の例では、座標 (X=100, Y=200)
、幅300、高さ100 の範囲を切り取ります。
# 元画像と出力ファイルパス
$srcImage = "C:\temp\sample.png"
$cropImage = "C:\temp\crop.png"
# .NETのクラスを利用
Add-Type -AssemblyName System.Drawing
# 画像読み込み
$bitmap = [System.Drawing.Bitmap]::FromFile($srcImage)
# 切り取り範囲の指定
$rect = New-Object System.Drawing.Rectangle(100, 200, 300, 100)
# 切り取り実行
$cropped = $bitmap.Clone($rect, $bitmap.PixelFormat)
# 保存
$cropped.Save($cropImage, [System.Drawing.Imaging.ImageFormat]::Png)
# リソース解放
$bitmap.Dispose()
$cropped.Dispose()
Write-Host "画像を切り取りました: $cropImage"
このスクリプトを実行すると、C:\temp\crop.png
に指定範囲の画像が生成されます。
切り取った画像をTesseractでOCRする
次に、切り取った画像をTesseractで解析します。
$tesseractPath = "C:\Program Files\Tesseract-OCR\tesseract.exe"
$input = "C:\temp\crop.png"
$output = "C:\temp\ocr_result"
Start-Process -FilePath $tesseractPath -ArgumentList "$input $output -l jpn" -Wait
完了後、C:\temp\ocr_result.txt
に文字認識の結果が保存されます。
座標指定OCRの自動化スクリプト
複数箇所を自動でOCRしたい場合は、PowerShellスクリプトに座標リストを配列で指定するのが便利です。
Add-Type -AssemblyName System.Drawing
$tesseract = "C:\Program Files\Tesseract-OCR\tesseract.exe"
$srcImage = "C:\temp\sample.png"
# 複数の座標範囲を指定(X, Y, 幅, 高さ)
$areas = @(
@{x=100; y=200; w=300; h=100; name="area1"},
@{x=500; y=250; w=250; h=100; name="area2"}
)
foreach ($a in $areas) {
$rect = New-Object System.Drawing.Rectangle($a.x, $a.y, $a.w, $a.h)
$bitmap = [System.Drawing.Bitmap]::FromFile($srcImage)
$cropped = $bitmap.Clone($rect, $bitmap.PixelFormat)
$cropPath = "C:\temp\$($a.name).png"
$cropped.Save($cropPath, [System.Drawing.Imaging.ImageFormat]::Png)
$outputPath = "C:\temp\$($a.name)_result"
Start-Process -FilePath $tesseract -ArgumentList "$cropPath $outputPath -l jpn" -Wait
Write-Host "OCR完了:$($a.name)_result.txt"
$bitmap.Dispose()
$cropped.Dispose()
}
これで、複数の座標領域を自動的に切り出してOCR処理が実行されます。
OCR精度を上げるコツ
Tesseractの認識精度を上げるには、いくつかの工夫があります。
- 画像をグレースケール化してノイズを減らす
- 文字サイズを大きめにする(拡大処理)
- 明るさとコントラストを補正する
- 言語を正しく指定する(
-l jpn
など) - 不要な余白や線を事前に削除する
PowerShellでも .NET
クラスを利用すれば、画像処理を自動で行うことが可能です。
出力結果をPowerShellで読み込む
OCR結果はテキストファイルで出力されます。
PowerShellでは以下のように内容を読み込めます。
$result = Get-Content "C:\temp\area1_result.txt" -Raw
Write-Host "認識結果:`n$result"
このようにして、スクリプト内で文字列として扱うこともできます。
自動入力やデータ抽出に応用できます。
まとめ
PowerShellとTesseractを組み合わせれば、画像の一部だけを認識する座標指定OCRを簡単に実現できます。
本記事の要点
- Tesseractは無料で使える高性能OCRエンジン
- PowerShellからコマンドラインで呼び出せる
- 座標範囲を指定するには、PowerShellで画像を切り抜いてからOCR
.NET
のSystem.Drawing
クラスを活用- 自動化スクリプトで複数領域を処理できる
帳票処理・画面キャプチャ・監視ツールなど、応用範囲は非常に広いです。
ぜひ、あなたの業務スクリプトや自動化環境にTesseract+PowerShellの座標指定OCRを取り入れてみてください。