【Python編】OCRプログラミング入門講座 – OCRプログラミングで手書き文字認識(日本語)
【日本語手書き文字認識】
Google ColaboratoryのJupyterノートブックの開発環境で、OCRエンジンの「Tesseract OCR」(テッセラクトOCR)とPython用のOCRツールラッパーの「PyOCR」(パイOCR)を使って、日本語の手書き文字を認識出来る光学文字認識プログラミングを実施してみましょう。
【Python】OCRプログラミング:手書き文字認識(日本語)をしてみよう。
Tesseract OCR・PyOCR・Google Colaboratoryで光学文字認識入門
視聴時間:2分54秒
日本語の手書き文字を認識する比較的簡単なOCR(Optical Character Recognition:光学文字認識)プログラミングのチュートリアル動画を作成してみました。
動画では、Google ColaboratoryのJupyterノートブックでOCRエンジンの「Tesseract OCR」(テッセラクトOCR)とPython用のOCRツールラッパーの「PyOCR」を使って光学文字認識プログラミングをしています。
今回は
・手書き文字(日本語:平仮名・カタカナ)
を上手く認識する方法を試しています。
パソコン・スマホ等の文字と違い、手書き文字では「文字のクセ」「文字の大きさ」「文字の太さ」「文字の濃さ」「文字の間隔」などの要素が、書く人や時と場合によって違うことも考えられるので、パソコンの均一な文字に比べるとOCRが難しくなることが予想されます。
今回は、ボールペンで書いた文字をスキャンしたものをパソコンに取り込んで行う、比較的簡単な手書き文字の認識でしたが、上手く認識してもらうにはプログラムの微調整が必要でした。これから手書き文字のOCRを行いたい方の参考になることがありましたら幸いです。
また、OCRの一般的なポイントとして、「大きい文字」で「画像が綺麗」な文字はOCRしやすいようです。
日本語縦書き対応版プログラムはこちら
:【Python編】OCRプログラミング:日本語縦書き対応版(Tesseract OCR)
Pythonサンプルコード
すぐに使えるサンプルコードリンク:
OCR_basic_tegaki_sample.ipynb(Google ColaboratoryのJupyterノートブック)
サンプルコードの使い方は動画を参照ください。
***** サンプルコード:はじめ ******
#OCRエンジンの「 Tesseract OCR 」(テッセラクトOCR)をインストールします。
!apt install tesseract-ocr libtesseract-dev tesseract-ocr-jpn
#PyOCRをインストールします。
!pip install pyocr
#OCR実行する画像をアップロードします。(アップロード後、画像を確認します)
#「tegaki-moji.png」「pc-moji.png」のところを変更して使ってみてください。
from IPython.display import Image,display_png
display_png(Image('tegaki-moji.png')) #ここを変更
display_png(Image('pc-moji.png')) #手書き文字と比較用の画像です、使う時はコードを消してください。
#OCRに挑戦
#「tegaki-moji.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('tegaki-moji.png'), #ここを変更
lang='eng+jpn',
builder=pyocr.builders.TextBuilder(tesseract_layout=11) #オプション番号は必要に応じて変更してください。デフォルトは「3」
)
print('\n\nOCR(光学文字認識)の実行結果\n\n\n__________________\n\n',txt, '\n\n__________________\n\n')
***** サンプルコード:ここまで ******
手書き文字認識の精度向上へ向けて
【builderのオプションの変更について】
builder=pyocr.builders.TextBuilder()
オプションを番号で指定 例
builder=pyocr.builders.TextBuilder(tesseract_layout=3)
Page segmentation modes:の例を参考
(内容の詳細はよくわかりませんが、色々と試してみてください。今回は「11」にすると上手く認識できるようでした。)
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行のテキストとみなす。
【手書き文字・活字のテキスト化代行サービス】画像・写真・PDF
【対応文字】
・活字(パソコンの文字)
・手書き文字(紙面上の文字・ホワイトボード上の文字等)
* 有料オプションで英語の画像をテキスト化することにも対応
【納品方法】
・Word形式
・Excel形式
・テキスト形式
OCRの精度は徐々に向上してきていますが、やはり最後に頼りになるのは
・人力(実際に人が確認し文字起こしをする)
ではないかと思います。
OCRを試したものの、うまくいかない方は、こちらのテキスト化代行サービスも検討してみてください。
WITH TEAM 文字起こしの詳細はこちら
:【画像・写真・PDFのテキスト化サービス】WITH TEAM 文字起こし | 株式会社サクラボ
【日本語手書きOCR編】連続文字画像認識プログラミング入門(Python・OpenCV・Keras・CNN)
自作OCRで日本語手書き文字認識をするためのチュートリアルも公開しました。
一連のチュートリアルでは、
・日本語文字画像の画像認識のための学習済みモデル作成
・文字検出のための各ステップ
・オリジナルOCRと再学習
までの手順をまとめています。
既存のOCRエンジンを扱うだけでは物足りない方の、何かしらの参考になることがありましたら幸いです。
Pythonではじめる日本語OCR開発 – 手書き文字認識編
視聴時間:1時間12分38秒
【動画の内容】
0:00 はじめに
1:01 ステップ0:概略
6:36 ステップ1:学習済みモデル作成
16:40 ステップ2:1文字判定
24:44 ステップ3-1:文字検出
34:38 ステップ3-2:直線の検出と除去
43:31 ステップ3-3:ノイズ除去
53:03 ステップ3-4:角度補正
59:55 ステッ プ4:OCRに挑戦と再学習
1:11:46 おわりに
各ステップの一覧ページはこちら
:【日本語手書きOCR編】連続文字画像認識プログラミング入門(Python・OpenCV・Keras・CNN)| 一覧ページ
各記事には動画で使用しているサンプルコードへのリンクなども掲載中です。