RapidOCR Docker 部署避坑指南:9003 端口上稳定跑通 OCR 服务的完整路径
【免费下载链接】RapidOCR📄 Awesome OCR multiple programing languages toolkits based on ONNX Runtime, OpenVINO, MNN, PaddlePaddle, TensorRT and PyTorch.项目地址: https://gitcode.com/GitHub_Trending/ra/RapidOCR
容器刚起就报缺依赖,跑十分钟内存还在往上爬——RapidOCR(支持 ONNX Runtime、PaddlePaddle 等多种推理后端的开源 OCR 引擎)以 API 服务的形式做 Docker 部署,坑基本集中在这几个场景,这份记录帮你全部绕开。
先让它跑起来
先把下面内容存为Dockerfile:
FROM python:3.10-slim RUN pip install --no-cache-dir rapidocr_api -i https://mirrors.aliyun.com/pypi/simple/ && \ pip uninstall -y opencv-python && \ pip install --no-cache-dir opencv-python-headless -i https://mirrors.aliyun.com/pypi/simple/ EXPOSE 9003 CMD ["rapidocr_api"]然后构建并启动:
docker build -t rapidocr . docker run -d --name rapidocr --restart always \ --cpus=".9" --memory=4g --memory-swap=4g \ -p 9003:9003 rapidocr服务默认监听 9003 端口,-p 9003:9003把宿主机的 9003 映射进来后,就可以直接发识别请求了。
三类报错,一次修完
版本如果不是最新,大概率会撞上这三个错。先别急,对着下表就能逐个击破 🔧
| 你看到了什么 | 一句话根因 | 修复 |
|---|---|---|
启动即报python-multipart缺失 | 旧版本依赖声明漏了这个包 | 升级到 0.0.9+;急用时pip install python-multipart顶上 |
Error loading ASGI app. Could not import module 'api' | uvicorn 里api:app这种路径写法找不到模块 | 改为rapidocr_api.api:app,0.0.9+ 已内置修复 |
| 内存持续增长、单核 CPU 飙高,但在安装目录里又一切正常 | 非安装目录启动时 uvicorn 的 reload 行为异常,属于内存泄漏排查里最隐蔽的一类 | 固定在安装目录启动,或升级到 0.1.1+(已优化启动方式) |
前两个问题在 0.0.9 解决,内存问题拖到 0.1.1 才根治。API 服务的完整说明见 api/README.md。
上生产前加固
上面启动命令里的资源参数建议原样保留:--cpus=".9"留出一成 CPU 余量,--memory=4g配合等值的--memory-swap=4g把内存封死(触发时容器被 OOM 杀掉,而不是拖垮宿主机),--restart always负责崩溃自愈。
一条命令换成 headless 版 OpenCV
默认装的opencv-python依赖系统的 GUI 图形库,slim 基础镜像里没有,一调用图像就报错。一条命令替换成 headless 版(无图形界面依赖):
pip uninstall -y opencv-python && pip install opencv-python-headless上面的 Dockerfile 在构建时已完成替换;已跑起来的容器docker exec进去执行这条即可。
挂载自定义模型路径
想用自训练或自转的模型,不必重打镜像,启动时传环境变量 + 挂载目录:
docker run -d --name rapidocr \ -e det_model_path=/models/ch_PP-OCRv3_det_infer.onnx \ -e rec_model_path=/models/ch_PP-OCRv3_rec_infer.onnx \ -v /path/to/models:/models \ -p 9003:9003 rapidocr一个提醒:用 PaddleOCR 官方工具转出来的模型不带字典文件,缺了它识别结果会乱码甚至为空。建议改用 RapidAI 提供的在线转换工具拿完整模型包。仓库还备好了各推理引擎的开发镜像,构建与运行方式见 docker 部署镜像。
识别率再榨一点
小字场景——手机截屏、漫画台词、电影内嵌字幕——直接丢给服务识别,漏检错检会偏多。换成三步预处理,准确率肉眼可见地涨:
- 裁剪出文字所在区域,去掉无关背景;
- 用 waifu2x、ESRGAN 等超分算法放大(超分即 AI 补细节的放大,比传统缩放锐利得多);
- 把放大后的图发给 RapidOCR 服务识别。
仓库测试集里这张日语样本(小字密排、低对比度背景)就是这类技巧的典型输入:
动手清单
- 把
rapidocr_api升到 0.1.1+,一步解决大多数已知问题 - 进容器
pip list | grep opencv确认装的是 headless 版 - 启动命令带上
--cpus、--memory、--memory-swap资源限制 - 自定义模型放宿主目录,用
det_model_path/rec_model_path指定并挂载 - 小字场景先裁剪、再超分放大,最后才进识别
【免费下载链接】RapidOCR📄 Awesome OCR multiple programing languages toolkits based on ONNX Runtime, OpenVINO, MNN, PaddlePaddle, TensorRT and PyTorch.项目地址: https://gitcode.com/GitHub_Trending/ra/RapidOCR
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考