当前位置: 首页 > news >正文

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

文章目录

  • 一、环境搭建
    • 1、官网
    • 2、准备环境
  • 二、编码实现一个web程序

一、环境搭建

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

# 切换到工作目录下
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

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

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

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

# 提交镜像
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程序

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 memoryreturnResult = '';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 解析jsonbigModelResultContent = 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)# 将对象返回为jsonreturn jsonify({"result": msg})if __name__ == '__main__':app.run()

http://www.lryc.cn/news/417985.html

相关文章:

  • JeecgBoot低代码平台简单记录
  • 零基础入门转录组数据分析——机器学习算法之xgboost(筛选特征基因)
  • C#开发常见面试题三(浅复制和深复制的区别)
  • Linux/C 高级——Linux命令
  • 怎么在 tailwindcss 项目中自定义一些可复用的样式
  • 在vue3中 引入echarts
  • 栈和队列(数据结构)
  • 如何实现ElementUI表单项label的文字提示?
  • c++中的标准库
  • 洛谷 B2145 digit 函数 B2146 Hermite 多项式 题解
  • tailwindcss @apply 和 @layer 有什么区别
  • React 中的 useMemo 和 useCallback
  • idea社区版lombok总是突然失效:log未知的变量
  • Java语言程序设计基础篇_编程练习题*16.13(比较不同利率的贷款)
  • 正点原子imx6ull-mini-Linux驱动之Regmap API 实验
  • postgresql 双重排序后 重复项 标识次序
  • 线程池ThreadPoolExecutor使用
  • Codeforces Round 963 (Div. 2)
  • Mysql函数学习笔记
  • 【Linux基础】Linux基本指令(一)
  • 全球视野:航空蓄电池的国际标准与技术创新
  • 11-初识python的函数——定义和调用
  • Windows安装Swoft框架
  • 阅读台灯什么品牌好?一文带你了解热门阅读台灯推荐
  • 1、.Net UI框架:Xamarin Forms - .Net宣传系列文章
  • Tomcat 最大连接数实现原理
  • 大数据应用【大数据导论】
  • IP地址申请SSL证书实现https访问
  • 未授权访问漏洞上(漏洞复现合集)
  • 多久没有清理你的电脑磁盘了?轻松解锁免费轻量磁盘清理工具