pytesseractを使って画像文字認識（英語および日本語[縦書き・横書き]）を試してみた

# 私の環境
>iMacOS vetura 13.2
Python 3.10.4
Homebrew 4.2.4
pip 23.3.2

# そもそも、画像の文字認識ってできるの？から始まりました。
>蔵書管理のprogramを作っているけど、その中に内容の概要があれば後から分かり易いけど、**「裏表紙のあらすじ」を文字化できない**かな？
そこでchatGPTに聞いてみました。
![スクリーンショット 2024-01-21 10.43.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634708/19592d3f-ed06-7cdf-84f9-d706f655855b.png)
出来ると言うことから、チャレンジしてみました。
でも、結論から言うと、目的である「裏表紙のあらすじ」を文字化して利用するには、もう少し研究しないとダメかもしれないと言うことです。
でも、新しい？（自分の中では）技術を知ったことは大変な喜びです。色々と使えそうです。
# 最初は失敗しました。
>私はここで躓きました。
それは原因は<font color='red'>"homebrew"を通さずに、"pytesseract"をインストール</font>したため、肝心な日本語（縦書きを含む）を読み込む段階でErrorとなりました。
また、次には、**縦書**きでは読み込めないことでした。
でも、以下の通りで解決しました。

参考にしたサイト

https://pypi.org/project/pytesseract/

https://xs735978.xsrv.jp/665.html#toc7


# まず、最初に行うこと
>HomeBrewに"tesseract"をインストール
```python3
# HomeBrewに"tesseract"をインストール
xxxxx@xxxxxnoiMac ~ % brew install tesseract
```
>こんな感じで始まりました。1分ぐらい動いてました。そして<font color='blue'>”他の言語が必要な場合はbrew install tesseract-lang」”を実行しろ</font>と表示が出て終わりました。
```python3
xxxxx@xxxxxnoiMac ~ % brew install tesseract
Running `brew update --auto-update`...
##################################################################
：
省略
：
==> Caveats
==> tesseract
This formula contains only the "eng", "osd", and "snum" language data files.
If you need any other supported languages, run `brew install tesseract-lang`.
（この式には、「eng」、「osd」、および「snum」言語データ ファイルのみが含まれています。
サポートされている他の言語が必要な場合は、「brew install tesseract-lang」を実行してください。）
```
>なので、指示通り「brew install tesseract-lang」をインストールしました。
```python3
# 日本語（jpn)を使用するため、上記指示に従い「brew install tesseract-lang」をインストール
xxxxx@xxxxxnoiMac ~ % brew install tesseract-lang
```
>簡単にインストールは終了しました。**pipだとインストールが成功すると
Successfully installed xxxxxxとか表示されるけど**、なにも表示されませんでした。
<font color='blue'>変わりに”この動作を無効にします。”と表示がされましたが、警告でもエラーでもないので放っておきました。特に問題はなかったです。</font>
ちなみに　chatGPTの回答は
![スクリーンショット 2024-01-21 10.55.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634708/56fa0672-a682-d8d6-2783-8af81ed42e7d.png)

```python3
xxxxx@xxxxxnoiMac ~ % brew install tesseract-lang
==> Downloading https://ghcr.io/v2/homebrew/core/tesseract-lang/manifests/4.1.0-1
###########################################################100.0%
：
省略
：
==> Running `brew cleanup tesseract-lang`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).

HOMEBREW_NO_INSTALL_CLEANUP を設定して、この動作を無効にします。
これらのヒントは HOMEBREW_NO_ENV_HINTS で非表示にします (「man brew」を参照)。
```
>次に、pipに"pytesseract"をインストールします。これは特に問題なことはなく通常通り終了しました。
```python3
# "pytesseract"をインストール
xxxxx@xxxxxnoiMac ~ % python3 -m pip install pytesseract
```
```python3
xxxxx@xxxxxnoiMac ~ % python3 -m pip install pytesseract
pytesseract
Collecting 
：
省略
：
Installing collected packages: pytesseract
Successfully installed pytesseract-0.3.10
(pytesseract-0.3.10が正常にインストールされました)
```
# これで準備は整いました。
>次にサンプルの画像を準備します。これらの”スクリーンショット”を、current directory（下のprogramの置いてあるディレクトリ）に保存します。(jpgでもpngでも大丈夫ででした。PDFはダメでした＞)
こんな感じです。
![スクリーンショット 2024-01-21 10.22.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634708/8adf6d3f-f21a-cd6c-2577-3aa5b8d353d6.png)

[横書きの例]
![横書き.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634708/d73fb04f-e6bc-c56f-8e4b-3c16b68675ed.png)
[縦書きの例]
![縦書き.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634708/2ed37a08-fb43-19b2-04a3-2477c0696660.png)

>コードは以下の通り簡単です。
```python3
# PythonとOCR（光学文字認識）の組み合わせによる画像内のテキストを自動的に読み取る

# 日本語のOCDテストprogram
import pytesseract
from PIL import Image
import os

# current_directryを調べる
cur_path = os.getcwd()

#OCRするPhotoを指定
photo = '/横書き.png'
str_img = Image.open(cur_path + photo)

# 日本語（縦書きを含む）を読み込む
str = pytesseract.image_to_string(str_img,lang="jpn+jpn_vert")
print(str)

```
>photo = "/ "のところにphotoの名前を入力してください。
ターミナル上に表示されます。

# 上手く行かない画像の例です。
[画像例01]
![test_png.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634708/7a351abc-ee37-e51a-1b3a-ae237de251a7.png)
>これは出発点が一文字が2列分になっていて誤読されます。
<ターミナルへの表示>
```python3
しPD
ノ が本部長を務めるロス北郊のサンフェ
ルナンドの市警察に誘われ、無給の嘱託
刑事として勤務するようになっていた。
一方で取り直した免許により、私立探偵
として個人的な仕事を受けていた。ある
日、刀歳の大富楽ホイットニー・ヴァン
スから呼び出され、人捜しを依頼される。

レーい先短いことを悟った富革には学生

の頃知り合い妊娠させながらも、親

り計和培全丈おスキロスS稀べく会お?
その子どもが生きていれば捜してほしい
と頼まれたボッシュは調査を引き受ける。
方、同僚刑事と連続婦女暴行事件捜査
を進めるなか、同一犯によると思しき暴
行末遂事件が起こり、事態が急展開する。
```
[画像例02]
![病院坂の首縊りの家.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634708/8c6a2276-842a-9515-bf8d-93ee7365e268.png)
>原因はわかりませんが、こんな感じで表示されます。
<ターミナルへの表示>
```python3
=ここ 消僚の女が首を給った
忌まわしき旧法眼邸。 明治から
戦手まで隆盛を極め、"病院坂"
という地名にまでなった大病院
の屋敷跡であった……。本條写
真館の息子直吉は、ある晩そこ
で奇妙な結婚記念写真を依頼さ
れた。 住む人もない廃屋での撮
影は、不吉な出来事を暗示して
いるようであった。 数日後、再
び撮影で屋敷を訪れた直吉は、
そこに鮮血を滴らせ風鈴の如く
ぶら下がった男の生首を発見す
るが…!?
```

>これなんかは、誤字も最初の方にありますが、まずまず表示されています。
[画像例03]
![ターミナル.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634708/fd316384-16a9-693d-4ea3-644a12d0cf6b.png)
<ターミナルへの表示>
```python3
# PythonとOCR (光学文字認識) の組み合わせによる画像内のテキストを

# 日本語の0OCDテストprogram
1mport pytesseract
from PIL import Image
import os

# Current_directryを調べる
cur_path = os.getcwd( )
#0CRするPhotoを指定
photo = '/横書き.png'
str_img = 1mage.open(cur_path + photo)

# 日本語 (縦書きを含む) を読み込む
動的に読み取る
str = pytesseract.image_to_string(str_img, Lang="]Dpn+]Dn_Vert")
print(str)
'''