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服务)实践相关推荐

  1. PaddleOCR加载chinese_ocr_db_crnn_server模型进行中英文混合预测(命令行)实践

    1. 安装相关库文件 # 安装paddlehub和paddlepaddle pip install paddlehub -i https://pypi.tuna.tsinghua.edu.cn/sim ...

  2. PaddleOCR加载chinese_ocr_db_crnn_server/chinese_ocr_db_crnn_modile模型进行中英文混合预测(代码)实践

    1. 环境搭建 参考:<PaddleOCR加载chinese_ocr_db_crnn_server模型进行中英文混合预测(命令行)实践> 2. 代码 import paddlehub as ...

  3. 加载tf模型 正确率很低_深度学习模型训练全流程!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:黄星源.奉现,Datawhale优秀学习者 本文从构建数据验证集. ...

  4. 在C++中加载TorchScript模型

    在C++中加载TorchScript模型 本教程已更新为可与PyTorch 1.2一起使用 顾名思义,PyTorch的主要接口是Python编程语言.尽管Python是合适于许多需要动态性和易于迭代的 ...

  5. xBIM 实战01 在浏览器中加载IFC模型文件

    系列目录    [已更新最新开发文章,点击查看详细]  一.创建Web项目 打开VS,新建Web项目,选择 .NET Framework 4.5  选择一个空的项目 新建完成后,项目结构如下: 二.添 ...

  6. Python时间序列模型推理预测实战:时序推理数据预处理(特征生成、lstm输入结构组织)、模型加载、模型预测结果保存、条件判断模型循环运行

    Python时间序列模型推理预测实战:时序推理数据预处理(特征生成.lstm输入结构组织).模型加载.模型预测结果保存.条件判断模型循环运行 目录

  7. threejs加载obj模型_Vulkan编程指南(章节31-载入模型)

    章节31 载入模型 介绍 本章节我们将会渲染一个带有纹理的三维模型. 库 我们使用tinyobjloader库来从OBJ文件加载顶点数据.tinyobjloader库是一个简单易用的单文件OBJ加载器 ...

  8. threejs加载3D模型例子

    加载3D模型 首先要引入ColladaLoader加载器,Collada是一个3D模型交换方案,即不同的3D模型可以通过Collada进行相互转换,言外之意,threejs可以使用Collada将3D ...

  9. python加载模型_解决python 无法加载downsample模型的问题

    downsample 在最新版本里面修改了位置 from theano.tensor.single import downsample (旧版本) 上面以上的的import会有error raise: ...

最新文章

  1. mysql smack_super-smack测试mysql性能
  2. PHP输入流php://input介绍
  3. 简单快速开发C\S架构程序用最简单的不分层最快的效率
  4. TypeScript,从0到入门带你进入类型的世界
  5. STL的可持久化数组
  6. 作者:冯仕政(1974-),男,中国人民大学社会与人口学院教授、副院长。
  7. 如何从零设计一款牛逼的高并发架构(建议收藏)
  8. 使用tar或dd等完成Linux系统备份恢复
  9. Golang入门教程(九)复合数据类型使用案例二
  10. linux服务器选择u盘启动,【服务器运维】linux怎样以u盘启动
  11. 地理信息系统GIS在城市生活垃圾管理中的应用时间
  12. 一起学习PySNMP——理解什么是MIB
  13. python课程作业-贪吃蛇
  14. js文字转图片,使用画布绘制
  15. 数据库大数据量、高并发、高可用解决方案!
  16. 结对项目:SudokuGame
  17. 网络游戏数据同步的实现 一:状态同步、帧同步的基本原理概述
  18. 如何将所有中文的文件名称翻译成日语
  19. 系统总结深度学习的主要的损失函数和优化器
  20. Ngnix 的代码分析

热门文章

  1. SIM900A基站定位调试笔记 -转
  2. C++ 创建引用DLL
  3. python操作Elasticsearch7.17.0
  4. Node.js Buffer静态方法
  5. jdk官方版 v1.7+安装教程
  6. 微信公众平台开发:进阶篇(Web App开发入门)
  7. getElementById取得文本框中的值
  8. 探索ElasticSearch(一)
  9. Python踩坑:类与类对象类型参数传递与使用
  10. 机器学习中的目标函数、损失函数、代价函数有什么区别?