柔晶美网络工作室

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

关注我 微信公众号

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

宝塔面板使用Python管理器制作验证码识别服务器

2020-08-06 admin python  2046

python是目前最火热的编程语言了,特别是在人工智能方面,比如OCR,非常强大。

最近因需要用于验证码识别,先试用次世代验证码识别系统,发现字符粘连的无法识别,整体识别成功率不到10%,效果不满意。

最后还是考虑使用Python,毕竟CNN(卷积神经网络)识别图形验证码是非常专业的。百度找了几天资料,发现都是偏理论的,实用性不足,基本上无法用于实战,且很多都无法跑起来。最后找到了这个:muggle-ocr 1.0.3,只需要几行代码,就能使用自带的识别库,识别大部分的验证码了。安装极其简单:

pip install muggle-ocr

使用方法也非常简单:

import time# 1. 导入包import muggle_ocr"""使用预置模型,预置模型包含了[ModelType.OCR, ModelType.Captcha] 两种其中 ModelType.OCR 用于识别普通印刷文本, ModelType.Captcha 用于识别4-6位简单英数验证码"""# 打开印刷文本图片with open(r"test1.png", "rb") as f:
    ocr_bytes = f.read()# 打开验证码图片with open(r"test2.jpg", "rb") as f:
    captcha_bytes = f.read()# 2. 初始化;model_type 可选: [ModelType.OCR, ModelType.Captcha]sdk = muggle_ocr.SDK(model_type=muggle_ocr.ModelType.OCR)# ModelType.Captcha 可识别光学印刷文本for i in range(5):
    st = time.time()
    # 3. 调用预测函数
    text = sdk.predict(image_bytes=ocr_bytes)
    print(text, time.time() - st)# ModelType.Captcha 可识别4-6位验证码sdk = muggle_ocr.SDK(model_type=muggle_ocr.ModelType.Captcha)for i in range(5):
    st = time.time()
    # 3. 调用预测函数
    text = sdk.predict(image_bytes=captcha_bytes)
    print(text, time.time() - st)"""使用自定义模型支持基于 https://github.com/kerlomz/captcha_trainer 框架训练的模型训练完成后,进入导出编译模型的[out]路径下, 把[graph]路径下的pb模型和[model]下的yaml配置文件放到同一路径下。将 conf_path 参数指定为 yaml配置文件 的绝对或项目相对路径即可,其他步骤一致,如下示例:"""with open(r"test3.jpg", "rb") as f:
    b = f.read()sdk = muggle_ocr.SDK(conf_path="./ocr.yaml")text = sdk.predict(image_bytes=b)

不过,在本机上直接安装时,由于宝塔面板默认的Python版本太低,无法安装。最后使用了Python项目管理器(面板可选择安装),使用虚拟环境安装成功了。方法如下:

首先,添加一个项目,设置如下:

这是设置好的配置文件:

[uwsgi]
master = true
processes = 1
threads = 2
chdir = /www/wwwroot/ocr.dzbfsj.com
wsgi-file= /www/wwwroot/ocr.dzbfsj.com/
http = 0.0.0.0:8000
logto = /www/wwwroot/ocr.dzbfsj.com/logs/error.log
chmod-socket = 660
vacuum = true
master = true
max-requests = 1000
wsgi-file = /www/wwwroot/ocr.dzbfsj.com/ocr/ocr/wsgi.py

进入虚拟环境安装

cd /www/wwwroot/ocr.dzbfsj.com
source ./webocr_venv/bin/activate
pip install pybase64
pip install muggle-ocr

安装过程比较久,因为需要安装的组件比较多。

安装完后,因需要使用Django框架做WEB服务,需要检查sqlite3版本:sqlite3 -version,如果版本太低,需要到官网下载最新版编译安装。百度教程很多,注意路径就可以了。

sqlite-snapshot-202007301737.tar.gz

cd /www/server/sqlite
wget xxxxxx网址
tar zxvf sqlite-snapshot-202007301737.tar.gz
cd sqlite-snapshot-202007301737
./configure --prefix=/usr/local/sqlite
make && makeinstall
mv /usr/bin/sqlite3  /usr/bin/sqlite3_old
ln -s /usr/local/sqlite/bin/sqlite3   /usr/bin/sqlite3
source ~/.bashrc
sqlite3 -version

如果正确,最后会显示最新的版本号。因时间有限,这是关键代码,完整代码我再打包上传:

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):
    if request.method == "POST":
        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("图片为空")

启动顺序,先在宝塔Python停止当前项目,再进入命令行:

cd /www/wwwroot/ocr.dzbfsj.com
source ./webocr_venv/bin/activate
cd ocr
python manage.py runserver > nohup.log 2>&1 &

完整代码很大,将近500MB,上传到百度网盘了。

如何训练识别库呢,点击查看网址

先下载python3.7.0 amd64版本:python-3.7.0rc1-amd64.rar

然后,下载编译版的源码:captcha_trainer-1.0.rar

解压到D盘,cmd进入目录,安装依赖:

pip install -r requirements.txt




文章评论


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

暂时没有评论!