私はこの質問にしばらくの間答えを探していますが、役に立たないものは何も見つかりません。ブロックを作成して文字を分離する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枚の画像を提供してくれましたならば、それは、はるかに容易になるだろう記述。 – m3h0w
私はビデオリンクを提供しました – Streem
はい、それは動作するソフトウェアです。正確にどこに問題があるのかわかっていれば、あなたを助けてくれるはずです。例えば、閾値処理後の輪郭と輪郭の検出中の画像と同様である。ここで最大の敵は、スケールとパースペクティブシフトです。このビデオは、小さな角度のシフトに対してかなり堅牢なアルゴリズムを示しています。 – m3h0w