.env
PADDLEOCR_DEVICE=cpu # 推理设备:cpu;有 GPU 时可按镜像支持情况配置 gpu:0
PADDLEOCR_LANG=ch # OCR 识别语言:ch 表示中文
PADDLEOCR_TIMEOUT=60 # 下载远程文件的超时时间(秒)
PADDLEOCR_CONVERT_TIMEOUT=120 # DOC/DOCX 转 PDF 的超时时间(秒)
PADDLEOCR_MAX_DOWNLOAD_BYTES=52428800 # 单个输入文件最大大小(字节,当前为 50 MiB)
PADDLEOCR_PORT=8060:8080 # 端口映射:宿主机端口:容器端口
PADDLEOCR_CONTAINER_PORT=8080 # 容器内 Uvicorn 服务端口
FLAGS_USE_MKLDNN=0 # 是否启用 PaddlePaddle MKLDNN CPU 加速:0 关闭,1 开启
PADDLE_PDX_DISABLE_MODEL_SOURCE_CHECK=true # 跳过模型源连通性检查,使用镜像中已内置的模型
# PaddleOCR 文档预处理模型开关:默认开启,识别旋转、弯曲或方向异常的文档时效果更好
PADDLEOCR_USE_DOC_ORIENTATION_CLASSIFY=false # 文档方向分类(0°/90°/180°/270°)
PADDLEOCR_USE_DOC_UNWARPING=false # 文档畸变校正(透视、弯曲等)
PADDLEOCR_USE_TEXTLINE_ORIENTATION=false # 文本行方向分类
PADDLEOCR_RETURN_LINES=false # 是否返回逐行结果;false 可减小响应体,减少对内存持续消耗,只返回必要字段。
docker-compose.yml
services:
paddleocr:
image: docker.1ms.run/sllwakeup/paddleocr:1.0.2
container_name: paddleocr
restart: unless-stopped
shm_size: 256m
platform: linux/amd64
# 限制 OCR 容器资源,避免模型初始化或异常请求耗尽宿主机资源。
cpus: "2.0"
mem_limit: 2g
mem_reservation: 512m
memswap_limit: 2g
pids_limit: 64
env_file:
- .env
environment:
TZ: Asia/Shanghai
LANG: C.UTF-8
LC_ALL: C.UTF-8
FLAGS_use_mkldnn: "${FLAGS_USE_MKLDNN}"
PADDLEOCR_DEVICE: ${PADDLEOCR_DEVICE:-cpu}
PADDLEOCR_LANG: ${PADDLEOCR_LANG:-ch}
PADDLEOCR_USE_DOC_ORIENTATION_CLASSIFY: "${PADDLEOCR_USE_DOC_ORIENTATION_CLASSIFY:-true}"
PADDLEOCR_USE_DOC_UNWARPING: "${PADDLEOCR_USE_DOC_UNWARPING:-true}"
PADDLEOCR_USE_TEXTLINE_ORIENTATION: "${PADDLEOCR_USE_TEXTLINE_ORIENTATION:-true}"
PADDLEOCR_RETURN_LINES: "${PADDLEOCR_RETURN_LINES:-true}"
ports:
- "${PADDLEOCR_PORT}"
command:
- uvicorn
- main:app
- --host
- 0.0.0.0
- --port
- "${PADDLEOCR_CONTAINER_PORT}"
# - --limit-concurrency 这个是表示 仅允许有 1 个并发请求
# - "1"
volumes:
- ./data:/app/data
- ./output:/app/output
healthcheck:
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://127.0.0.1:${PADDLEOCR_CONTAINER_PORT}/health', timeout=5)"]
interval: 30s
timeout: 10s
retries: 5
start_period: 30s
networks:
- paddleocr-network
networks:
paddleocr-network:
driver: bridge
name: paddleocr-network
图片请求示例:
curl -i -sS --max-time 600 \
-X POST 'http://127.0.0.1:8060/ocr' \
-H 'Content-Type: application/json' \
--data-raw '{"image":"https://c-ssl.dtstatic.com/uploads/blog/202405/02/P5SGM4NPHbQ2zga.thumb.1000_0.jpg"}'
文件请求示例
curl -i -sS --max-time 600 \
-X POST 'http://127.0.0.1:8060/ocr' \
-H 'Content-Type: application/json' \
--data-raw '{"file":"https://image.modbus.cn/wp-content/uploads/2022/03/2022031708564080.pdf"}'
识别结果示例:
成功:
{
"success": true,
"text": "天才无解\n笨蛋会有人喜欢吗\n笨蛋太笨了\n想不出答案\n他去问天才\n天才说:\n笨蛋太笨了,才以为没人喜欢",
"elapsed": 2.4381
]
}
失败:
{
"success": false,
"text": "",
"pages": [],
"lines": [],
"message": "OCR 识别失败:LibreOffice 转换失败"
}
⚠️ 注意事项:
1、请根据使用场景合理设置 核数和内存大小,内容越多样式排版越复杂消耗内存会越多。建议:6~8GB 内存。
2、如果识别内容过大或内容复杂或消耗大量内存去处理识别,当 ocr 大模型处理峰值到到或者超过内存上限就会僵死从而自动重起服务 。
3、当使用 CURL 请求时建议合理设置超时时间以及异常处理。
4、URL 最好带正确的文件扩展名。如果 URL 没有 .jpg、.pdf、.docx 等后缀,服务可能无法正确判断文件类型。
5、当前 ocr 支持识别格式:
图片:bmp、dib、jpeg、jpg、png、webp、pbm、pgm、ppm、pnm、sr、ras、tiff、tif
文件:pdf、doc、docx
Content type
Image
Digest
sha256:2887cfa1c…
Size
950 MB
Last updated
17 days ago
docker pull sllwakeup/paddleocr:1.0.2