Sign inSign up

sllwakeup/paddleocr

By sllwakeup

Updated 17 days ago

该镜像内置处理大模型,建议内存在6-8G 及以上。

Image
0

251

sllwakeup/paddleocr repository overview

.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

Tag summary

Content type

Image

Digest

sha256:2887cfa1c

Size

950 MB

Last updated

17 days ago

docker pull sllwakeup/paddleocr:1.0.2