お疲れ様です。
OCR(Optical Character Recognition:光学的文字認識)は画像に含まれる文字をコンピュータで認識できるテキストの形で読み取る技術のこと。
最近だとOSSでYomiTokuが日本語特化OCRとしてはとても優秀です。
GutHub github.com
使い方説明 qiita.com
使い方にもあるようにターミナル上からコマンドで実行することができます。
例えば以下のコマンドを実行すると、画像内のレイアウトと文字を検出し、検出した情報を可視化した画像ファイルとmarkdownでテキストをファイル出力してくれます。
./imagesに解析したい画像ファイルを入れる形です。
yomitoku ./images -f md -v
- 検出結果

今宵の月のように
作詞 · 作曲 宮本浩次
くだらねえとつぶやいて
醒めたつらして歩く
いつの日か輝くだろう
あふれる熱い涙いつまでも続くのか
吐きすてて寝転んだ
俺もまた輝くだろう
今宵の月のように夕暮れ過ぎて きらめく町の灯りは
悲しい色に 染まって揺れた
君がいつかくれた 思い出のかけら集めて
真夏の夜空 ひとり見上げた新しい季節の始まりは
夏の風 町に吹くのさ
このようにコマンドだけでも十分に使えるのですが、Pythonのライブラリとしても使用することができます。
自作のプログラムに組み込むこともできるということです。
ライブラリとして使用できるという情報はほとんど見当たらなかったので個人的に調べて、簡単に実装したものをメモとして残しておきます。
ソースコード
ソースコードはGithubに置いてありますので必要に応じてご参照ください。 github.com
※Yomitokuのバージョンは2025年10月時点の最新バージョン0.9.5です。
import os os.environ["HF_HOME"] = "./pretrained" from pathlib import Path from yomitoku import TextDetector, TextRecognizer import cv2 import pandas as pd td = TextDetector() tr = TextRecognizer() Path("./result").mkdir(parents=True, exist_ok=True) anno_dict = {"img": [], "text": []} image_dir_path = Path(".images") for image_path in image_dir_path.glob("*"): img = cv2.imread(image_path) layout = td(img) for i, pt in enumerate(layout[0].points): x1, y1 = pt[0] x2, y2 = pt[2] try: crop_img = img crop_img = crop_img[y1:y2, x1:x2] crop_img_name = f"{Path(image_path).stem}_{i+1}.png" cv2.imwrite(f"./result/{crop_img_name}", crop_img) except: continue result = tr(crop_img) text = result[0].contents[0] text = text.replace("·", "・") anno_dict["img"].append(crop_img_name) anno_dict["text"].append(text) print(text) anno_df = pd.DataFrame(anno_dict) anno_df.to_csv("./result/annotations.csv", encoding="cp932", index=False)
YomiTokuからはTextDetectorとTextRecognizerをインポートしています。
TextDetector
画像から文章や文字の部分を検出する。(物体検出の部分)
検出した矩形の座標などの情報を出力する。TextRecognizer
画像内の文字をテキストとして検出する。(OCRの部分) 入力は画像と文字部分を囲う座標情報です。上記のTextDetectorで出力した座標が使えます。
座標情報はオプションなので入力は必須ではないです。入力なしの場合は画像全体を見ますが、おそらく座標で切り出すことを前提としているのでそのままではうまく検出できないはず。
プログラムではTextDetectorで得られた座標情報から左上座標と右下座標を取得してクロップし、クロップ後の画像を入力してテキスト出力させています。
出力はこんな感じになります。AI OCRのモデル学習に使うデータのアノテーションに使えます。というか、それを想定して作りました。
(もちろん画像によっては誤検出もあるのでそれらは人の目で確認する必要はあります…。)


他にも機能はあるので、いろいろと使えそうです。
本当に高精度で扱いやすいのですが、商用利用は有償なので手軽には使えないのが残念…。
業務で使う機会があったら是非使いたいです。