動画:【自作OCR開発中…】日本語手書き文字(横書き・縦書き対応)
Python機械学習プログラミング・Keras・CNN・OpenCV
視聴時間:1分50秒
【開発中のOCRプログラミング学習用の自作OCRの機能】
・直線検出と除去(Straight line detection & cut)
・ノイズ除去(Denoising・Noise reduction)
・角度補正(Rotation correction)
・ブロック検出(文章のかたまりの検出 – 膨張処理による検出)
・行と列の検出(膨張処理による検出)
・個別文字検出(膨張処理による検出)
・文字認識(CNNによる画像認識 – オリジナルデータセットで学習)
上記の機能を組み合わせることで、OCRとして機能するようにしています。
動画を視聴いただくとわかるのではないかと思いますが、ようやく、自分で書いた手書きの日本語の文字(文章)をOCRすることができました。
プログラムは、
・Python
・Keras(CNN:畳み込みニューラルネットワーク・ディープラーニング)
・OpenCV(文字検出など)
で開発しています。
また、以下のプログラム
【自作OCR開発 – デジタル数字編】
を応用して作成しています。
今後作成予定のチュートリアルでは、
・オリジナルデータセットで学習済みモデル作成〜OCR開発(Google Colaboratoryを利用)
までを簡単に解説予定(使い方の解説予定)です。
記事(OCRプログラムのコード公開)・チュートリアル動画作成などは今後、少しずつ実施予定です。
お楽しみに♪
【進捗状況】
以下の記事に投稿中です。
:【日本語手書きOCR編】連続文字画像認識プログラミング入門(Python・OpenCV・Keras・CNN)| 一覧ページ
2021年10月4日に完成しました。
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 おわりに
各ステップの記事。
【ステップ1】
日本語手書き文字画像認識用オリジナル学習済みモデルの作成(ひらがな・カタカナ・漢字・、点・。丸)
– 【日本語 – 手書き編】OCR用のオリジナル学習済みモデルの作成方法
:チュートリアル用の日本語手書き文字のオリジナルデータセットを使いKerasで実装したディープラーニングのCNN(Convolutional Neural Network:畳み込みニューラルネットワーク)で、階層的データ形式(Hierarchical Data Format:HDF5)の学習済みモデルを作成します。
【ステップ2】
1文字判定(日本語手書き:ひらがな・カタカナ・漢字・ローマ字・点、・丸。)
– 【日本語 – 手書き編】1文字判定
:ステップ1で作成した学習済みモデルを使って、日本語や記号(。、)、ローマ字の画像認識をします。
【ステップ3】
ステップ3では「1〜4」に分けて、横書き・縦書きの日本語の文字検出を行います。
【ステップ3-1:水平・垂直の文章の日本語検出】
– シンプルな横書き・縦書き文章の日本語手書き文字検出(ブロック→行と列→個別文字)
:真っ白な背景に、手書き文字が書かれた画像を使って、文字検出を行います。
【ステップ3-2:線が入った画像の日本語検出】
– 直線除去の機能を実装:横書き・縦書き文章の日本語手書き文字検出(ブロック→行と列→個別文字)
:ステップ3-1の画像に直線が追加された画像を使って、文字検出を行います。
【ステップ3-3:点々などのノイズの入った画像の日本語検出】
– ノイズ除去の機能を実装:横書き・縦書き文章の日本語手書き文字検出(ブロック→行と列→個別文字)
:ステップ3-2の画像に点々等の細かいノイズが追加された画像を使って、文字検出を行います。
【ステップ3-4:傾いた画像の日本語検出】
– 傾き・角度補正の機能を実装:横書き・縦書き文章の日本語手書き文字検出(ブロック→行と列→個別文字)
:ステップ3-3の画像を傾けた(回転させた)画像を使って、文字検出を行います。
【ステップ4】日本語手書きOCR:横書き・縦書き文字認識 +再学習
– 【日本語手書き編 – 自動文字検出・抽出OCR】連続文字判定:横書き・縦書き(ひらがな・カタカナ・漢字・ローマ字・、点・。丸)+再学習
:ステップ1で作成した学習済みモデルを使って、OCRに挑戦。必要に応じて再学習(学習機能付きOCR)
日本語手書き対応のOCR開発の経緯
まさか自分で、日本語の手書き文字対応のOCRを作り始めることになるとは、プログラミングを学び始めた当初は考えもしませんでした。
今回、なぜ、日本語対応OCRを開発しようと考えたかについて、まとめておきます。
これまでに、いくつかの画像認識系のPythonプログラミングのチュートリアルを公開してきたこともあり、コメントを頂くことがあります。
その中で、
「 OCRについて取り上げて欲しい 」
というコメントを頂いたことがありました。
コメントを頂いた当初は、
「 OCRって何?」
というレベルでしたが、調べてみると
・Optical Character Recognition/Reader(オーシーアール – 光学的文字認識)
ということで、文章などを文字認識することのようでした。
「 でも、OCRって、自分でプログラミングできるの?」
と思いましたが、調べてみると、オープンソースで
・Tesseract OCR(テッセラクトOCR)
・SSOCR(Seven Segment Optical Character Recognition:7セグメントディスプレイ数字用OCR)
などが公開されているようでした。現在(2021年時点)は、上記の文字認識エンジンなどを使うことで、先人の叡智を、ちょっとしたプログラムを書くだけで活用できる時代のようです。
その後、自分自身の学習も兼ねてTesseract OCR系のプログラミング入門チュートリアルをいくつか作成することにしました。
【Tesseract OCR系のプログラミング入門チュートリアル】
:【簡単】PythonでOCRプログラミング入門 – 機械学習・AIの恩恵(YouTube動画 by RehabC – デジタルで遊ぶ。)
:【Windows編】OCRアプリプログラミング入門 – 機械学習・AIの恩恵(YouTube動画 by RehabC – デジタルで遊ぶ。)
:【Mac編】OCRアプリプログラミング入門 – 機械学習・AIの恩恵(YouTube動画 by RehabC – デジタルで遊ぶ。)
OCRには、少し興味が湧いてきましたが、個人開発で無料でできる範囲では、7セグメントのデジタル数字認識を始め、まだまだ課題も多そうでした。
頂いたコメントの中に、
「 デジタル数字のOCRが上手くできない・・・ 」
というものがあったので、しばらく、無料で使える
・Tesseract OCR(テッセラクトOCR)
・SSOCR(Seven Segment Optical Character Recognition:7セグメントディスプレイ数字用OCR)
などの文字認識エンジンで試行錯誤をしていましたが、最終的には、それぞれの用途にあったデジタル数字認識用のOCRを作るには
「 自分で作った方が早い? 」
と思い始めました。
そこで作成してみたのが、上述のデジタル数字用のOCR開発のチュートリアルです。
【デジタル数字認識のOCRプログラミング入門チュートリアル】
デジタル数字用のOCR開発のチュートリアルを作成する中で、
「 もしかして、このプログラムを応用すれば、日本語対応の自作OCRを作れる? 」
と思い始めました。
現在、有料で公開されている日本語対応のOCRソフトは、
・文字検出方法の工夫
・後処理(OCR結果から、おかしな文脈を処理)
などがされているのではないかと思いますが、今回は、
・膨張処理を工夫
することで、(力ずくで・・・)
・ブロック検出(文章のかたまりの検出 – 膨張処理による検出)
・行と列の検出(膨張処理による検出)
・個別文字検出(膨張処理による検出)
などの文字検出を試みました。
この方法では、
・1文字の中の線の間隔
・文字と文字の間の間隔
をうまく調整しないと、個別の文字検出に失敗しやすいようでしたが、2ヶ月程、悪戦苦闘する中で、ようやく、自分で書いた日本語の文章のOCRに成功しました。
横書き:日本語の手書き文字(文章)のOCRに成功
縦書き:日本語の手書き文字(文章)のOCRに成功
今回は、開発するにあたって、実現したい機能を実装する方法を調べては試し、失敗し・・・
の繰り返しではありましたが、とりあえずの形になりそうな目処が立ってきました。
コードの公開や、チュートリアル記事や動画の公開までには、まだまだ、やることはたくさんありそうですが、今後、少しずつ作成していきたいと思います。
日本語対応の自作OCR開発で気になる情報について
文字認識エンジンを活用せずに、自分でOCR開発を試みた方は、ご存知かと思いますが、日本語対応のOCR開発をするための日本語の技術的な情報は、あまりありません。
(オープンソースで公開されている文字認識エンジンのコードを眺められますが・・・)
数少ないOCR開発の情報の中で、運営者が気になる情報を見つけましたので、まとめておきます。
【日本語OCR開発関連の記事・コード】
日本語OCRを作ったので解説してみる(@tanreinama – 2020年4月11日に作成)| Qiita
日本語OCRの公開コード
– tanreinama/OCR_Japanease(MIT License)| GitHub
モデルのファインチューニングについて解説している書籍
PyTorchではじめるAI開発
著者:坂本 俊之(著)
出版社:シーアンドアール研究所
刊行予定日:2021年6月22日
PyTorchではじめるAI開発
Amazon.co.jpで詳しくみてみる:
PyTorchではじめるAI開発
楽天ブックスで詳しくみてみる:
PyTorchではじめるAI開発
文字検出の際に、行き詰まっている時に、日本語OCRの公開コードを参考にしようかとも思いましたが、その時点の自分の能力では、理解が及ばず・・・
結局は参考にできませんでしたが…
オープンソースの日本語OCRの公開コードを見つけてから、今か今かと待っていましたが、2021年6月に、いよいよ関連書籍が刊行されるようです。
著者の坂本 俊之さんの書籍では、Swiftプログラミングの書籍を購入して学ばせて頂いた経験があります。
PyTorchは、まだ苦手意識があるので刊行が楽しみです。
Qiitaの記事執筆から、約1年。
やはり、書籍化までには時間がかかるのですね…
【ステップ0】
日本語手書き文字用のOCRの仕組み等
:【日本語 – 手書き編】自作OCRプログラムの概略とOCRの難しさについて
:【日本語手書きOCR編】連続文字画像認識プログラミング入門(Python・OpenCV・Keras・CNN)| 一覧ページ
1件のコメント
現在コメントは受け付けていません。