PaddlePaddle / PaddleOCR踩坑记,动手实现一个OCR服务器

文章目录

一、环境搭建

1、官网

https://gitee.com/paddlepaddle/PaddleOCR#/paddlepaddle/PaddleOCR/blob/main/doc/doc_ch/quickstart.md

2、准备环境

本地环境坑太多了,好在官网还有一种基于docker搭建的环境:
https://gitee.com/paddlepaddle/PaddleOCR/blob/main/doc/doc_ch/environment.md#132-docker%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE

bash 复制代码
# 切换到工作目录下
cd /home/Projects
# 首次运行需创建一个docker容器,再次运行时不需要运行当前命令
# 创建一个名字为ppocr的docker容器,并将当前目录映射到容器的/paddle目录下

#如果您希望在CPU环境下使用docker,使用docker而不是nvidia-docker创建docker
sudo docker run --name ppocr -v $PWD:/paddle --network=host -it registry.baidubce.com/paddlepaddle/paddle:2.1.3-gpu-cuda10.2-cudnn7 /bin/bash


# ctrl+P+Q可退出docker 容器,重新进入docker 容器使用如下命令
sudo docker container exec -it ppocr /bin/bash

运行docker环境之后,还需要下载对应的包:
https://gitee.com/paddlepaddle/PaddleOCR/blob/main/doc/doc_ch/quickstart.md#paddleocr-%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B

bash 复制代码
python3 -m pip install paddlepaddle-gpu -i https://mirror.baidu.com/pypi/simple
pip install "paddleocr>=2.0.1" 

安装完成之后,就可以用了。我这里是简单搭建了一个基于CPU的服务器,都是用CPU处理的。

因为要下载的东西太多,我这里将容器打包了一下:

bash 复制代码
# 提交镜像
docker commit -m "ocr" -a="cxf" 4cc5a24c2d57 cxf/ocr:1.0

# 运行我的镜像,并指定端口映射,方便http请求 调试
sudo docker run --name cxfocr -p 8080:8080 -v $PWD:/paddle -it cxf/ocr:1.0 /bin/bash

二、编码实现一个web程序

py 复制代码
import requests
from flask import Flask
from flask import jsonify
from flask import request
import urllib.parse
from paddleocr import PaddleOCR, draw_ocr
app = Flask(__name__)
# 在Flask的config是一个存储了各项配置的字典
# 该操作是进行等效于ensure_ascii=False的配置
app.config['JSON_AS_ASCII'] = False


@app.route("/exec", methods=['POST'])
def login():
    if request.method == 'POST':
        # 接收json数据,这个data就是json对象了
        data = request.get_json()
        imageUrl = data['url']
        if not imageUrl:
            return jsonify({"error": "缺少url参数"})

        # 图片下载到本地
        img_path = '/home/myocr/test.jpg'
        urllib.request.urlretrieve(url=imageUrl, filename=img_path)

        # 本地ocr识别
        ocr = PaddleOCR(use_angle_cls=True, lang="ch")  # need to run only once to download and load model into memory

        returnResult = '';

        result = ocr.ocr(img_path, cls=True)
        for idx in range(len(result)):
            res = result[idx]
            for line in res:
                returnResult = returnResult + ' ' + line[1][0]

        print(returnResult)
        # todo 删除图片

        # 调用大模型,这里用的讯飞星火
        url = "https://spark-api-open.xf-yun.com/v1/chat/completions"
        data = {
            "model": "generalv3.5",  # 指定请求的模型
            "messages": [
                {
                    "role": "user",
                    "content": "你是一个ocr身份证识别的系统,并且只会给我标准的json格式数据,我需要根据你返回的标准的json格式数据进行下一步解析,返回的json数据的key为英文," +
                               "下是一张身份证中的内容,请解析信息,并以json字符串给我返回:" + returnResult
                }
            ]
        }
        header = {
            "Authorization": "Bearer xx:xxx"
            # 注意此处替换自己的key和secret
        }
        response = requests.post(url, headers=header, json=data)
        #  {"code":0,"message":"Success","sid":"cha1234312473@dx1913097b491b8f3532","choices":[{"message":{"role":"assistant","content":"{\n  \"name\": \"张三\",\n  \"gender\": \"男\",\n  \"ethnicity\": \"汉\",\n  \"birthdate\": \"1992年3月11日\",\n  \"address\": \"山东省青岛市市南区172号\",\n  \"id_number\": \"37023319860123291X\"\n}"},"index":0}],"usage":{"prompt_tokens":122,"completion_tokens":97,"total_tokens":219}}
        print(response.text)
        
        # todo 解析json
        bigModelResultContent = response.text.replace('\n', '')
		print(bigModelResultContent)
		bigModelResultJson = json.loads(bigModelResultContent)
		msg = jsonpath.jsonpath(json.loads(bigModelResultContent),'$..content')[0]
		msg = msg.replace('[\'```json\n','')
		msg = msg.replace('\n```\']','')
		msg = msg.replace('[\n','')
		print(msg)

    # 将对象返回为json
    return jsonify({"result": msg})


if __name__ == '__main__':
    app.run()
相关推荐
doris6102 小时前
资产 OCR 识别:批量导入效率提升指南
ocr·资产管理·固定资产管理系统
TextIn智能文档云平台7 小时前
复杂PDF文档结构化提取全攻略——从OCR到大模型知识库构建
pdf·ocr
EkihzniY18 小时前
OCR 证件识别:驱动澳门酒店自助入住智能化
嵌入式硬件·ocr
weixin_4378309418 小时前
使用冰狐智能辅助实现图形列表自动点击:OCR与HID技术详解
开发语言·javascript·ocr
Jayin_chan1 天前
paddlex3.0.1-ocr服务化安装部署(docker)
docker·容器·ocr
一条数据库1 天前
5000+张带XML标注的杂货货架数据集:专为目标检测与产品识别设计的零售AI训练数据,助力智能超市与计算机视觉研究
计算机视觉·ocr
豆浩宇2 天前
Conda环境隔离和PyCharm配置,完美同时运行PaddlePaddle和PyTorch
人工智能·pytorch·算法·计算机视觉·pycharm·conda·paddlepaddle
AI人工智能+2 天前
表格识别技术:通过计算机视觉和OCR,实现非结构化表格向结构化数据的转换,推动数字化转型。
人工智能·计算机视觉·ocr
sky丶Mamba4 天前
OCR与多模态大模型:从“看见”文字到“读懂”世界的技术革命
ocr·多模态大模型
豆浩宇4 天前
学习PaddlePaddle--环境配置-Windows 11 + RTX 4060
人工智能·windows·深度学习·学习·目标检测·计算机视觉·paddlepaddle