Tesseractとpytesseractで画像から文字を読み取る
画像から文字を読み取るには、OCR(Optical Character Recognition)技術を使用します。
PythonでOCRを実装するためには、TesseractというオープンソースのOCRエンジンと、それをPythonで使えるようにしたライブラリであるpytesseractを使用します。
事前準備
Tesseractのインストール
以下からTesseractをインストール。
- Windows: https://github.com/UB-Mannheim/tesseract/wiki
- macOS:
brew install tesseract
- Linux:
sudo apt install tesseract-ocr
■ 環境変数にパスを入れる。
- Windowsの場合はデフォルト以下
C:\Program Files\Tesseract-OCR
■ 日本語の学習データ(jpn.traineddata)を配置する
Tesseractの日本語の学習データ(jpn.traineddata)は以下。
ダウンロード後、jpn.traineddata
ファイルを Tesseract-OCR\tessdata
フォルダに配置する。
- Windowsの場合はデフォルト以下
C:\Program Files\Tesseract-OCR\tessdata
pytesseractとPillowをインストール
以下のコマンドを実行。
pipコマンド
pip install pytesseract Pillow
Pythonソースコード
以下のソースコードファイルを作成。
app.py
import sys
import pytesseract
from PIL import Image
def image_to_text(image_path):
# 画像を読み込む
img = Image.open(image_path)
# TesseractでOCRを実行
text = pytesseract.image_to_string(img, lang='jpn')
return text
if __name__ == "__main__":
if len(sys.argv) > 1:
image_path = sys.argv[1] # コマンドライン引数から画像ファイルのパスを取得
text = image_to_text(image_path)
print(text)
else:
print("Usage: python app.py <path_to_image>")
フォルダ構成
.
├─app.py
├─image.png
└─readme.md
使い方
以下のようにコマンドを実行する。
- コマンド
コマンド
python app.py 【画像パス】
- 実行例
コマンド
python app.py ./sample1.png
- 出力
出力
テ ス ト テ キ ス ト
hogehogehogehogehogehogehogehoge
③②①①②③④⑤⑥⑥⑤④⑦⑧⑨⑨⑧⑦000
し ん ぶ ん し シ ン ブ ン シ 新 聞 紙 !!
馬 馬 馬 馬 馬 馬 馬 馬
騙 騙 監 騙 監 監 馬 監 騙 騙 騙 騙 騙 監 騙 監 監 馬 監 騙 馬 騙 騙 騙 監 騙 騙 監 騙 監 騙 馬 騙 騙 属 監 愚
騙 騙 騙 騙 騙
- 漢字の読み取り間違いが多々ある
- 数字は読み取ってはいるが、丸数字になってしまっている
色々試してみた
コマンド
画 像 認 識 と は 、 画 像 に 写 っ う て い る も の を 認 識 す る 技 術 で す 。 取 り
込 ま れ た 写 真 デ ー タ の 特 徴 を さ ま ざ ま な 学 習 機 で 分 析 し て 、 新 た
な 画 像 を 識 別 す る こ と が で き ま す 。 一 般 的 に コ ン ピ ュ ー タ は 画 像
を ビ ク セ ル の 集 合 体 と し て し か 認 識 で き ま せ ん が 、 実 際 に は 人
物 、 動 物 、 文 字 、 イ ラ ス ト と い っ た 情 報 や 意 味 が 含 ま れ て い ま
す 。 apacms
コマンド
Ryo ihi
@oome
0 ⑨ ミ
⑦②⑧ cweucs
団 0 ⑥ B
B ラ ォ ロ ー ロ ロ ー
ア プ リ M 発 が W 睦エ ン シ ー ア , コ ー テ ィ
ン グ 、 更 痒 輝 、 エ ラ ー 触 ③ 等 に っ い て H 縛 し て
い ま す . 切 字 音 で ち ② う か る よ う ま CWB し ま
す . ⑨⑧⑨ 團 口 は 來 人 の 愚 見 で あ り 、 所 医 約 画 の
分 R 和 常 で は あ り ま せ ん 。
コマンド
フ ォ ロ ー 中 の タ グ ラ ォ ロ ー ぁ
crrs qmcr uay emoL naa Aes
mMmi ooee puce ja
コマンド
コマンド
デ ィ ー プ ラ ー ニ ン グ ( 深 履 学 習 ) と は 、 人 間 が 自 然 に 行 う タ ス ク を コ
ン ピ ュ ー タ に 学 習 さ せ る 機 棒 学 習 の 手 法 の ひ と つ で す 。 人 工 知 背
(AD の 急 速 な 発 展 を 支 え る 技 術 で あ り 、 そ の 進 歩 に よ り 様 々 な 分 野
へ の 実 用 化 が 進 ん で い ま す 。 近 年 開 発 の 進 ん で い る 自 動 運 転 車 に お
い て も カ ギ と な っ て い る の は 、 デ ィ ー プ ラ ー ニ ン グ で す 。 停 止 梶 譚
を 認 識 し た り 、 電 柱 と 人 間 を 区 別 し た り す る の も 、 デ ィ ー プ ラ ー ニ
ン グ が 可 能 に し て い る 技 術 と 言 え ま す 。 ま た 、 電 話 、 タ ブ レ ッ ト 、
テ レ ビ 、 ハ ン ズ フ リ ー ス ピ ー カ ー な ど の 音 声 認 識 に も 重 要 な 役 副 を
果 た し て い ま す 』 近 年 デ ィ ー プ ラ ー ニ ン グ が 注 目 を 集 め て い る の に
は 理 由 が あ り ま す 』。 そ れ は ほ デ ィ ー プ ラ ー ニ ン グ が 、 従 来 の 技 術 で は
不 可 能 だ っ た レ ベ ル の パ フ ォ ー マ ン ス を 達 成 で き る よ う に な っ て き
て い る か ら で す 。 り
ト
背景が白、文字が黒、きっちり並んでいる文字列だったら読み取れそう。
GitHub
今回の記事で紹介したソースコードをGitHubで公開しています。