🍲

Tesseract OCR で 文字認識 を試してみました

2021/11/21に公開

Google様が公開している OCR エンジン 「Tesseract」 をお借りして
さくっと文字認識を試してみました。

https://github.com/tesseract-ocr/tesseract

環境

今回はpythonで試してみます。

  • OS: macOS Catalina
  • python3.7
  • Anaconda

必要物資を調達

  • tesseract
conda install -c conda-forge tesseract
  • pyocr (anaconda.org からはmacのものが見つからず)

※pythonでOCRツールを利用するためのラッパー(tesseractにも対応)
https://gitlab.gnome.org/World/OpenPaperwork/pyocr

pip3 install pyocr
  • pillow (画像処理ライブラリ)
pip3 install pillow

試してみる

ドキュメントの「Initialization」を実行

from PIL import Image
import sys

import pyocr
import pyocr.builders

tools = pyocr.get_available_tools()
if len(tools) == 0:
    print("No OCR tool found")
    sys.exit(1)
# The tools are returned in the recommended order of usage
tool = tools[0]
print("Will use tool '%s'" % (tool.get_name()))
# Ex: Will use tool 'libtesseract'

langs = tool.get_available_languages()
print("Available languages: %s" % ", ".join(langs))
lang = langs[0]
print("Will use lang '%s'" % (lang))
# Ex: Will use lang 'fra'
# Note that languages are NOT sorted in any way. Please refer
# to the system locale settings for the default language
# to use.
  • 実行結果

しっかりと利用可能なOCRツール(Tesseract) と 利用可能な言語が出力されました。

Will use tool 'Tesseract (sh)'
Available languages: afr, amh, ara, asm, aze, aze_cyrl, bel, ben, bod, bos, bre, bul, cat, ceb, ces, chi_sim, chi_sim_vert, chi_tra, chi_tra_vert, chr, cos, cym, dan, deu, div, dzo, ell, eng, enm, epo, est, eus, fao, fas, fil, fin, fra, frk, frm, fry, gla, gle, glg, grc, guj, hat, heb, hin, hrv, hun, hye, iku, ind, isl, ita, ita_old, jav, jpn, jpn_vert, kan, kat, kat_old, kaz, khm, kir, kmr, kor, kor_vert, lao, lat, lav, lit, ltz, mal, mar, mkd, mlt, mon, mri, msa, mya, nep, nld, nor, oci, ori, osd, pan, pol, por, pus, que, ron, rus, san, script/Arabic, script/Armenian, script/Bengali, script/Canadian_Aboriginal, script/Cherokee, script/Cyrillic, script/Devanagari, script/Ethiopic, script/Fraktur, script/Georgian, script/Greek, script/Gujarati, script/Gurmukhi, script/HanS, script/HanS_vert, script/HanT, script/HanT_vert, script/Hangul, script/Hangul_vert, script/Hebrew, script/Japanese, script/Japanese_vert, script/Kannada, script/Khmer, script/Lao, script/Latin, script/Malayalam, script/Myanmar, script/Oriya, script/Sinhala, script/Syriac, script/Tamil, script/Telugu, script/Thaana, script/Thai, script/Tibetan, script/Vietnamese, sin, slk, slv, snd, spa, spa_old, sqi, srp, srp_latn, sun, swa, swe, syr, tam, tat, tel, tgk, tha, tir, ton, tur, uig, ukr, urd, uzb, uzb_cyrl, vie, yid, yor
Will use lang 'afr'

ドキュメントの「Image to text」を実行

以下画像を生贄にします。



image_to_string で画像から文字認識してみます。

txt = tool.image_to_string(
    Image.open('hanamaruki.png'),
    lang='jpn',
    builder=pyocr.builders.TextBuilder()
)
print(txt)
  • 実行結果
はなまるきスープとは味噌汗

便利です。
しっかりと認識している・・・と思いきや、 「汁 ➡︎ 汗」 と認識されました。
まぁ、味噌汁も紐解けば汗のようなものでしょうか。
ですので良しとします。

続いて画像を以下に変更して試してみます。



  • 実行結果
それぞれ「手」を入れ替えてポーズを変えることができます

いい感じです。

導入がとても簡単で便利です。
汁が汗になるので、そこは要注意ですね。

Discussion