1.VisualStudioでコンソールアプリケーション(.Net Core)を作成する
2.Nugetで「Tesseract」を検索して、インストールする
3.プロジェクトを右クリックして、「新しいフォルダ」を作成し、「tessdata」と名前を付ける
4.tessdataに学習済みデータをダウンロードする
学習済みデータ(jpn.traineddataは横書き、jpn_vert.traineddataは縦書き)
https://github.com/tesseract-ocr/tessdata_best
もしくは、https://packages.ubuntu.com/focal/tesseract-ocr-jpnから
「[tesseract-lang_4.00~git30-7274cfa.orig.tar.xz]」をダウンロードして
解凍した中に含まれている「jpn.traineddata、jpn_vert.traineddata」を
コピーする。
こちらのほうが精度が高いが解凍ソフトを別途インストールする必要あり。
解凍ソフト:7-Zip File Manager
ダウンロード後のフォルダ
ファイルがコピーされない。
5.関数を追加します。
private static void DoOcr(string ImagePath)
{
//using (var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default))
using (var engine = new TesseractEngine("tessdata", "jpn", EngineMode.Default))
{
using (var img = Pix.LoadFromFile(ImagePath))
{
using (var page = engine.Process(img))
{
// 文末の改行を除く
var text = page.GetText().Replace(" ", "").TrimEnd('\r', '\n');
Console.WriteLine(string.Format("精度: {0}", page.GetMeanConfidence()));
Console.WriteLine(string.Format("読取結果: \r\n{0}", text));
}
}
}
}
6.Main関数を修正します。
static void Main(string[] args)
{
Console.WriteLine("読取を開始します");
Console.WriteLine("");
DoOcr("OcrSample_Jpn.png");
Console.WriteLine("");
Console.WriteLine("読取を終了します");
Console.WriteLine("複数行の読取を開始します");
Console.WriteLine("");
DoOcr("OcrSample_Jpn_Multiline.png");
Console.WriteLine("");
Console.WriteLine("複数行の読取を終了します");
Console.ReadKey(true);
}
7.結果の確認をします。
・読み込ませる画像(OcrSample_Jpn.png)
・結果
・読み込ませる画像(OcrSample_Jpn_Multiline.png)
・結果
8.まとめ
フリーのOSSでここまでの精度で読めるのであれば印字文字については十分なんじゃなかろうか。学習済みデータを自分で再学習することができればさらに精度を上げられそう。できれば手書き数字と手書きアルファベットまではやってみたいな・・・。ネットで探すと元データは結構あるみたいだし。まぁ手間を考えると必要に迫られたら市販ソフトを購入したほうがいいだろうけども。
0 件のコメント:
コメントを投稿