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

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

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

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

4515閲覧

OCR 特定の色のみを文字認識する方法

nakazimakentoi

総合スコア3

Tesseract

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

3クリップ

投稿2020/12/21 07:17

編集2020/12/21 14:16

前提・実現したいこと

Tesseract OCRのtess-twoを使って特定の色のみを文字認識したい

Tesseract OCRのtess-twoで文字認識を行う時に青色の字と赤色の字だけを文字を認識して結果を出したいと考えています
例この画像を読み込んだら 開 と 閉だけが認識される
青色と赤色の文字を区別するのでなく青色と赤色の文字だけを文字認識したい
こういったプログラムを作りたいんですが特定の色の指定の仕方が分かりません

言語 Java

試したこと

BufferedImageで色の取得を試したが特定の色の文字を認識は行えなかった

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

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

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

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

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

thkana

2020/12/21 11:19

その二つの区別をすればいい、という話でなくて、OCRしなければいけないという話ですか? > 色の文字を認識は行えなかった BufferdImageにgetRGBとかではだめだったのですか?
nakazimakentoi

2020/12/21 14:13

その2つを文字認識したいんです
guest

回答1

0

ベストアンサー

いまひとつやりたいことが把握出来ていませんが、こういう画像を作ってOCRに喰わせればいいということですか?
青っぽいところ/赤っぽいところを抽出した画像
(圧縮の関係か真ん中の黒文字の周辺にノイズが出てますけれど、これは簡単に取れそうですね)

諸般の事情というか趣味の関係でProcessing上で処理してますが、なにをやっているかは読めると思います。

Processing

1import java.awt.image.BufferedImage; 2import javax.imageio.ImageIO; 3import java.net.URL; 4PImage img; 5BufferedImage bimg=null; 6 7//赤または青部分を抽出 8void extractRB(BufferedImage bimg){ 9 for(int y=0; y<bimg.getHeight();y++){ 10 for(int x=0; x<bimg.getWidth();x++){ 11 int pix=bimg.getRGB(x,y); 12 int r=(pix&0x00ff0000)>>16; 13 int b=(pix&0x000000ff); 14 int g=(pix&0x0000ff00)>>8; 15 if( r>0x80&&g<0x80&&b<0x80 || r<0x80&&g<0x80&&b>0x80){ 16 bimg.setRGB(x,y,0); 17 }else{ 18 bimg.setRGB(x,y,0xffffffff); 19 } 20 } 21 } 22} 23 24void setup() { 25 try { 26 //BufferedImageに画像を読み込み 27 bimg=ImageIO.read(new URL("https://teratail-v2.storage.googleapis.com/uploads/contributed_images/7459e5ce0eb31c011c5f89045e31f5fa.gif")); 28 img=new PImage(bimg.getWidth(), bimg.getHeight(), ARGB); 29 30 //赤または青部分を抽出 31 extractRB(bimg); 32 33 //BufferedImageをPImageにコピー 34 bimg.getRGB(0, 0, img.width, img.height, img.pixels, 0, img.width); 35 img.updatePixels(); 36 surface.setSize(img.width, img.height); 37 } 38 catch(Exception e) { 39 println( e ); 40 } 41} 42 43void draw(){ 44 //PImageを表示 45 image(img, 0, 0); 46}

投稿2020/12/21 23:13

thkana

総合スコア7639

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

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

nakazimakentoi

2020/12/22 01:31

ありがとうございます!コードの説明もつけていただいてわかりやすかったです
nakazimakentoi

2020/12/22 01:50

すいません、解決した後なのですが質問させてください int pix=bimg.getRGB(x,y); int r=(pix&0x00ff0000)>>16; int b=(pix&0x000000ff); int g=(pix&0x0000ff00)>>8; if( r>0x80&&g<0x80&&b<0x80 || r<0x80&&g<0x80&&b>0x80){ bimg.setRGB(x,y,0); }else{ bimg.setRGB(x,y,0xffffffff); このソースコードのどの部分で赤色と青色を判定しているのか知りたいです
thkana

2020/12/22 12:07

判定といえばif文というのが相場です。
nakazimakentoi

2020/12/22 12:18

if( r>0x80&&g<0x80&&b<0x80 || r<0x80&&g<0x80&&b>0x80){ の部分ですか? 赤と青のRGB値って808080で判定するのですか?
nakazimakentoi

2020/12/22 12:38

あれ?赤色のRGBは#FF0000で青は#0000FFですが違うのでしょうか? int r=(pix&0x00ff0000)>>16;の16って何を表すのでしょうか すいません質問ばかりで
thkana

2020/12/22 13:14 編集

「真っ青」「真っ赤」ならr,g,b=0,0,0xFFや0xFF,0,0でいいですけれど。 その「開」のなんとなく青い色は0x3D,0x6A,0xACで、「閉」の赤みたいな色は0xBC,0x2,0x2Cです。 あくまで例として示されただけのものですから、「例」をズバリの判断基準にするわけにもいかない。ので、とりあえず中間値である0x80=128に対して青だけが大きいとか赤だけが大きいという判断基準にしました。 > int r=(pix&0x00ff0000)>>16;の16って何を表すのでしょうか 16が何?と聞かれるということは>>は知っているということですか? >>はシフト演算子なので16ビット右シフトする、ということです。別に65536で割ってもよかったし、シフト/割り算をしないで0x00800000と比較しても動作としては構わないといえば構わないのですが、気持ちとして各色を0~255の範囲に収めたいと思ったもので。「赤成分が8388608より大きいか小さいか」、なんて話はちょっとイヤですよね。
nakazimakentoi

2020/12/22 23:20

本当にありがとうございました。助かりました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問