如何在Windows上一键部署PaddleOCR的WebAPI服务
PaddleOCR旨在打造一套丰富、领先、且实用的OCR工具库,助力开发者训练出更好的模型,并应用落地。
一定会有小伙伴们看完不知道如何部署与应用,怎么才能融入到自己的产品或项目中去。PaddleOCR是开源、免费、可离线部署的OCR。
本文将介绍如何在windows平台上,自动化部署webAPI,并给出示例如何使用。
第一步,要安装Python环境。下载地址:Download Python | Python.org
建议选择安装3.6~3.9版本,然后为了pip下载速度,把下面的文本内容,保存为pip.ini文件,存放到你的python安装目录下,例如:C:\Users\username\AppData\Local\Programs\Python\Python39
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host=mirrors.aliyun.com
第二步,把下面的批处理文件文本内容,保存为PaddleOCRWebAPI.bat文件,存放到你的电脑上任意目录下,然后双击运行,不出意外,你的PaddleOCR的WebAPI就部署成功啦。
@echo off
COLOR 2F
title 公众号:明月心技术学堂
echo 本脚本演示如何在window境下一键部署PaddleOCR的WEBAPI功能。
echo 待脚本执行完后,将自动开一个OCR服务。url=127.0.0.1:5000/PaddleOCR/DetectText
echo 检测PYTHON安装
python -V
python -m pip install --upgrade pip pip3 install opencv-python==4.5.5.64
echo 开始安装PaddleOCR
pip3 install paddleocr echo 安装PaddleOCR的依赖预测库
pip3 install paddlepaddle
echo 安装Flask
pip3 install Flask
echo 安装DateTime
pip3 install DateTime set port=5000
set filename=PaddleOCRAPI.py
@echo off
del %filename%
echo import io >> %filename%
echo from pickle import DICT >> %filename%
echo import paddleocr >> %filename%
echo import json >> %filename%
echo import base64 >> %filename%
echo import DateTime >> %filename%
echo from flask import Flask, request,jsonify >> %filename%
echo import numpy as np >> %filename%
echo from PIL import Image >> %filename%
echo app=Flask(__name__) >> %filename%
echo app.config['JSON_AS_ASCII']=False >> %filename%
echo @app.route("/PaddleOCR/DetectText",methods=["POST"]) >> %filename%
echo def PaddleOCR(): >> %filename%
echo if(request.data==""): >> %filename%
echo return APIResult.Error("request data is null") >> %filename%
echo data=json.loads(request.data) >> %filename%
echo imgbyte=base64.b64decode(data) >> %filename%
echo image=io.BytesIO(imgbyte) >> %filename%
echo temp= Image.open(image) >> %filename%
echo img=np.array(temp)[:,:,:3] >> %filename%
echo info= ppocr.ocr(img) >> %filename%
echo result={"TextBlocks":[]} >> %filename%
echo for textblocks in info: >> %filename%
echo textBlock={"Points":[],"Text":""} >> %filename%
echo for tk in textblocks[0]: >> %filename%
echo point={"x":str(tk[0]),"y":str(tk[1])} >> %filename%
echo textBlock["Points"].append(point) >> %filename%
echo textBlock["Text"]=textblocks[1][0] >> %filename%
echo result["TextBlocks"].append(textBlock) >> %filename%
echo print(result) >> %filename%
echo return jsonify(result) >> %filename%
echo
echo def main(): >> %filename%
echo global ppocr; >> %filename%
echo ppocr=paddleocr.PaddleOCR(use_gpu=False); >> %filename%
echo app.run(debug=True,host="0.0.0.0",port=%port%) >> %filename%
echo if __name__=="__main__": >> %filename%
echo main(); >> %filename%
call %filename%
在批处理执行如果遇到提示 core_avx,找不到指定的模块,这是应为vc++2017运行环境没有安装,你可以加入后面的QQ群,获取补丁文件,把【vc2017库文件】文件内的所有文件复制到Python安装目录下的【\Lib\site-packages\paddle\libs】的文件夹既可。


上述OCR的服务启动以后,小伙伴是不是非常想试试看看OCR识别的结果呢?
接下来介绍如何使用API,把下的文本内容另存为一个ClientPython.py文件,并把你想识别文字的图片,放在image文件夹下,双击运行保存的ClientPython.py文件,就可以看到识别的结果啦!
import requests
import os
import base64
def main():
imagepath=os.path.abspath('.')+"\\image\\"
imagefiles=os.listdir(imagepath)
for image in imagefiles:
imagefile=imagepath+image
with open(imagefile,"rb") as fs:
imagebase64=str(base64.b64encode(fs.read()),"utf-8")
headers = { 'Content-Type': 'application/json'}
response = requests.post('http://127.0.0.1:5000/PaddleOCR/DetectText', headers=headers, json=imagebase64)
print(response.content)
if __name__=="__main__":
main();
小伙伴们学会了吗?快来动手试试吧!
这里,再介绍一下C#如何调用WebAPI,看看C#如何使用,创建控制台程序,分别复制一下代码,同样在运行目录下准备好你的image文件夹。
public class WebAPIClient
{
static string url = "http://localhost:5000/PaddleOCR/DetectText";
public static string DetectText(string base64)
{
RestClient client = new RestClient(url);
RestRequest req = new RestRequest() { Method = Method.Post };
req.AddBody(base64);
req.AddHeader("Content-Type", "application/json");
var resp = client.ExecuteAsync(req);
if (resp.Result.StatusCode != HttpStatusCode.OK)
{
throw new Exception("HttpError:" + resp.Result.StatusDescription);
}
return resp.Result.Content;
}
}
string[] extensions = new string[] { ".jpg", ".bmp", ".jpeg", ".png", ".tif", ".tiff" };
string imageroot = Environment.CurrentDirectory + "//image";
if (!Directory.Exists(imageroot)) Directory.CreateDirectory(imageroot);
DirectoryInfo directoryInfo = new DirectoryInfo(imageroot);
var files = directoryInfo.GetFiles("*.*");
DateTime dt1;
DateTime dt2;
foreach (var file in files)
{
if (!extensions.Contains(file.Extension.ToLower())) continue;
byte[] imagebyte = File.ReadAllBytes(file.FullName);
string base64 = Convert.ToBase64String(imagebyte);
dt1 = DateTime.Now;
var s = WebAPIClient.DetectText(base64);
dt2 = DateTime.Now;
Console.WriteLine((dt2-dt1).TotalMilliseconds);
Console.WriteLine(s);
欢迎关注公众号了解更多内容。
更多代码前往开源项目地址了解:PaddleOCRWebAPI: PaddleOCRWebAPI是 PaddleOCRSharp的web应用。 项目使用VS2022及以上版本编译,使用net6.0框架。模型默认带有一个轻量版中英文V3模型库。 (gitee.com)



如何在Windows上一键部署PaddleOCR的WebAPI服务的更多相关文章
- 如何在windows上安装部署设置SVN服务器
1 一.准备工作 1.SVN服务器:解压缩包,可以从官方网站下载最新版本. 2.SVN客户端:TortoiseSVN,即常说的小乌龟,是一个客户端程序,用来与服务器端通讯. 2 二.安装服务器和客 ...
- (转)如何在Windows上安装多个MySQL
原文:http://www.blogjava.net/hongjunli/archive/2009/03/01/257216.html 如何在Windows上安装多个MySQL 本文以免安装版的mys ...
- Redis简介以及如何在Windows上安装Redis
Redis简介 Redis是一个速度非常快的非关系型内存数据库. Redis提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erla ...
- 如何在Windows上搭建Android开发环境
Android开发越来越火,许多小伙伴们纷纷学习Android开发,学习Android开发首要任务是搭建Android开发环境,由于大家 主要实在Windows 上开发Android,下面就详细给大家 ...
- 如何在Windows上挂载Linux系统分区
NFS普遍用于unix之间共享,windows默认是不支持这种文件系统的.如果我们要用windows访问NFS的话,而windows系统自身又不支持这种文件系统,那么我们该怎么办? 别急,小编这就手把 ...
- Zabbix agent 在windows上安装部署
Zabbix agent 在windows上安装部署 1.下载与解压 地址: http://www.zabbix.com/downloads/2.4.4/zabbix_agents_2.4.4.win ...
- 在windows 上编译部署Rap2
在windows 上编译部署Rap2 引言 安装需要的环境 安装后端站点 创建数据库 在全局安装pm2 和 typescript 配置mysql,redis 数据库链接配置 初始化 编译 初始化数据库 ...
- 如何在windows上把你的项目提交到github(转载)
(1)如何在windows上把你的项目提交到githubhttp://michaelye1988.iteye.com/blog/1637951 (2)github错误提示:fatal:remote o ...
- Primecoin在windows上的部署和启动服务
Primecoin在windows上的部署和启动服务: 一.从官方获得Primecoin的windows版安装包: 二.一路像安装客户端一样的安装: 三.安装成功后它会自动弹出客户端运行,同步数据, ...
- MongoDb进阶实践之二 如何在Windows上配置MongoDB
一.引言 上一篇文章,我介绍了如何在Linux系统上安装和配置MongoDB,其实都不是很难,不需要安装和编译,省去了Make && Make Install 命 ...
随机推荐
- 深入解析decltype和decltype(auto)
decltype关键字是C++11新标准引入的关键字,它和关键字auto的功能类似,也可以自动推导出给定表达式的类型,但它和auto的语法有些不同,auto推导的表达式放在"="的 ...
- CentOS 6.5 LAMP分主机平台的搭建及测试
CentOS 6.5 LAMP分主机平台的搭建及测试 看似非常之完备,转来抽空测试学习 原文地址:http://www.it165.net/os/html/201403/7595.html 前言 ...
- 抓包整理————tcpdump过滤器[七]
前言 简单介绍一下tcpdump 正文 这里可以tcpdump -D 可以列出各个网卡的信息: 默认抓取eth0,也就是第一个: 还有下面的选项: -D 举例所有的网卡设备 -i 选择网卡设备 -c ...
- c# Barrier 线程回调
前言 假如现在有一个这样的需求,我一堆小黄人生产小黄丹,而大黄人要一直吃小黄丹. 如果是这样的话,想到就是一堆小黄人作为一个多线程,然后一直制造,然后另外一个大黄人一直检索是否有小黄丹,有就吃掉. 但 ...
- js中this对象的理解
一.定义 函数的 this 关键字在 JavaScript 中的表现略有不同,此外,在严格模式和非严格模式之间也会有一些差别 在绝大多数情况下,函数的调用方式决定了 this 的值(运行时绑定) th ...
- 力扣603(MySQL)-连续空余座位(简单)
题目: 几个朋友来到电影院的售票处,准备预约连续空余座位. 你能利用表 cinema ,帮他们写一个查询语句,获取所有空余座位,并将它们按照 seat_id 排序后返回吗? 对于如上样例,你的查询语句 ...
- 力扣48(java)-旋转图像(中等)
题目: 给定一个 n × n 的二维矩阵 matrix 表示一个图像.请你将图像顺时针旋转 90 度. 你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵.请不要 使用另一个矩阵来旋转图像 ...
- 力扣566(java)-重塑矩阵(简单)
题目: 在 MATLAB 中,有一个非常有用的函数 reshape ,它可以将一个 m x n 矩阵重塑为另一个大小不同(r x c)的新矩阵,但保留其原始数据. 给你一个由二维数组 mat 表示的 ...
- 解析 RocketMQ 业务消息--“顺序消息”
简介: 本篇将继续业务消息集成的场景,从功能原理.应用案例.最佳实践以及实战等角度介绍 RocketMQ 的顺序消息功能. 作者:绍舒 引言 Apache RocketMQ 诞生至今,历经十余年大 ...
- All in one:如何搭建端到端可观测体系
简介:一文看懂可观测! 作者:西杰 & 白玙 可观测的前生今世 系统的可观测与故障可分析作为系统运维中重要的衡量标准,随着系统在架构.资源单位.资源获取方式.通信方式演进过程,遇到了巨大挑战 ...