前提・実現したいこと
掲題の通りです。
下に掲載しているソースコードでは、文字を抽出することが出来ませんでした。
文字の白い部分を抜き出すような画像処理を施しています。
Tesseractのバージョンは
Tesseract 4.1.0-beta1
です。nugetから取得したものを使用しました。C#用のライブラリです。
また、画像処理には、OpenCvSharpを、これもnugetから取得したものを使用しています。
Tesseract, OpenCvSharpの使用は必須ではありませんが、これらを使用してプログラムを作成しているので、できればこれに沿った方法が希望です。
学習データについては、
https://www.nuget.org/packages/Tesseract/4.1
からTesseract4.0の本体と一緒にダウンロードインストールしたものを使用しました。英語の学習データだけです。
[tessdata]
├─eng.traineddata
├─eng.user-patterns
└─eng.user-words
実行ファイルと同じフォルダにこの学習データが格納されたフォルダを配置しています。
ソースコードを下に掲載します。
Windows Formです。
よろしくお願い致します。
該当のソースコード
C#
1using OpenCvSharp; 2using OpenCvSharp.Extensions; 3using System; 4using System.IO; 5using System.Reflection; 6using System.Windows.Forms; 7using Tesseract; 8using Size = OpenCvSharp.Size; 9 10namespace TesseractSample { 11 public partial class Form1 : Form { 12 public Form1() { 13 InitializeComponent(); 14 } 15 16 private void button1_Click(object sender, EventArgs e) { 17 18 Assembly assm = Assembly.GetExecutingAssembly(); 19 string executing_directory_name = Path.GetDirectoryName(assm.Location); 20 string tessdataPath = Path.Combine(executing_directory_name, "tessdata"); 21 22 using (Mat mat2 = new Mat(@"D:\Work\temp.bmp")) { 23 24 using (var mat_hsv = mat2.CvtColor(ColorConversionCodes.BGR2HSV_FULL)) { 25 26 mat_hsv.ImWrite(@"D:\Work\mat_hsv.bmp"); 27 InputArray lower_white = InputArray.Create(new int[3] { 0, 0, 100 }); 28 InputArray upper_white = InputArray.Create(new int[3] { 180, 45, 255 }); 29 30 using (Mat mat_mask_white = mat_hsv.InRange(lower_white, upper_white)) { 31 32 mat_mask_white.ImWrite(@"D:\Work\mat_mask_white.bmp"); 33 34 using (Mat mat_reversed = Reverse(mat_mask_white)) { 35 36 mat_reversed.ImWrite(@"D:\Work\mat_reversed.bmp"); 37 38 using (Mat mat_resized = new Mat()) { 39 40 Cv2.Resize(mat_reversed, mat_resized, new Size(mat_reversed.Width * 3, mat_reversed.Height * 3)); 41 mat_resized.ImWrite(@"D:\Work\mat_resized.bmp"); 42 43 using (var tesseract = new TesseractEngine(tessdataPath, "eng", EngineMode.LstmOnly)) { 44 tesseract.SetVariable("tessedit_char_whitelist", "1234567890"); 45 var page = tesseract.Process(mat_reversed.ToBitmap()); 46 string text = page.GetText(); 47 MessageBox.Show(text: $"--->{text}<---"); 48 49 } 50 51 52 } 53 54 } 55 } 56 } 57 } 58 59 60 } 61 62 public static Mat Reverse(Mat src) { 63 64 Mat mat = src.Clone(); 65 66 for (var y = 0; y < mat.Height; y++) { 67 for (var x = 0; x < mat.Width; x++) { 68 var px = mat.Get<Vec3b>(y, x); 69 px[0] = (byte)(255 - px[0]); 70 px[1] = (byte)(255 - px[1]); 71 px[2] = (byte)(255 - px[2]); 72 mat.Set(y, x, px); 73 } 74 } 75 76 Cv2.ImShow("image", src); 77 Cv2.WaitKey(); 78 79 return mat; 80 81 } 82 83 } 84} 85
環境
Microsoft Windows 10 Pro (Version 1903)
Microsoft Visual Studio Community 2019
Microsoft .NET Framework 4.7.2
Windows アプリケーション
OpenCvSharp4.Windows 4.2.0.20200108
Tesseract 4.1.0-beta1
あなたの回答
tips
プレビュー