• dddd带带弟弟OCR识别验证码


    在 github 上找到一个开源库,而且还很强大。这个库叫 ddddocr ,
    GitHub - sml2h3/ddddocr: 带带弟弟 通用验证码识别OCR pypi版

    ddddorc 安装使用

    安装 ddddocr

    pip install ddddocr -i https://pypi.douban.com/simple
    

    使用方法

    参数说明:

    Ddddocr 接受两个参数

    参数名默认值说明
    use_gpuFalseBool 是否使用gpu进行推理,如果该值为False则device_id不生效
    device_id0int cuda设备号,目前仅支持单张显卡

    classification 

    参数名默认值说明
    img0bytes 图片的bytes格式

    单个图片的识别:

    1. # -*- coding:utf-8 -*-
    2. import ddddocr # 导入 ddddocr
    3. ocr = ddddocr.DdddOcr() # 实例化
    4. with open('002.png', 'rb') as f: # 打开图片
    5. img_bytes = f.read() # 读取图片
    6. res = ocr.classification(img_bytes) # 识别
    7. print(res)

    多个图片识别:

    1. # -*- coding:utf-8 -*-
    2. import ddddocr # 导入 ddddocr
    3. ocr = ddddocr.DdddOcr()
    4. for i in range(1, 4):
    5. with open(str(i) + '.png', 'rb') as f:
    6. img_bytes = f.read()
    7. res = ocr.classification(img_bytes)
    8. print(res)

    有些大小写还是不能识别出来。

    封装一下:

    1. # -*- coding:utf-8 -*-
    2. import ddddocr
    3. ocr = ddddocr.DdddOcr()
    4. def ddocr(file):
    5. try:
    6. with open(file, 'rb') as f:
    7. img_bytes = f.read()
    8. res = ocr.classification(img_bytes)
    9. return res
    10. except:
    11. print("获取验证码失败,请继续!")
    12. r = ddocr('3.png')
    13. print(r)

    结合抠图一起使用,即获取验证码图片,然后用dddr 识别验证码。

    1. from selenium import webdriver
    2. import time
    3. from PIL import Image
    4. import ddddocr
    5. ocr = ddddocr.DdddOcr()
    6. # 抠图
    7. def matting():
    8. # 打开谷歌浏览器
    9. browser = webdriver.Chrome()
    10. # 打开网站首页
    11. # browser.get("https://v3pro.houjiemeishi.com/PC/pages/login/login.html")
    12. browser.get("http://192.168.139.129:8081/jpress/admin/login")
    13. # 网页最大化
    14. browser.maximize_window()
    15. # 登录页图片
    16. picture_name1 = 'login'+'.png'
    17. # 保存第一张截图
    18. browser.save_screenshot(picture_name1)
    19. # 定位元素
    20. ce = browser.find_element_by_id("captchaImg")
    21. # ce = browser.find_element_by_xpath('//*[@class="codeImg"]')
    22. # 打印元素位置、元素尺寸
    23. print(ce.location, ce.size)
    24. # 要抠验证码的图,先获取元素参数
    25. left = ce.location.get('x')
    26. top = ce.location.get('y')
    27. right = ce.size.get('width') + left
    28. height = ce.size.get('height') + top
    29. # 读取刚才截的第一张图
    30. im = Image.open(picture_name1)
    31. # 抠图
    32. img = im.crop((left, top, right, height))
    33. # 验证码块的图片
    34. picture_name2 = 'code'+'.png'
    35. # 保存图片
    36. img.save(picture_name2)
    37. time.sleep(5)
    38. browser.close()
    39. # 通过 ddddocr 模块识别验证码
    40. def ddocr(file):
    41. try:
    42. with open(file, 'rb') as f:
    43. img_bytes = f.read()
    44. res = ocr.classification(img_bytes)
    45. return res
    46. except:
    47. print("获取验证码失败,请继续!")
    48. if __name__ == '__main__':
    49. print("抠图")
    50. matting()
    51. print("识别")
    52. code = ddocr('code.png')
    53. print(code)

    常见错误处理

    运行过程中,有可能会遇到这个问题。

    ddddocr模块的项目使用pyinstaller 打包后报错 ImportError: Microsoft Visual C++ Redistributable for Visual Studio 2019 not installed on the machine.

    解决办法:
    安装Microsoft Visual C++ Redistributable 2019

    https://aka.ms/vs/16/release/VC_redist.x64.exe

    直接点击就可以下载了,下载后直接安装即可。

  • 相关阅读:
    WPS文件转PDF文件怎么转?建议看看这些方法
    SQL面试题今天你登录了吗?(扩展表连接)
    HackTheBox-Starting Point--Tier 2---Archetype
    行为型-中介者模式
    C++11模板元编程-std::enable_if示例详解
    网络协议层次模型
    一步一步分析ChatGPT,1 粘性,2 传染性, 3 双边网络效应
    [Android开发学iOS系列] 工具篇: Xcode使用和快捷键
    AI 辅助学习:Spring Boot 集成 PostgreSQL 并设置最大连接数
    函数指针数组
  • 原文地址:https://blog.csdn.net/weixin_41951954/article/details/126299854