Tesseract OCR をWindowsにインストールする方法 | ガンマソフト株式会社
を参考にしてTesseract OCR をWindowsにインストールしてみました。
ここまでは普通にすすめます。次が重要。
Additional script data(download)の項目を展開します。
Additional script data(download)の項目を展開したら、Japanese vertical scriptとJapanese scriptにチェックをいれます。
つぎに、Additional language data(download)の項目を展開します。
Additional language data(download)の項目を展開したら、Javanese、Japanese、Japanese(vertical)にチェックをいれます。
あとは特筆することはありません。Nextを押し続けるとインストールが始まります。おわったらNextをクリックします。
最後にFinishをクリックして完了です。
では実際に使ってみましょう。
コマンドラインで、D:\test.pngに保存している画像からテキストファイル D:\test.txtに出力するのであれば
1 |
C:\>"C:\Program Files\Tesseract-OCR\tesseract.exe" D:\test.png D:\test -l jpn |
出力先のテキストファイルの拡張子は不要です。-l jpnは日本語でという意味です。
前回やった
とこれを使った場合では違いはあるでしょうか?
ややこちらのほうが精度がよいといえます。
つぎにC#で動かしてみましょう。
1 2 3 4 5 6 7 |
ProcessStartInfo pInfo = new ProcessStartInfo(); pInfo.FileName = 実行ファイルのパス; pInfo.Arguments = 引数; pInfo.UseShellExecute = true; pInfo.WindowStyle = ProcessWindowStyle.Hidden; Process p = Process.Start(pInfo); |
とやればC#から実行させることができます。引数は画像ファイルがある場所とテキストファイルの出力先です。半角スペースでつなげばいいのですが、パスのなかに半角スペースがある可能性もあるので
1 2 |
string arguments = String.Format("\"{0}\" \"{1}\" -l jpn", filePath, outputPath); pInfo.Arguments = arguments; |
とやっています。
1 |
Process p = Process.Start(pInfo); |
のあと、処理が終わるまで待つには
1 |
p.WaitForExit(); |
生成されたファイルを開いてテキストを読み出しています。
1 2 3 |
StreamReader sr = new StreamReader(outputPath + ".txt"); string str = sr.ReadToEnd(); sr.Close(); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
string GetText(string filePath) { string tempFolder = Application.StartupPath + "\\text"; // なければ作る if(! Directory.Exists(tempFolder)) Directory.CreateDirectory(tempFolder); string outputPath = tempFolder + "\\output"; ProcessStartInfo pInfo = new ProcessStartInfo(); pInfo.FileName = @"C:\Program Files\Tesseract-OCR\tesseract.exe"; string arguments = String.Format("\"{0}\" \"{1}\" -l jpn", filePath, outputPath); pInfo.Arguments = arguments; pInfo.UseShellExecute = true; pInfo.WindowStyle = ProcessWindowStyle.Hidden; Process p = Process.Start(pInfo); p.WaitForExit(); StreamReader sr = new StreamReader(outputPath + ".txt"); string str = sr.ReadToEnd(); sr.Close(); return str; } |
の方法で画像を効率よく取得してGetTextメソッドで渡していけば文字起こしの作業も少しは楽になるかもしれません。