• python 调用Tesseract,dll模式,无需安装,绿色版


    系统环境:3.7.4-64+win10

    最近做批量登录,网站的验证码还是挺简单的,如果说接入打码平台,那不划算了

    验证码类似下图

    然后看了下ocr识别,比较方便的就是Tesseract,识别率还行

    接下去就是python调用,常规对接方式就是先安装teseract.exe,然后python调用接口

    1.cmd直接调用

    2.接入库调用,比如pyocr等

    这2中方式都不是很方便,第一种需要安装软件,第二种也要按照,而且把项目打包成exe也是个大问题,各种导入错误

    那么有没有其他方法呢,网上查阅后发现.net可以直接调用dll组件来识别,既然能调用dll,那么python自然也能调用

    网上搜寻一番,果然有人已经给出了解决方案,参考如下,里面给出了32位和64位的调用方法,不过没有给dll下载地址

     https://www.polarxiong.com/archives/python-pytesser-tesseract.html

    下载(32和64位都放进去了,按照自己需求使用)

    链接:https://pan.baidu.com/s/19mFffGpLgtHq1f2tGzQqXw
    提取码:kr70

    文件结构如下

     tessdata是训练数据,304是主dll,172是辅助,2个需要放在一起

    main.py(64位调用方法,32位不同,参照上面连接)

    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.
    ')
                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'test.png'
        result = ocr.get_text(image_file_path)
        print(result)
    

      

    做了一下简单的封装,这样就能简单调用了,打包成exe也不会有问题,无需按照,绿色软件

    注意:dll需要放到和主程序相同的目录,这里涉及到加载的问题,因为304dll加载需要172dll,如果在文件夹内,则会出现找不到dll

    当然这是我水平有限的原因,暂时没找到更好的方法,具体可以自己修改

  • 相关阅读:
    农夫安全第二季课程-3.vmware ESXIv2
    六、表达式:前缀&&后缀
    五、数据类型(1):整数&&带小数点的数
    四、变量和常量
    三、简单的输入输出
    二、第一个C程序:Hello World!
    一、环境的安装Dev-C++
    .Net基础之5——复杂数据类型
    .Net基础之4——流程控制
    .Net基础之3——运算符
  • 原文地址:https://www.cnblogs.com/darkspr/p/12602114.html
Copyright © 2020-2023  润新知