画像から文字を瞬時に読み取る！Tesseractとpytesseractの驚異の力【Python】

# 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
```

![image1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/d019e75e-f24b-4698-fb95-db2edca8270f.png)


**■ 日本語の学習データ（jpn.traineddata）を配置する**

Tesseractの日本語の学習データ（jpn.traineddata）は以下。

https://github.com/tesseract-ocr/tessdata/blob/main/jpn.traineddata

ダウンロード後、`jpn.traineddata` ファイルを `Tesseract-OCR\tessdata` フォルダに配置する。

- Windowsの場合はデフォルト以下
```
C:\Program Files\Tesseract-OCR\tessdata
```

![image2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/ae57518e-3580-f7dd-a094-0a8110267352.png)


### pytesseractとPillowをインストール
以下のコマンドを実行。

```shell:pipコマンド
pip install pytesseract Pillow
```

### Pythonソースコード
以下のソースコードファイルを作成。

```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
```

## 使い方
以下のようにコマンドを実行する。

- コマンド
```shell:コマンド
python app.py 【画像パス】
```

- 実行例

sample1.png
![sample1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/8d2b0eef-8ebb-875b-6bab-251dcd736551.png)


```shell:コマンド
python app.py ./sample1.png
```

- 出力
```shell:出力
テ ス ト テ キ ス ト

hogehogehogehogehogehogehogehoge

③②①①②③④⑤⑥⑥⑤④⑦⑧⑨⑨⑧⑦000

し ん ぶ ん し シ ン ブ ン シ 新 聞 紙 !!

馬 馬 馬 馬 馬 馬 馬 馬

騙 騙 監 騙 監 監 馬 監 騙 騙 騙 騙 騙 監 騙 監 監 馬 監 騙 馬 騙 騙 騙 監 騙 騙 監 騙 監 騙 馬 騙 騙 属 監  愚
騙 騙 騙 騙 騙
```

:::note alert
- 漢字の読み取り間違いが多々ある
- 数字は読み取ってはいるが、丸数字になってしまっている
:::

## 色々試してみた

- 入力
![sample2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/ced34308-a78e-1543-7c25-31918a16d2b9.png)


- 出力
```shell:コマンド
画 像 認 識 と は 、 画 像 に 写 っ う て い る も の を 認 識 す る 技 術 で す 。 取 り
込 ま れ た 写 真 デ ー タ の 特 徴 を さ ま ざ ま な 学 習 機 で 分 析 し て 、 新 た
な 画 像 を 識 別 す る こ と が で き ま す 。 一 般 的 に コ ン ピ ュ ー タ は 画 像
を ビ ク セ ル の 集 合 体 と し て し か 認 識 で き ま せ ん が 、 実 際 に は 人
物 、 動 物 、 文 字 、 イ ラ ス ト と い っ た 情 報 や 意 味 が 含 ま れ て い ま

す 。 apacms
```

- 入力
![sample3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/a1e0fc3a-688e-cdbc-2a04-f33e79ed4808.png)


- 出力
```shell:コマンド
Ryo ihi
@oome

0 ⑨ ミ

⑦②⑧ cweucs

団 0 ⑥ B
B ラ ォ ロ ー ロ ロ ー
ア プ リ M 発 が W 睦エ ン シ ー ア , コ ー テ ィ

ン グ 、 更 痒 輝 、 エ ラ ー 触 ③ 等 に っ い て H 縛 し て
い ま す . 切 字 音 で ち ② う か る よ う ま CWB し ま

す . ⑨⑧⑨ 團 口 は 來 人 の 愚 見 で あ り 、 所 医 約 画 の
分 R 和 常 で は あ り ま せ ん 。
```

- 入力
![sample4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/59411e87-1083-cc9a-f71c-49e655e513fc.png)


- 出力
```shell:コマンド
フ ォ ロ ー 中 の タ グ ラ ォ ロ ー ぁ
crrs qmcr uay emoL naa Aes

mMmi ooee puce ja
```

- 入力
![sample5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/337aae12-1090-6025-1812-e526c520d66d.png)


- 出力
```shell:コマンド


```

- 入力
![sample6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/b7d5f0a8-33ae-dabc-6a35-2ba3ec130737.png)


- 出力
```shell:コマンド
デ ィ ー プ ラ ー ニ ン グ ( 深 履 学 習 ) と は 、 人 間 が 自 然 に 行 う タ ス ク を コ
ン ピ ュ ー タ に 学 習 さ せ る 機 棒 学 習 の 手 法 の ひ と つ で す 。 人 工 知 背
(AD の 急 速 な 発 展 を 支 え る 技 術 で あ り 、 そ の 進 歩 に よ り 様 々 な 分 野
へ の 実 用 化 が 進 ん で い ま す 。 近 年 開 発 の 進 ん で い る 自 動 運 転 車 に お
い て も カ ギ と な っ て い る の は 、 デ ィ ー プ ラ ー ニ ン グ で す 。 停 止 梶 譚
を 認 識 し た り 、 電 柱 と 人 間 を 区 別 し た り す る の も 、 デ ィ ー プ ラ ー ニ
ン グ が 可 能 に し て い る 技 術 と 言 え ま す 。 ま た 、 電 話 、 タ ブ レ ッ ト 、
テ レ ビ 、 ハ ン ズ フ リ ー ス ピ ー カ ー な ど の 音 声 認 識 に も 重 要 な 役 副 を
果 た し て い ま す 』 近 年 デ ィ ー プ ラ ー ニ ン グ が 注 目 を 集 め て い る の に
は 理 由 が あ り ま す 』。 そ れ は ほ デ ィ ー プ ラ ー ニ ン グ が 、 従 来 の 技 術 で は
不 可 能 だ っ た レ ベ ル の パ フ ォ ー マ ン ス を 達 成 で き る よ う に な っ て き
て い る か ら で す 。 り

ト
```

:::note info
背景が白、文字が黒、きっちり並んでいる文字列だったら読み取れそう。
:::


## GitHub

今回の記事で紹介したソースコードをGitHubで公開しています。

https://github.com/ryomeblog/image2text