muggle_ocr验证码识别在docker中安装使用
宝塔面板安装好docker后,选择镜像debian12创建一个容器,进入容器目录,新建ocr目录并将文件解压到ocr目录下。
项目结构:
── ocr/
├── db.sqlite3
├── manage.py
└── webocr/
├── asgi.py
├── settings.py
├── urls.py
├── views.py
├── wsgi.py
└── __init__.py
进入容器终端,安装Python-3.7.17,选择编译安装。
django==3.2.*
gunicorn==20.1.*
pillow==9.5.*
安装**muggle-ocr**相关环境:
python3.7 -m pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
更新pip:
python3.7 -m pip install --upgrade pip \
-i https://pypi.tuna.tsinghua.edu.cn/simple \
--trusted-host pypi.tuna.tsinghua.edu.cn
安装 setuptools
python3.7 -m pip install --no-cache-dir --upgrade setuptools \
-i https://pypi.tuna.tsinghua.edu.cn/simple \
--trusted-host pypi.tuna.tsinghua.edu.cn
安装所需库,并进入ocr目录测试识别:
# 1. 更新包列表
apt-get update
# 2. 安装核心依赖
apt-get install -y \
libglib2.0-0 \
libsm6 \
libxrender1 \
libxext6 \
libgl1-mesa-glx
# 3. 安装可选但推荐的依赖
apt-get install -y \
libgtk2.0-0 \
libavcodec-dev \
libavformat-dev \
libswscale-dev
# 4. 更新库缓存
ldconfig
# 5. 运行程序识别
python3.7 ocr.py
启动API,注意端口为5000:
python3.7 manage.py runserver 0.0.0.0:5000
view.py代码优化,只加载一次库,加快速度:
from django.shortcuts import render, HttpResponse
from django.views.decorators.csrf import csrf_exempt
import time
import base64
import logging
# 导入ocr识别包
import muggle_ocr
# 配置日志
logger = logging.getLogger(__name__)
# 初始化OCR SDK(全局只加载一次)
# 添加计时器
logger.debug("开始加载OCR模型...")
start_load = time.time()
sdk = muggle_ocr.SDK(model_type=muggle_ocr.ModelType.Captcha)
load_time = time.time() - start_load
logger.debug(f"✅ OCR模型加载完成,耗时: {load_time:.2f}秒")
@csrf_exempt
def ocr(request):
# 记录请求开始时间
start_time = time.time()
if request.method != "POST":
logger.warning("⚠️ 非POST请求")
return HttpResponse("仅支持POST请求", status=400)
img = request.POST.get("img", "")
logger.debug(f"收到请求,图片长度: {len(img)} 字符")
if not img:
logger.warning("❌ 图片为空")
return HttpResponse("图片为空", status=400)
try:
# 修复base64编码
img = img.replace(" ", "+")
# 解码计时
decode_start = time.time()
image = base64.b64decode(img)
decode_time = time.time() - decode_start
logger.debug(f"🖼️ Base64解码完成,耗时: {decode_time:.4f}秒")
# OCR识别计时
ocr_start = time.time()
text = sdk.predict(image_bytes=image)
ocr_time = time.time() - ocr_start
logger.debug(f"🔍 OCR识别完成,耗时: {ocr_time:.4f}秒")
logger.info(f"识别结果: {text}")
# 总耗时
total_time = time.time() - start_time
logger.info(f"✅ 请求处理完成,总耗时: {total_time:.4f}秒")
return HttpResponse(text)
except Exception as e:
logger.exception("🔥 处理异常")
return HttpResponse(f"服务器错误: {str(e)}", status=500)
这个就可以使用了。为了方便以后使用,打包好了镜像
保存镜像为文件:
docker save -o kzh-python37-ocr-1.0.tar kzh-python37-ocr:1.0
# 加载镜像(如果之前保存过)
docker load -i kzh-python37-ocr-1.0.tar
# 复制项目文件到数据卷
docker cp ./project ocr-app:/app
docker cp requirements.txt ocr-app:/app/
# 重启容器使配置生效
docker restart ocr-app
温馨提示
知识产权声明:本软件已获国家版权局软件著作权登记(登记号:2022SR0558725),受《计算机软件保护条例》保护。未经书面授权,严禁对本软件进行反向工程、反编译、破解或任何形式的篡改。侵权必究。
官方指引:本文档为官方安装部署说明,仅适用于当前发布版本,后续版本请以最新官方文档为准。
环境要求:安装前请确认操作系统版本、运行环境(如 .NET、Java 等)及硬件配置满足软件运行要求,避免因环境不兼容导致异常。
操作风险与免责:安装配置涉及防火墙、注册表或环境变量等系统级变更,建议由具备相关经验的技术人员操作。因用户未严格遵循本官方指引或操作不当导致的任何数据丢失、系统异常或其他损失,我方不承担相关责任。如遇问题,请及时联系技术支持。
反馈渠道:如有未覆盖的问题,欢迎通过客服反馈,我们将持续更新与改进。
版本记录:最后更新于 2026-08-07