2017-02-28 16 views
1

私はこの質問にしばらくの間答えを探していますが、役に立たないものは何も見つかりません。ブロックを作成して文字を分離するOpenCV

私は機械で読み取り可能なゾーンをカメラで読み取ろうとしています。機械可読領域から文字を1つずつ抽出し、OCRにフィードする必要があります。私は閾値画像に、輪郭を見つけるために文字を一つずつ抽出しようとしましたが、ライブカメラ上では輪郭がいくつかの文字を見逃してしまい、期待通りの結果が得られませんでした。

機械可読ゾーンは既知のサイズ、フォームですが、文字ごとにブロックを作成して抽出する適切な方法はありますか?

更新コード

rect = [] 
blur = cv2.medianBlur(roi_gray,3) #roi_gray is aligned horizontally MRZ zone 
thresh = cv2.adaptiveThreshold(blur,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY,11,2) 
_,contours, hierarchy = cv2.findContours(thresh.copy(),cv2.RETR_CCOMP,cv2.CHAIN_APPROX_SIMPLE) 
contours = sorted(contours, key=cv2.contourArea, reverse = True)[:90] 
minH = 20 
minW = 20 
for ctr in contours: 
    if cv2.contourArea(ctr) < 1000: 
     xyc,wh,a = cv2.minAreaRect(ctr) 
     w,h = wh 
     x,y = xyc 
     if h >= minH or w >= minW: 
      rect.append(cv2.boundingRect(cv2.approxPolyDP(ctr,3,True))) 

RECTは、収集した輪郭を含むされているが、問題は、しきい値後の例として、文字Nは、2つの輪郭に分割され、または文字が最終的に出力に欠けているように、それはfindContoursで見つからなかったということです。

ビデオ

私は著者が各文字のブロックを構築するが、残念ながら、著者は、メソッドまたはコードに関する追加情報を提供していないようですが、ビデオを発見しました。 Video link

+1

私たちはあなたを助けるためにのためにあなたがしているような状況の少なくとも1枚の画像を提供してくれましたならば、それは、はるかに容易になるだろう記述。 – m3h0w

+0

私はビデオリンクを提供しました – Streem

+0

はい、それは動作するソフトウェアです。正確にどこに問題があるのか​​わかっていれば、あなたを助けてくれるはずです。例えば、閾値処理後の輪郭と輪郭の検出中の画像と同様である。ここで最大の敵は、スケールとパースペクティブシフトです。このビデオは、小さな角度のシフトに対してかなり堅牢なアルゴリズムを示しています。 – m3h0w

答えて

1

興味のあるIDテキスト領域にはアスペクト比がありますが、ブロックはそのテキスト領域を意味します。アスペクト比( - +エラー)を持つと、他のテキスト領域を削除する可能性があります。 OpenCV 3にはdetector for textがあります。 さらに、検出された領域が追跡されていると思われます。少なくとも、ビデオではそうであるようです。

IMHOは、ぼかしをしてから2進化し、次にテキスト行を検出するために虫歯を広げます。したがって、折り返し補正(または多少のパースペクティブ補正)を行った後、垂直投影で文字幅を検出できるので、各文字を検出してOCRに供給することができます。


コメントによると、文字領域の情報を追加します。私は、文字の中の空白を埋めるために、または輪郭をリンクするためのオープニング操作を行います。次に、ピクセル値を単純に垂直方向に合計すると、垂直投影が得られます。今あなたは文字の間にいくつかの最小値を持っています。これらの最小値を使用すると、それらの間の距離を平均化することで文字幅を取得できます。

あなたができることは、各フレームでこの幅を処理するのではなく、連続するフレームに対してあまり変化しない幅を得ることです。これは、キューを使用して最後の5フレームの平均幅を超えて行うことで実現できます。

これを試してみてください。いくつかの結果が返ってきます。このように、私たちはあなたにもっと役立つでしょう。

があり、おそらくより多くの情報を見つけることができます、あまりにも、OpenCV forumあり

+1

私はすでに注目のテキストを抽出しているので、遠近法の補正を行い、3行のテキストを取得しています。垂直投影の詳細について説明できますか? findContoursの主な問題は、2つの輪郭のような文字Nを検出する前に、文字や構造が欠落しているためです。 – Streem

関連する問題