これらの画像があります
背景のテキストを削除したい。のみ captcha characters
を残す必要があります(K6PwKA、YabVzuなど)。タスクは、後でtesseractを使用してこれらの文字を識別することです。
これは私が試したものですが、それほど正確ではありません。
import cv2
import pytesseract
pytesseract.pytesseract.tesseract_cmd = r"C:\Users\HPO2KOR\AppData\Local\Tesseract-OCR\tesseract.exe"
img = cv2.imread("untitled.png")
gray_image = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray_filtered = cv2.inRange(gray_image, 0, 75)
cv2.imwrite("cleaned.png", gray_filtered)
どうすれば同じように改善できますか?
注:私はこの質問に対して得ている提案をすべて試しましたが、どれも私のために機能しませんでした。
EDIT:エリアスによれば、フォトショップを使用してキャプチャテキストの色をグレースケールに変換して、その中間にある色を見つけようとしました[100 、105]。次に、この範囲に基づいて画像にしきい値を設定します。しかし、私が得た結果は、tesseractから満足のいく結果を与えませんでした。
gray_filtered = cv2.inRange(gray_image, 100, 105)
cv2.imwrite("cleaned.png", gray_filtered)
gray_inv = ~gray_filtered
cv2.imwrite("cleaned.png", gray_inv)
data = pytesseract.image_to_string(gray_inv, lang='eng')
出力:
'KEP wKA'
結果:
EDIT 2:
def get_text(img_name):
lower = (100, 100, 100)
upper = (104, 104, 104)
img = cv2.imread(img_name)
img_rgb_inrange = cv2.inRange(img, lower, upper)
neg_rgb_image = ~img_rgb_inrange
cv2.imwrite('neg_img_rgb_inrange.png', neg_rgb_image)
data = pytesseract.image_to_string(neg_rgb_image, lang='eng')
return data
与える:
そしてテキストとして
GXuMuUZ
少し柔らかくする方法はありますか
試しませんでしたが、これでうまくいくかもしれません。ステップ1:psを使用して、キャプチャ文字の色を確認します。たとえば、「YabVzu」は(128,128,128)、
ステップ2:pillowのメソッドgetdata()/ getcolor()を使用すると、すべてのピクセルの色を含むシーケンスが返されます。
次に、シーケンス内のすべてのアイテムを元のキャプチャ画像に投影します。
したがって、画像内のすべてのピクセルの位置がわかります。
手順3:色が(128,128,128)に最も近い値を持つすべてのピクセルを見つけます。しきい値を設定して精度を制御できます。このステップは別のシーケンスを返します。 Seq aとして注釈を付けましょう
手順4:高さと幅が元の画像とまったく同じ画像を生成します。 [Seq a]のすべてのピクセルを画像の非常にexcatの位置にプロットします。ここでは、クリーンなトレーニングアイテムを取得します
ステップ5:Keras project を使用してコードを中断します。また、精度は72%を超える必要があります。