PaddleOCR加载chinese_ocr_db_crnn_modile模型进行中英文混合预测(Http服务)实践
1. 环境搭建
参考:《PaddleOCR加载chinese_ocr_db_crnn_server模型进行中英文混合预测(命令行)实践》
2. 服务端部署
hub serving start -m chinese_ocr_db_crnn_mobile -p 8866
3. 客户端访问
# coding: utf8
import requests
import json
import cv2
import base64def cv2_to_base64(image):data = cv2.imencode('.jpg', image)[1]return base64.b64encode(data.tostring()).decode('utf8')# 发送HTTP请求
data = {'images':[cv2_to_base64(cv2.imread("/PATH/TO/IMAGE"))]}
headers = {"Content-type": "application/json"}
url = "http://127.0.0.1:8866/predict/chinese_ocr_db_crnn_mobile"
r = requests.post(url=url, headers=headers, data=json.dumps(data))# 打印预测结果
print(r.json()["results"])
4. 将图像识别服务部署到Flask上
先参考《Flask开发实践》或《Flask入门》
在此基础上进行了以下修改:
文件routes.py增加的内容
import base64
import json
import os
import cv2
import requests
from werkzeug.utils import secure_filename# OCR测试
@webapp.route('/ocr', methods=['POST', 'GET'])
def ocr():basepath = os.path.dirname(__file__) # 当前文件所在路径print(request.method)if request.method == 'POST':f = request.files['file']upload_path = os.path.join(basepath, 'static/uploads', secure_filename(f.filename)) # 注意:没有的文件夹要先创建f.save(upload_path)return redirect(url_for('ocr_result', pic_name=f.filename))else:return render_template('ocr.html')# OCR测试结果
@webapp.route('/ocr/<pic_name>', methods=['POST', 'GET'])
def ocr_result(pic_name):basepath = os.path.dirname(__file__) # 当前文件所在路径print(request.method)if pic_name != "":upload_path = os.path.join(basepath, 'static/uploads', secure_filename(pic_name))data = {'images': [cv2_to_base64(cv2.imread(upload_path))]}headers = {"Content-type": "application/json"}url = "http://127.0.0.1:8866/predict/chinese_ocr_db_crnn_mobile"# 图像识别服务: hub.exe serving start -m chinese_ocr_db_crnn_mobile -p 8866r = requests.post(url=url, headers=headers, data=json.dumps(data))# 打印预测结果results = r.json()["results"][0]["data"]return render_template('ocr.html', results=results, file=upload_path.replace(basepath, ''))else:return render_template('ocr.html')def cv2_to_base64(image):data = cv2.imencode('.jpg', image)[1]return base64.b64encode(data.tostring()).decode('utf8')
新建模板文件ocr.html
<!DOCTYPE html>
<html >
<head><meta charset="UTF-8"><title>图像识别测试页</title>
</head>
<body><h1>图像识别测试页</h1><form action="/ocr" enctype="multipart/form-data" method="post"><input type="file" name="file"><input type="submit" value="提交"></form><h1>识别结果</h1><img src="{{ file }}">{% for result in results %}<table><tr valign="top"><td>[置信度] {{ (result.confidence*100) | round(2) }}%, [文字内容] {{ result.text }}</td></tr></table>{% endfor %}{{ result }}
</body>
</html>
5. 运行效果
先上传图片
提交后显示图片内容和识别结果
【参考文档】
《PaddleHub一键OCR中文识别》
PaddleOCR加载chinese_ocr_db_crnn_modile模型进行中英文混合预测(Http服务)实践相关推荐
- PaddleOCR加载chinese_ocr_db_crnn_server模型进行中英文混合预测(命令行)实践
1. 安装相关库文件 # 安装paddlehub和paddlepaddle pip install paddlehub -i https://pypi.tuna.tsinghua.edu.cn/sim ...
- PaddleOCR加载chinese_ocr_db_crnn_server/chinese_ocr_db_crnn_modile模型进行中英文混合预测(代码)实践
1. 环境搭建 参考:<PaddleOCR加载chinese_ocr_db_crnn_server模型进行中英文混合预测(命令行)实践> 2. 代码 import paddlehub as ...
- 加载tf模型 正确率很低_深度学习模型训练全流程!
↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:黄星源.奉现,Datawhale优秀学习者 本文从构建数据验证集. ...
- 在C++中加载TorchScript模型
在C++中加载TorchScript模型 本教程已更新为可与PyTorch 1.2一起使用 顾名思义,PyTorch的主要接口是Python编程语言.尽管Python是合适于许多需要动态性和易于迭代的 ...
- xBIM 实战01 在浏览器中加载IFC模型文件
系列目录 [已更新最新开发文章,点击查看详细] 一.创建Web项目 打开VS,新建Web项目,选择 .NET Framework 4.5 选择一个空的项目 新建完成后,项目结构如下: 二.添 ...
- Python时间序列模型推理预测实战:时序推理数据预处理(特征生成、lstm输入结构组织)、模型加载、模型预测结果保存、条件判断模型循环运行
Python时间序列模型推理预测实战:时序推理数据预处理(特征生成.lstm输入结构组织).模型加载.模型预测结果保存.条件判断模型循环运行 目录
- threejs加载obj模型_Vulkan编程指南(章节31-载入模型)
章节31 载入模型 介绍 本章节我们将会渲染一个带有纹理的三维模型. 库 我们使用tinyobjloader库来从OBJ文件加载顶点数据.tinyobjloader库是一个简单易用的单文件OBJ加载器 ...
- threejs加载3D模型例子
加载3D模型 首先要引入ColladaLoader加载器,Collada是一个3D模型交换方案,即不同的3D模型可以通过Collada进行相互转换,言外之意,threejs可以使用Collada将3D ...
- python加载模型_解决python 无法加载downsample模型的问题
downsample 在最新版本里面修改了位置 from theano.tensor.single import downsample (旧版本) 上面以上的的import会有error raise: ...
最新文章
- mysql smack_super-smack测试mysql性能
- PHP输入流php://input介绍
- 简单快速开发C\S架构程序用最简单的不分层最快的效率
- TypeScript,从0到入门带你进入类型的世界
- STL的可持久化数组
- 作者:冯仕政(1974-),男,中国人民大学社会与人口学院教授、副院长。
- 如何从零设计一款牛逼的高并发架构(建议收藏)
- 使用tar或dd等完成Linux系统备份恢复
- Golang入门教程(九)复合数据类型使用案例二
- linux服务器选择u盘启动,【服务器运维】linux怎样以u盘启动
- 地理信息系统GIS在城市生活垃圾管理中的应用时间
- 一起学习PySNMP——理解什么是MIB
- python课程作业-贪吃蛇
- js文字转图片,使用画布绘制
- 数据库大数据量、高并发、高可用解决方案!
- 结对项目:SudokuGame
- 网络游戏数据同步的实现 一:状态同步、帧同步的基本原理概述
- 如何将所有中文的文件名称翻译成日语
- 系统总结深度学习的主要的损失函数和优化器
- Ngnix 的代码分析