记录解决登录时的随机验证码识别问题

import ctypes

class OCR():

    def __init__(self, DLL_PATH, TESSDATA_PREFIX, lang):
        self.DLL_PATH = DLL_PATH
        self.TESSDATA_PREFIX = TESSDATA_PREFIX
        self.lang = lang
        self.ready = False
        if self.do_init():
            self.ready = True


    def do_init(self):
        self.tesseract = ctypes.cdll.LoadLibrary(self.DLL_PATH)
        self.tesseract.TessBaseAPICreate.restype = ctypes.c_uint64
        self.api = self.tesseract.TessBaseAPICreate()
        rc = self.tesseract.TessBaseAPIInit3(ctypes.c_uint64(self.api), self.TESSDATA_PREFIX, self.lang)
        if rc:
            self.tesseract.TessBaseAPIDelete(ctypes.c_uint64(self.api))
            print('Could not initialize tesseract.\n')
            return False
        return True

    def get_text(self, path):
        if not self.ready:
            return False
        self.tesseract.TessBaseAPIProcessPages(
            ctypes.c_uint64(self.api), path, None, 0, None)
        self.tesseract.TessBaseAPIGetUTF8Text.restype = ctypes.c_uint64
        text_out = self.tesseract.TessBaseAPIGetUTF8Text(ctypes.c_uint64(self.api))
        return bytes.decode(ctypes.string_at(text_out)).strip()


if __name__ == '__main__':
    DLL_PATH = "./libtesseract304.dll"
    TESSDATA_PREFIX = b'./tessdata'
    lang = b'eng'
    ocr = OCR(DLL_PATH, TESSDATA_PREFIX, lang)
    image_file_path = b'test1.png'
    result = ocr.get_text(image_file_path)
    print(result)

二值化处理(可根据需要添加):

import cv2
import matplotlib.pyplot as plt
img = cv2.imread(r"C:\Users\Desktop\anzm\1.png")
img2 = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
img2 = cv2.inRange(img2, lowerb=180, upperb=256)
plt.subplot(121), plt.imshow(img)  # 原始图片
plt.subplot(122), plt.imshow(img2)  # 降噪图片
plt.show()

引用./tessdata数据文件夹+./libtesseract304.dll,"image_file_path",image识别

所需文件:tessdata+liblept172+libtesseract304.zip

训练所需工具jTessBoxEditorFX

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你好!关于Python验证识别,我可以给你一些建议和指导。 首先,验证识别是一个广泛应用的领域,也是一个挑战性的任务。在Python中,你可以利用一些库和工具来实现验证识别。 1. 使用图像处理库:Python中有很多图像处理库可供选择,如OpenCV、PIL(Pillow)等。你可以使用这些库来对验证码图像进行预处理,如灰度化、二值化、降噪等,以便更好地进行后续的识别。 2. 机器学习算法:对于一些简单的验证码,你可以尝试使用机器学习算法进行识别。常用的算法包括支持向量机(SVM)、随机森林(Random Forest)等。你需要先收集一些已知标签的验证码样本,然后使用这些样本进行模型的训练和测试。 3. 深度学习方法:对于复杂的验证码,尤其是存在干扰线、噪声等情况下,传统的机器学习算法可能效果不佳。这你可以考虑使用深度学习方法,如卷积神经网络(CNN)。你可以使用一些深度学习框架,如TensorFlow、Keras、PyTorch等,来实现验证码的训练和识别。 另外,你可能还需要考虑一些验证码的特殊情况,比如旋转、扭曲、遮挡等。对于这些情况,你可以尝试使用图像增强技术来改善识别效果。 总之,验证识别是一个复杂的任务,需要结合图像处理、机器学习和深度学习等技术进行处理。希望以上建议对你有所帮助!如有任何进一步的问题,请随提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值