【问题标题】:How I could remove random generated lines and dots from this image? [Pre-OCR with Tesseract]如何从此图像中删除随机生成的线条和点? [使用 Tesseract 的预 OCR]
【发布时间】:2020-07-27 10:17:06
【问题描述】:

我正在尝试使用 C# 上的 Tesseract 通过 OCR 来解决验证码问题。我正在用 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");

无论如何要改进一点? Tesseract 还不能识别它。

【问题讨论】:

    标签: c# opencv tesseract


    【解决方案1】:

    我不知道如何在 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
    

    【讨论】:

    • 你是个畜生,我试着翻译一下,我会告诉你的。
    • 您好@us2018,代码有时可以使用一些验证码,但有些字母之间有线条无法提取文本。有什么办法可以稍微改善一下吗?在这里您可以尝试使用另一张图片:imgur.com/a/UUjFgOz 非常感谢!
    猜你喜欢
    • 2019-01-12
    • 2017-07-17
    • 1970-01-01
    • 2019-10-16
    • 1970-01-01
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多