Как я могу удалить случайные сгенерированные линии и точки из этого изображения? [Предварительное распознавание текста с Tesseract] - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь решить капчи с помощью OCR их с Tesseract на C#. Я перехватываю капчу с помощью Selenium и применяю некоторые эффекты для очистки изображения, и в итоге получаю недостаточно чистый текст, чтобы правильно его прочитать.

Я спрашиваю здесь, может ли кто-нибудь помочь мне написать код OpenCV, который может удалить линии и точки, поскольку они имеют разную ширину. Спасибо!

Изображение: https://i.imgur.com/Md5XC6G.png

Изображение после изменений OpenCv: https://i.imgur.com/pxcxPfQ.png

var image = Resize(img, 800, 600);
            image.Save("captcha.png", System.Drawing.Imaging.ImageFormat.Png);
            Mat imageIn = Cv2.ImRead("captcha.png", ImreadModes.Grayscale);
            Mat edges = new Mat();

            Cv2.Canny(imageIn, edges, 100, 100);

            edges.SaveImage("captcha1.png");

В любом случае, чтобы улучшить его немного больше? Тессеракт пока не распознает его.

1 Ответ

1 голос
/ 15 апреля 2020

Я не знаю, как это сделать в C#, но в python этот код работает

import cv2
import numpy as np
import pytesseract

img = cv2.imread("Md5XC6G.png", cv2.IMREAD_GRAYSCALE)
cv2.imshow("original", img)

img = cv2.bitwise_not(img)

kernel = np.ones((14, 14), np.uint8)
close = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
newkernel = np.ones((5, 5), np.uint8)
inv = cv2.erode(close, newkernel, iterations=1)

inv = cv2.bitwise_not(inv)

cv2.imshow("inverted", inv)
cv2.imwrite("inverted.jpg", inv)

custom_config = r'-l eng --oem 3 --psm 7 -c tessedit_char_whitelist="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"'
text = pytesseract.image_to_string(inv, config=custom_config)
print("Detected captcha is:", text)

cv2.waitKey(0)
cv2.destroyAllWindows()

Результат при запуске

Detected captcha is: wjr4s2
...