柔晶美网络工作室

柔晶美网络工作室,倾心于web技术的博客站点

关注我 微信公众号

您现在的位置是: 首页 > 博客日记

python+tensorflow搭建通用证码识别系统教程(linux篇)

2021-06-20 admin linux  python  1350

linux我们选择了使用很普遍的centos7.9 64位系统,虚拟机的安装过程如下,重要的地方标注了:







如上图,终端连接上后,先安装wget:

yum install wget

安装过程中输入y,直到完成。

一、安装python3.7,先安装相应组件环境:

yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel kernel-devel libffi-devel

然后下载安装包python,3.x版本目前最新的是3.7.9

wget https://www.python.org/ftp/python/3.7.9/Python-3.7.9.tar.xz

解压:

tar -Jxvf Python-3.7.9.tar.xz

进入目录,编译安装新版:

cd Python-3.7.9
./configure prefix=/usr/local/python3

报错no acceptable C compiler found in PATH,需要安装C编译器:

yum -y install gcc

安装完后,再执行预安装:

./configure prefix=/usr/local/python3

如果有报错,少什么就安装什么,直到没有错误后,再正式编译安装:

make && make install

完成后,设置软链接:

ln -s /usr/local/python3/bin/python3 /usr/bin/python3

测试看看是否正常:


如上图所示,自带的版本是2.7.5,新版本是3.7.9,正常运行了。

pip也添加上新版本软链接;

ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

二、安装图文识别组件

这次,我们尝试手工逐个安装,创建ocr目录,上传muggle-ocr后本地安装:

mkdir ocr
cd ocr

用FTP工具上传压缩包到ocr目录:



在终端解压:

yum install -y unzip zip
unzip Lib.zip

将解压后的目录移动到 /usr/local/python3/lib/python3.7/目录下,并安装升级组件:

mv /root/Python-3.7.9/ocr/* /usr/local/python3/lib/python3.7/
/usr/local/python3/bin/python3.7 -m pip install --upgrade pip
pip3 install pyyaml

ocr.py文件上传到/root/Python-3.7.9/ocr/目录

import time
import base64
# 1. 导入包
import muggle_ocr

"""
使用预置模型,预置模型包含了[ModelType.OCR, ModelType.Captcha] 两种
其中 ModelType.OCR 用于识别普通印刷文本, ModelType.Captcha 用于识别4-6位简单英数验证码

"""
start = time.perf_counter()
# 打开验证码图片,将文件数据作为字符串返回
base64img = "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAAeAEADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+mRK6RhZH3sOrYxn8KwvF7yQ6VBPDNNFIt3AoMUrJkNIoIODyMHvWsmoW0moyWCmQ3EahnHlPtAPT5sbfwzWvsn7NTWu/wCFv8yeZXsWWdUxuYDJwMnqabufztuz5Nud+e/piuc+x22keL45BbQrBqCbVOwfu5V549Mj8zTmtRqmrT3VnPDbTxyCHzRGjSbFBDsu4HksQuT2Wso6uxtyLvodAoV5jIshOBsKhvlB+nrUlc5pVxctr+paTLcm7toY45RcBQjq7E5RigAJ4z0FV7m4bwpqMspcS2F3mRlY4McuOvA6Nj061c4ODsxTg4uzOol8zyz5W3f239KfWBo4MDS6hqamG9vGz84+VE/hQN0HHY4Oa1wyReetum+UMGZM4yT7moIMTxqksuhpFBFO8rXMLDyYWlKhXBJwAegGeabor3en6le6POt1KjsZ7e/a3bDbuSrtjG4fqMDjGK6Wormf7NbtLt3bccZx3xXSsRaj7JrTX79P8iHD3uYpaxpj6npfkJKEuY2WSKYjG2Reh/n+dR3yW+n6ZbWsljLd2pPlSBIjIyDa3zlQCTyMcf3s1pPMqTRxEHdJnGOnFLIsjLiNwhzyduTj29/z+lc8bJ3ZqpdHscnollNa+IJX0e2nt9H+z/NDco0KNKWyNikZGBnJxz09xoeI4mvNLMPkhJzJHy7AAqGBOHOB2PHB46Vry7LW0kZnlYfxNuy2Txken4cVLsIh2K53BcBzyc+vvVVJ87uOc+d3CKJIYxHGMKOgzSpGkSBI0VFHRVGAKqx2AgAMErxNjkL9xjxyV6Dp2xVmPzNv70JuBxlScEevt9OfrUEH/9k=="
image = base64.b64decode(base64img)

# 2. 初始化;model_type可选:[ModelType.OCR,ModelType.Captcha],ModelType.Captcha可识别4-6位验证码
sdk = muggle_ocr.SDK(model_type=muggle_ocr.ModelType.Captcha)
# 3. 调用预测函数
text = sdk.predict(image_bytes=image)
end = time.perf_counter()
print('识别结果:',text,'耗时 %s 秒'%(end-start))

然后测试脚本,看报错信息:

cd /root/Python-3.7.9/ocr/
python3 ocr.py


缺少什么组件,我们就安装什么:

pip3 install pillow
pip3 install tensorflow
pip3 install opencv-python
yum install mesa-libGLU

再运行测试


已正常识别了。

三、安装Django创建API调用服务

现在可以在命令行执行识别了,不过我们要实现的是,其它程序通过访问127.0.0.1?img=base64这种形式,将base64验证码图片发送过去,识别后再返回结果。

这个我们可以通过Django实现。执行命令安装:

pip3 install Django

在ocr目录下创建一个项目,取名为webocr:

cp /usr/local/python3/lib/python3.7/site-packages/django/bin/django-admin.py /root/Python-3.7.9/ocr/

python3 django-admin.py startproject webocr

这行代码将会在当前目录下创建一个 webocr 目录,我们进入目录,启动一下看看:

cd webocr
python3 manage.py runserver

但是我们的centos系统没有安装浏览器,为方便测试,我们用这个启动

python3 manage.py runserver 0.0.0.0:8000

然后在windows本机上的浏览器输入虚拟机ip测试:

http://192.168.135.129:8000/

如果能看到欢迎界面就正常了。

但我的提示错误,SQLite版本太低

SQLite 3.9.0 or later is required

看了下升级教程,又要下载编译配置,为了省麻烦,直接去掉数据库:

vi /root/Python-3.7.9/ocr/webocr/webocr/settings.py

将下图的删除


启动成功:


然后坑爹的是,我的本地电脑无法访问虚拟机8000端口,干脆简化测试,安装文本浏览器

 yum install lynx

复制一个终端,启动后输入网址:

 lynx 127.0.0.1:8000

显示访问正常:


同windows教程一样,将文件urls.py和views.py上传到/root/Python-3.7.9/ocr/webocr/webocr/目录,文件内容分别如下:

from django.contrib import admin
from django.urls import path
from . import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('ocr/', views.ocr),
]


from django.shortcuts import render,HttpResponse
from django.views.decorators.csrf import csrf_exempt
import time
import base64
# 1. 导入ocr识别包
import muggle_ocr

"""
使用预置模型,预置模型包含了[ModelType.OCR, ModelType.Captcha] 两种
其中 ModelType.OCR 用于识别普通印刷文本, ModelType.Captcha 用于识别4-6位简单英数验证码
"""

@csrf_exempt
def ocr(request):
    img = request.POST.get("img")
    if img != "":
        #图片base64经过post传输后+会变成空格,这里要替换回来
        img = img.replace(" ", "+")
        image = base64.b64decode(img)
        # 2. 初始化;model_type可选:[ModelType.OCR,ModelType.Captcha],ModelType.Captcha可识别4-6位验证码
        sdk = muggle_ocr.SDK(model_type=muggle_ocr.ModelType.Captcha)
        # 3. 调用预测函数
        text = sdk.predict(image_bytes=image)
        return HttpResponse(text)
    else:
        return HttpResponse("图片为空")

然后和windows一样测试即可:点击查看。

这里补充一下,刚才无法访问是没关闭防火墙,执行命令关闭即可:

systemctl stop firewalld.service 

然后我们可以用80端口启动的,这样就不用输入端口号了:

 python3 manage.py runserver 0.0.0.0:80

直接输入http://192.168.135.129/访问即可。测试时发现报错:

You may need to add '192.168.135.129' to ALLOWED_HOSTS.

需要修改创建项目时生成的setting.py文件,将ALLOWED_HOSTS = []改为ALLOWED_HOSTS = ['*']

vi /root/Python-3.7.9/ocr/webocr/webocr/settings.py


windows系统安装的,如果是远程调用也一样要设置。以后按下面命令依次执行即可启动:

systemctl stop firewalld.service

cd /root/Python-3.7.9/ocr/webocr/

python3 manage.py runserver 0.0.0.0:80



测试效果还可以,本教程记录完毕。

文章评论


需要 登录 才能发表评论
热门评论
0条评论

暂时没有评论!