【Python編】OCRプログラミング入門講座 – OCRプログラミングで英語・日本語縦書き文字をテキスト化
【縦書き対応板- 日本語・英語】
Google ColaboratoryのJupyterノートブックの開発環境で、OCRエンジンの「Tesseract OCR」(テッセラクトOCR)とPython用のOCRツールラッパーの「PyOCR」(パイOCR)を使って、日本語・英語の縦書き対応版の光学文字認識プログラミングを実施してみましょう。
【Python】OCRプログラミング – 縦書き対応版。
Tesseract OCR・PyOCR・Google Colaboratoryで光学文字認識入門
視聴時間:3分12秒
縦書き対応板(日本語・英語)の比較的簡単なOCR(Optical Character Recognition:光学文字認識)プログラミングのチュートリアル動画を作成してみました。
動画では、Google ColaboratoryのJupyterノートブックでOCRエンジンの「Tesseract OCR」(テッセラクトOCR)とPython用のOCRツールラッパーの「PyOCR」を使って光学文字認識プログラミングをしています。
:【Python編】OCRプログラミングをはじめてみよう(Tesseract OCR)
に公開しているサンプルコードでは、縦書きの文字や文章認識が苦手だったので対応方法を調べてみました。
対応方法として
・「tesseract-ocr-jpn-vert」(vert :vertical – 垂直・日本語縦書き向け)のインストール
・builderのオプションの変更 builder=pyocr.builders.TextBuilder()
をすることで縦書きの文字も認識出来るようでした。
Pythonサンプルコード
すぐに使えるサンプルコードリンク:
OCR_basic_vertical_sample.ipynb(Google ColaboratoryのJupyterノートブック)
サンプルコードの使い方は動画を参照ください。
***** サンプルコード:はじめ ******
#OCRエンジンの「 Tesseract OCR 」(テッセラクトOCR)をインストールします。
#「tesseract-ocr-jpn-vert」(vert :vertical – 垂直・日本語縦書き向け)を追記しています。
!apt install tesseract-ocr libtesseract-dev tesseract-ocr-jpn tesseract-ocr-jpn-vert
#PyOCRをインストールします。
!pip install pyocr
#OCR実行する画像をアップロードします。(アップロード後、画像を確認します)
#「ocr1.png」のところを変更して使ってみてください。
from IPython.display import Image,display_png
display_png(Image('ocr1.png')) #ここを変更
#OCRに挑戦
#「ocr1.png」のところを変更して使ってみてください。
from PIL import Image
import pyocr
import pyocr.builders
tools = pyocr.get_available_tools()
#OCRが使えるかチェック
if len(tools) == 0:
print('OCRツールが使えません')
sys.exit(1)
tool = tools[0]
print("インストールされているOCRツールは', %s" % (tool.get_name()) ,'です。\n Tesseract(テッセラクト)は光学文字認識のエンジンです。\n\n')
langs = tool.get_available_languages()
print(langs,'などの言語を指定できます。')
# OCRを実行する画像イメージや言語指定、オプション指定
txt = tool.image_to_string(
Image.open('ocr1.png'), #ここを変更
lang='eng+jpn_vert', #ここを日本語縦書き認識用に変更しています。
builder=pyocr.builders.TextBuilder(tesseract_layout=5) #ここを縦書き認識用に変更しています。
)
print('\n\nOCR(光学文字認識)の実行結果\n\n\n__________________\n\n',txt, '\n\n__________________\n\n')
***** サンプルコード:ここまで ******
縦書き日本語文章の認識精度向上に向けての考え方
その1
「tesseract-ocr-jpn-vert」(vert :vertical – 垂直・日本語縦書き向け)をインストールし、プログラムの言語指定を「jpn_vert」にする。
その2
builderのオプションの変更をします。
builder=pyocr.builders.TextBuilder()
オプションを番号で指定 例
builder=pyocr.builders.TextBuilder(tesseract_layout=5)
Page segmentation modes:の例を参考
(内容の詳細はよくわかりませんが、色々と試してみてください。今回は「5」を指定してみます。指定しない場合は「3」のようです。)
0:Orientation and script detection (OSD) only.- OSD(言語データ:osd.traineddata)のみ。文字方向と書字系の検出。
1:Automatic page segmentation with OSD. – OSDありで自動ページセグメンテーション。
2:Automatic page segmentation, but no OSD, or OCR. – OSDなしで、OCRと自動ページセグメンテーション。
3:Fully automatic page segmentation, but no OSD. (Default) – デフォルト設定。OSDなしで自動判断。
4:Assume a single column of text of variable sizes. – 可変サイズのテキストと仮定して認識。
5:Assume a single uniform block of vertically aligned text. – 垂直テキストの単一ブロックと仮定。 (縦書きの文字認識向け)
6:Assume a single uniform block of text. – テキストの単一ブロックと仮定して認識。デフォルトの「3」よりも認識率が良い。(横書き向け?)
7:Treat the image as a single text line. – 画像を1行の文字列として認識。
8:Treat the image as a single word. – 1単語として認識。
9:Treat the image as a single word in a circle. – 画像を丸の中の1単語として認識。
10:Treat the image as a single character. – 画像を1つの文字(一文字)として認識。
11:Sparse text. Find as much text as possible in no particular order. – 文字が散らばっているテキスト。
12:Sparse text with OSD. – 文字が散らばっているテキスト。OSD(言語データ:osd.traineddata)が必要。
13:Raw line. Treat the image as a single text line,bypassing hacks that are Tesseract-specific.- Tesseract特有の処理を回避し、画像を1行のテキストとみなす。