Python通用验证码识别OCR库ddddocr的安装使用

该文介绍了如何在CentOS7上安装Python3.8及ddddocr库,包括解决Python的sslmodule问题,升级OpenSSL到1.1.1,以及使用yum安装ddddocr。文章还提供了代码示例来测试ddddocr的验证码识别效果。
摘要由CSDN通过智能技术生成


一、前言

之前写了一篇关于java使用tess4j进行图片文字识别.md的,对于应付简单的数字识别还是能应付,但总体效果、识别率很一般,后来同事找到了这一篇写的,(亲测好用便捷)Python通用验证码识别OCR库ddddocr的安装使用教程,试用了下确实效果要好很多,因此也记录一下,算是白嫖了这篇文章自己的一个使用总结,细化了里面的一些安装过程,具体如下说明。

ddddocr项目地址:https://github.com/sml2h3/ddddocr
安装环境: linux centos7.x

二、Python安装(Python版本必须>=3.8)

ddddocr的使用需要python3.8以上,默认centos系统里面一般自带了2.7版本,因此python3的安装就采用全新安装与python的2版本同时共存,之前也写了一篇如下:centos7安装python3简单步骤,可参与这篇进行安装,采用的是3.10.0的源码编绎方式。

#准备依赖
yum -y install gcc
yum -y install zlib-devel

#下载源码
wget https://www.python.org/ftp/python/3.10.0/Python-3.10.0.tgz

#解压安装
tar -xvf Python-3.10.0.tgz
cd Python-3.10.0
./configure --prefix=/usr/local/python3
make && make install

#软连接
ln -s /usr/local/python3/bin/python3 /usr/local/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/local/bin/pip3

#查看安装后的版本号
python3 -V

#测试hello world脚本准备
cat > hello.py << EOF
#!/usr/local/bin/python3

# -*- coding: utf8 -*-

print("hello world")

EOF

#执行查看测试效果
[testuser@localhost ~]$ /usr/local/bin/python3 hello.py 
hello worlds

三、安装ddddocr

安装前先要解决python3的ssl module的问题,直接执行以下命令安装将报错

pip3 install ddddocr

错误日志如下:
[testuser@localhost ~]$ pip3 install ddddocr Defaulting to user installation because normal site-packages is not writeable WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.

3.1 解决ssl module 的问题

详细步骤在centos7安装python3简单步骤这个文章里面也有,摘出来内容如下:

3.1.1升级OpenSSL到1.1.1

#下载源码
wget https://codeload.github.com/openssl/openssl/zip/OpenSSL_1_1_1-stable

#解压
unzip openssl-OpenSSL_1_1_1-stable.zip

#安装,指定安装路径为/usr/local/openssl
cd openssl-OpenSSL_1_1_1-stable/
./config --prefix=/usr/local/openssl
make && make install

# .config进如果提示需要安装You need Perl 5,执行以下命令解决
yum -y install perl
然后重新执行./config --prefix=/usr/local/openssl,和make && make install命令进行编绎安装openssl

#备份旧文件并加载新版本配置
mv /usr/bin/openssl /usr/bin/openssl.old
mv /usr/lib64/openssl /usr/lib64/openssl.old
mv /usr/lib64/libssl.so /usr/lib64/libssl.so.old
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl/include/openssl /usr/include/openssl
ln -s /usr/local/openssl/lib/libssl.so /usr/lib64/libssl.so
echo "/usr/local/openssl/lib" >> /etc/ld.so.conf
ldconfig -v 

#查看版本
openssl version

#安装成功后的版本日志如:
[root@localhost openssl-OpenSSL_1_1_1-stable]# openssl version
OpenSSL 1.1.1u-dev  xx XXX xxxx

3.1.2 重新编绎Python

升级OpenSSL到1.1.1后,重新编绎安装下python3

cd Python-3.10.0
./configure --prefix=/usr/local/python3 --with-openssl=/usr/local/openssl
make & make install

至此 ssl module的问题解决完毕。

3.2 yum安装ddddocr

解决了上面的ssl module问题后,直接使用pip3安装ddddocr就可以了,如下:

pip3 install ddddocr

或者指定国内镜像进行安装

pip3 install ddddocr -i https://pypi.tuna.tsinghua.edu.cn/simple/

安装好后提示一点点警告
WARNING: You are using pip version 21.2.3; however, version 23.0.1 is available.
You should consider upgrading via the ‘/usr/local/python3/bin/python3.10 -m pip install --upgrade pip’ command.
根据提示执行pip3的升级操作

/usr/local/python3/bin/python3.10 -m pip install --upgrade pip

升级后再查看pip版本

pip3 -V

至此ddddocr环境安装完毕,可以写图片识别代码进行测试了。

四、写代码测试ddddocr识别效果

准备代码如下,此代码的功能为执行python脚本,指定命令行参数位置1上的图片名称路径,通过ddddocr识别后,打印出识别的结果:

cat > DdddocrTest.py << EOF
#!/usr/local/bin/python3
# -*- coding: utf8 -*-

import ddddocr
import sys

class DdddocrTest(object):
    '''
    Ddddocr test : sys.argv[1] as the codeImg parameter
    Useage example: /usr/local/bin/python3 DdddocrTest.py codeImage.jpg
    '''
    def ocrTest(self):

        ocr = ddddocr.DdddOcr()
        with open(sys.argv[1], 'rb') as f:
            img_bytes = f.read()
        res = ocr.classification(img_bytes)
        print('识别出的验证码为:' + res)
        
if __name__ == '__main__':
    obj = DdddocrTest()
    obj.ocrTest()     
EOF

准备好三张图片

code.png
在这里插入图片描述
code1.png
在这里插入图片描述
code2.png
在这里插入图片描述
code3.png
在这里插入图片描述

测试代码执行结果

/usr/local/bin/python3 DdddocrTest.py code.png
/usr/local/bin/python3 DdddocrTest.py code1.png
/usr/local/bin/python3 DdddocrTest.py code2.png
/usr/local/bin/python3 DdddocrTest.py code3.png

在这里插入图片描述

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
验证码识别是一个比较复杂的问题,需要使用一些图像处理和机器学习的技术。以下是一个基本的验证码识别的流程: 1. 获取验证码图片 2. 对验证码图片进行预处理,包括二值化、降噪等操作 3. 对处理后的验证码图片进行分割,将每个字符分割为单独的图片 4. 使用机器学习算法训练模型,以识别每个字符 5. 使用模型对每个字符进行识别,并将结果合并成最终的验证码 在Python中,可以使用一些常用的图像处理来实现验证码识别,例如OpenCV、Pillow等。同时,也可以使用一些机器学习框架来训练模型,例如TensorFlow、Keras等。 以下是一个基本的验证码识别Python代码示例: ```python import cv2 import numpy as np from PIL import Image # 获取验证码图片 img = cv2.imread('captcha.png') # 对验证码图片进行预处理,包括二值化、降噪等操作 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY) kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3)) closed = cv2.morphologyEx(binary, cv2.MORPH_CLOSE, kernel) eroded = cv2.erode(closed, None, iterations=4) dilated = cv2.dilate(eroded, None, iterations=4) # 对处理后的验证码图片进行分割,将每个字符分割为单独的图片 contours, hierarchy = cv2.findContours(dilated, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) for i in range(len(contours)): x, y, w, h = cv2.boundingRect(contours[i]) char_img = img[y:y+h, x:x+w] cv2.imwrite('char_{}.png'.format(i), char_img) # 使用机器学习算法训练模型,以识别每个字符 # ... # 使用模型对每个字符进行识别,并将结果合并成最终的验证码 # ... ``` 需要注意的是,验证码识别是一个比较复杂的问题,以上代码只是一个基本的示例,实际应用中可能需要更加复杂的处理和模型训练。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值