質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Tesseract

Tesseractは、Googleが提供しているオープンソースのOCRエンジンです。機械学習があり60以上の言語に対応でき、日本語の文字認識も可能です。さらに精度を上げることもできます。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Q&A

0回答

3661閲覧

Tesseractを使って、暗いムラのある模様の上に白い文字があるような画像から文字を抽出したい。

firstlast

総合スコア138

Tesseract

Tesseractは、Googleが提供しているオープンソースのOCRエンジンです。機械学習があり60以上の言語に対応でき、日本語の文字認識も可能です。さらに精度を上げることもできます。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

0グッド

0クリップ

投稿2020/02/02 16:32

編集2020/02/02 22:56

前提・実現したいこと

掲題の通りです。
下に掲載しているソースコードでは、文字を抽出することが出来ませんでした。
文字の白い部分を抜き出すような画像処理を施しています。

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問