跳转至

安装及使用

PyPI

Note

OCR API的输出结果为最原始结果,大家可按需进一步扩展。

简介

  • 该包是将rapidocr_onnxruntime库做了API封装,采用FastAPI + uvicorn实现。
  • 定位是一个快速调用rapidocr_onnxruntime的API接口,没有考虑多进程处理并发请求,如果有这需求的小伙伴,可以看看gunicorn等。

安装

可以选择依赖哪个推理引擎的RapidOCR,按需安装。

需要注意的是:rapidocr_api[paddle]对应的是rapidocr_paddle 版本,该版本支持GPU推理,需要安装对应的PaddlePaddle GPU版本。详情请参见:link

1
2
3
4
5
6
# CPU
pip install rapidocr_api[onnx]
pip install rapidocr_api[openvino]

# GPU
pip install rapidocr_api[paddle]

启动服务端

rapidocr_api>=0.1.0中,可通过环境变量传递模型参数:det_model_path, cls_model_path, rec_model_path;接口中可传入参数,控制是否使用检测、方向分类和识别这三部分的模型;具体调用可参见下面文档。

Windows下使用

1
2
3
set det_model_path=I:\models\图像相关\OCR\RapidOCR\PP-OCRv4\ch_PP-OCRv4_det_server_infer.onnx
set rec_model_path=I:\models\图像相关\OCR\RapidOCR\PP-OCRv4\ch_PP-OCRv4_rec_server_infer.onnx
rapidocr_api

Linux下使用

# 默认参数启动
rapidocr_api

# 指定参数:端口与进程数量;
rapidocr_api -ip 0.0.0.0 -p 9005 -workers 2

# 指定模型
export det_model_path=/mnt/sda1/models/PP-OCRv4/ch_PP-OCRv4_det_server_infer.onnx
export rec_model_path=/mnt/sda1/models/PP-OCRv4/ch_PP-OCRv4_rec_server_infer.onnx
rapidocr_api -ip 0.0.0.0 -p 9005 -workers 2

Docker方式使用

Dockerfile源码

Build镜像:

1
2
3
4
5
6
7
8
git clone https://github.com/RapidAI/RapidOCR.git
cd api

# build方式1:使用宿主机的网络
docker build -t="rapidocr_api:0.1.4" --network host .

# build方式2:使用宿主机上的代理
docker build -t rapidocr_api:0.1.4 --network host --build-arg HTTP_PROXY=http://127.0.0.1:8888 --build-arg HTTPS_PROXY=http://127.0.0.1:8888 .

调试运行:

docker run --rm -p 9003:9003 --name rapidocr_api -e TZ=Asia/Shanghai rapidocr_api:0.1.4

运行:

docker run -d -p 9003:9003 --name rapidocr_api -e TZ=Asia/Shanghai rapidocr_api:0.1.4

接口web界面:

http://<ip>:9003/docs

Docker 临时修改并验证的方法

docker run -p 9003:9003 --name rapidocr_api -e TZ=Asia/Shanghai rapidocr_api:0.1.4

进入container修改python源文件,Dockerfile最好加上apt-get install vim安装

1
2
3
4
5
6
docker exec -it rapidocr_api /bin/bash
cd /usr/local/lib/python3.10/site-packages/rapidocr_api
...
# 修改参数文件
vi /usr/local/lib/python3.10/site-packages/rapidocr_onnxruntime/config.yaml
# 改好后exit退出

重启container

docker restart rapidocr_api

查看日志:

docker logs -f rapidocr_api

调用

Info

调用本质就是发送一个POST请求,以下给出Curl和Python的调用示例,其他编程语言同理。

Curl调用

curl -F image_file=@1.png http://0.0.0.0:9003/ocr

Python调用

import requests

url = 'http://localhost:9003/ocr'
img_path = 'tests/test_files/ch_en_num.jpg'

with open(img_path, 'rb') as f:
    file_dict = {'image_file': (img_path, f, 'image/png')}
    response = requests.post(url, files=file_dict, timeout=60)

print(response.json())
import base64
import requests

url = 'http://localhost:9003/ocr'
img_path = 'tests/test_files/ch_en_num.jpg'

with open(img_path, 'rb') as fa:
    img_str = base64.b64encode(fa.read())

payload = {'image_data': img_str}
response = requests.post(url, data=payload, timeout=60)

print(response.json())
1
2
3
4
5
6
7
8
9
import requests

url = 'http://localhost:9003/ocr'
img_path = 'tests/test_files/ch_en_num.jpg'

with open(img_path, 'rb') as f:
    data = {"use_det": False, "use_cls": True, "use_rec": True}
    response = requests.post(url, files=file_dict, data=data, timeout=60)
print(response.json())

输出结果说明

如果图像中存在文字,则会输出字典格式,具体介绍如下:

{
 "0": {
  "rec_txt": "香港深圳抽血,", # 识别的文本
  "dt_boxes": [  # 依次为左上角  右上角  右下角  左下角
   [265, 18],
   [472, 231],
   [431, 271],
   [223, 59]
  ],
  "score": "0.8176"   # 置信度
 }
}

如果没有检测到文字,则会输出空字典({})。

示例结果

{
    "0": {
        "rec_txt": "8月26日!",
        "dt_boxes": [
            [333.0, 72.0],
            [545.0, 40.0],
            [552.0, 90.0],
            [341.0, 122.0]
        ],
        "score": "0.7342"
    },
    "1": {
        "rec_txt": "澳洲名校招生信息",
        "dt_boxes": [
            [266.0, 163.0],
            [612.0, 116.0],
            [619.0, 163.0],
            [272.0, 210.0]
        ],
        "score": "0.8262"
    },
    "2": {
        "rec_txt": "解读!!",
        "dt_boxes": [
            [341.0, 187.0],
            [595.0, 179.0],
            [598.0, 288.0],
            [344.0, 296.0]
        ],
        "score": "0.6152"
    },
    "3": {
        "rec_txt": "Rules...",
        "dt_boxes": [
            [446.0, 321.0],
            [560.0, 326.0],
            [559.0, 352.0],
            [445.0, 347.0]
        ],
        "score": "0.8704"
    }
}

评论