Sign inSign up

xylplm/media-saber-paddle-ocr

By xylplm

•Updated 8 months ago

media-saber--paddle-ocr

Image
0

10K+

xylplm/media-saber-paddle-ocr repository overview

⁠Media Saber Paddle OCR - Docker 镜像

Docker Image Docker Pulls Image Size

基于 Node.js + Fastify + PP-OCRv5 的高性能轻量级 OCR API 服务。专为验证码识别和通用文字识别设计,成功率 90% 以上。

⁠✨ 特性

  • 🚀 高性能: 基于 Fastify 框架,启动时间 2-3 秒
  • 📦 轻量级: 镜像大小仅 ~150MB,内存占用约 150MB
  • 🎯 高精度: 使用 PP-OCRv5 模型,识别准确率高
  • 🔧 易用性: 开箱即用,无需复杂配置
  • 🌐 多接口: 支持验证码识别和通用 OCR 两种模式
  • 📤 多输入: 支持 Base64 和文件上传两种方式
  • ⚙️ 可配置: 支持预处理参数,灵活控制识别流程

⁠🚀 快速开始

⁠方式一:Docker Run
docker run -d \
  --name media-saber-paddle-ocr \
  -p 9899:9899 \
  xylplm/media-saber-paddle-ocr:latest
⁠方式二:Docker Compose(推荐)

创建 docker-compose.yml 文件:

version: "3.8"

services:
  media-saber-paddle-ocr:
    image: xylplm/media-saber-paddle-ocr:latest
    container_name: media-saber-paddle-ocr
    ports:
      - "9899:9899"
    environment:
      - TZ=Asia/Shanghai
      - LOG_LEVEL=info
    restart: unless-stopped
    deploy:
      resources:
        limits:
          memory: 1G
          cpus: '1.0'
        reservations:
          memory: 256M
          cpus: '0.5'

启动服务:

docker-compose up -d
⁠验证服务
# 健康检查
curl http://localhost:9899/health

# 测试 OCR 识别
curl -X POST http://localhost:9899/captcha/base64 \
  -H "Content-Type: application/json" \
  -d '{"base64_img":"your_base64_image_here"}'

⁠📖 API 接口

⁠1. 验证码识别接口

适用场景: 验证码识别,自动过滤非字母数字字符

curl -X POST http://localhost:9899/captcha/base64 \
  -H "Content-Type: application/json" \
  -d '{
    "base64_img": "图片的base64编码",
    "preprocess": true
  }'

响应示例:

{
  "result": "ABC123",
  "confidence": 0.95,
  "processing_time": 0.12
}
⁠2. 通用 OCR 识别 - Base64

适用场景: 通用文字识别,返回完整的文本和位置信息

curl -X POST http://localhost:9899/general/base64 \
  -H "Content-Type: application/json" \
  -d '{
    "base64_img": "图片的base64编码",
    "preprocess": false
  }'

响应示例 (Paddle 标准格式):

{
  "results": [
    {
      "rec_texts": ["识别的文本"],
      "rec_scores": [0.9976],
      "det_polygons": [[x1,y1], [x2,y2], [x3,y3], [x4,y4]]
    }
  ],
  "processing_time": 0.56
}
⁠3. 通用 OCR 识别 - 文件上传

适用场景: 直接上传图片文件进行识别

curl -X POST "http://localhost:9899/general/file?preprocess=true" \
  -F "file=@/path/to/image.png"

支持的图片格式:JPEG, PNG, GIF, BMP, WebP

⁠预处理参数说明

所有接口都支持 preprocess 参数:

  • preprocess: true (默认)

    • 执行二值化、降噪、边界处理
    • 适合验证码等需要增强的图片
    • 识别准确率更高
  • preprocess: false

    • 跳过预处理,直接识别
    • 适合清晰的文档图片
    • 处理速度更快(约快 30%)

⁠⚙️ 环境变量

变量说明默认值
PORT服务端口9899
HOST绑定地址0.0.0.0
LOG_LEVEL日志级别info
TZ时区设置UTC

日志级别选项: debug, info, warn, error

⁠📊 性能指标

指标数值
镜像大小~150MB
内存占用~150MB
启动时间2-3 秒
识别速度100-200ms
并发能力优秀

⁠🔍 健康检查

服务提供多个健康检查端点:

# 轻量级健康检查
curl http://localhost:9899/health

# OCR 服务状态检查
curl http://localhost:9899/captcha/health

# 服务信息
curl http://localhost:9899/

⁠📝 使用示例

⁠Python 示例
import requests
import base64

# 读取图片并转换为 base64
with open('image.png', 'rb') as f:
    base64_img = base64.b64encode(f.read()).decode('utf-8')

# 调用验证码识别接口
response = requests.post(
    'http://localhost:9899/captcha/base64',
    json={'base64_img': base64_img}
)
print(response.json())

# 调用通用 OCR 接口
response = requests.post(
    'http://localhost:9899/general/base64',
    json={'base64_img': base64_img, 'preprocess': False}
)
print(response.json())
⁠JavaScript 示例
const fs = require('fs');
const axios = require('axios');

// 读取图片并转换为 base64
const imageBuffer = fs.readFileSync('image.png');
const base64Img = imageBuffer.toString('base64');

// 调用验证码识别接口
axios.post('http://localhost:9899/captcha/base64', {
  base64_img: base64Img
}).then(response => {
  console.log(response.data);
});

// 调用通用 OCR 接口
axios.post('http://localhost:9899/general/base64', {
  base64_img: base64Img,
  preprocess: false
}).then(response => {
  console.log(response.data);
});
⁠cURL 文件上传示例
# 上传图片文件进行识别
curl -X POST "http://localhost:9899/general/file?preprocess=true" \
  -F "[email protected]"

⁠🛠️ 故障排除

⁠服务无法启动
# 查看容器日志
docker logs media-saber-paddle-ocr

# 查看实时日志
docker logs -f media-saber-paddle-ocr
⁠端口冲突

如果 9899 端口被占用,可以修改映射端口:

docker run -d \
  --name media-saber-paddle-ocr \
  -p 8899:9899 \
  xylplm/media-saber-paddle-ocr:latest
⁠内存不足

建议为容器分配至少 512MB 内存:

deploy:
  resources:
    limits:
      memory: 1G
    reservations:
      memory: 512M

⁠🔧 高级配置

⁠自定义日志级别
docker run -d \
  --name media-saber-paddle-ocr \
  -p 9899:9899 \
  -e LOG_LEVEL=debug \
  xylplm/media-saber-paddle-ocr:latest
⁠持久化日志
docker run -d \
  --name media-saber-paddle-ocr \
  -p 9899:9899 \
  -v /path/to/logs:/app/logs \
  xylplm/media-saber-paddle-ocr:latest
⁠资源限制
docker run -d \
  --name media-saber-paddle-ocr \
  -p 9899:9899 \
  --memory="1g" \
  --cpus="1.0" \
  xylplm/media-saber-paddle-ocr:latest

⁠📦 镜像标签

  • latest: 最新稳定版本
  • v1.x.x: 特定版本号
  • dev: 开发版本(不推荐生产使用)

⁠🔗 相关链接

⁠📄 许可证

本项目基于 [Apache License 2.0] 协议。

⁠🤝 贡献

欢迎提交 Issue 和 Pull Request!


技术栈: Node.js 24 | Fastify 5 | PP-OCRv5 | ONNX Runtime | eSearch-OCR

Tag summary

Content type

Image

Digest

sha256:0b67d5c49…

Size

474.6 MB

Last updated

8 months ago

docker pull xylplm/media-saber-paddle-ocr