如何在Windows上一键部署PaddleOCR的WebAPI服务

PaddleOCR旨在打造一套丰富、领先、且实用的OCR工具库,助力开发者训练出更好的模型,并应用落地。官方开源项目地址:https://github.com/PaddlePaddle/PaddleOCR

一定会有小伙伴们看完不知道如何部署与应用,怎么才能融入到自己的产品或项目中去。PaddleOCR是开源、免费、可离线部署的OCR。

本文将介绍如何在windows平台上,自动化部署webAPI,并给出示例如何使用。

   第一步,要安装Python环境。下载地址:https://www.python.org/downloads/

建议选择安装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 pippip3 install opencv-python==4.5.5.64
echo  开始安装PaddleOCR
pip3 install  paddleocrecho 安装PaddleOCR的依赖预测库
pip3 install paddlepaddle
echo 安装Flask
pip3 install Flask
echo 安装DateTime
pip3 install DateTimeset 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】的文件夹既可。

339102360acb1d50f4f72953614244eb.png

421564617d9db3664693d019134d5620.png

上述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+imagewith  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);
}Console.ReadKey();

欢迎关注公众号了解更多内容。

更多代码前往开源项目地址了解:https://gitee.com/raoyutian/PaddleOCRWebAPI

125715e5d6840b3abff20660239f0ae9.jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/282469.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微软为 Visual Studio 扩展添加对 Arm64 的支持

微软在 6 月份推出了支持 Arm64 架构的 Visual Studio,这是第一个原生支持在基于 Arm 的处理器上构建和调试 Arm64 应用程序的 Visual Studio 版本。近日,他们宣布为 Visual Studio 扩展也添加了对 Arm64 的支持,因此开发者可在 Arm64 Visual…

WIN10 查看已经连接的wifi的密码

命令行: 1. 显示以前连接过的wifi2. 将wifi配置存入文件中3. 查看刚刚保存的wifi配置的文件这样,我们就可以看到连接的wifi名称和wifi密码了.

微软与 Canonical 合作,将 systemd 引入 WSL

微软和 Canonical 联合宣布,systemd 现在可以在 Windows Subsystem for Linux(WSL2)中运行了,此举可以让用户在 Windows 设备上获得更加全面的 Linux 体验。systemd 的作者 Lennart Poettering 在 7 月份离开红帽并加入了微软&…

.NET 反向代理-YARP 根据域名转发

编者:fastgithub 就是基于YARP使用域名做转发逻辑的。 前段时间发布过一个关于 YARP 的简单介绍,感兴趣的小伙伴恭请移步看看 .NET 反向代理-YARP 作为反向代理,必不可少的当然是根据域名代理转发啦,毫无疑问,YARP…

第一个python小游戏

guess int(input("猜一猜宝宝心目中的数字是多少:")) secret 8 while guess !secret:guess int(input("哎呀猜错了,重新猜一猜宝宝心目中的数字是多少:"))if guess secret:print("你真厉害,居然猜对了")print("哼,猜对了也不给你奖励&q…

理论实践:循序渐进理解AWR细致入微分析性能报告

1. AWR 概述 Automatic Workload Repository(AWR) 是10g引入的一个重要组件。在里面存贮着近期一段时间内(默认是7天)数据库活动状态的详细信息。 AWR 报告是对 AWR 视图进行查询而得到的一份自动生成的报告。可以通过下面的脚本手工得到一份 AWR 报告。…

mysql sql语句书写之面试部分

要求一 :查询时,将用户的手机号码(比如1331234567)显示为133***4567 这是在交流群里看到别人发的一个面试题,我本人非常反感直接在查询时进行处理数据的,查询出来再处理不好吗,但是面试题要求是这样. 这里,简单的写了两个表关联查询,然后把手机号码进行处理显示出来select a.ui…

Redis --数据类型 [1]

一 string 类型 (最简单常用的类型) string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。二 Hash类型(哈希) Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。三 List(列…

KestrelServer详解[3]: 自定义一个迷你版的KestrelServer

和所有的服务器一样,KestrelServer最终需要解决的是网络传输的问题。在《KestrelServer详解[2]: 网络连接是如何创建的?》,我们介绍了KestrelServer如何利用连接接听器的建立网络连接,并再次基础上演示了如何直接利用建立的连接接…

c# 文件下载

这样的下载方式 减少服务器的压力, 还有一种省懒劲的方式:后端在iis上配置一个虚拟目录,然后让前端自己拼url地址下载, 这个东西是给后期其他工作人员埋坑,哈哈。 本帖原文转自与 农码一生转载于:https://www.cnbl…

Redis -- 基础操作 [2]

一 获取redis当前数据库符合条件键名 [keys pattern]二 设置string形式key-value [set key value]三 获取存储在指定 key 中字符串的子字符串 [GETRANGE KEY start end]四 删除指定键值对 [del key]五 为给定key设置过期时间 [Expire KEY SECONDS]注: Expireat KEY TIMESTAMP 同…

Centos7作为VNCserver,本地使用VNCViewer连接

1.概念 VNC是一个远程连接工具 VNC is used to display an X windows session running on another computer. Unlike a remote X connection, the xserver is running on the remote computer, not on your local workstation. Your workstation ( Linux or Windows ) is only …

在URL中实现简易的WebAPI验签

本文主要介绍一种与微信公众平台对接方式类似的,为 AspNetCore 提供的一种简易的 WebAPI 签名验证中间件。本文相关源码和案例已开源,地址:https://github.com/sangyuxiaowu/SignAuthorization原理说明简易的 API url 签名验证中间件&#xf…

Redis -- Hash(哈希) [3]

Redis Hash 是一个string类型的field和value的 映射表 ,hash特别适合用于存储对象。 注 : Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。 比如这样:注:在此,首先推荐一款redis可视化工具 https://redisdesktop.com/download , 是非常…

HBuilder 打包流程

1.运行HBuilder---百度搜索HBuilder,官网下载安装包,解压,运行HBuilder.exe。注册账号,并登陆 2.新建app---在左边右键,选择新建APP,或者,点击中间的新建app 3.在弹出的窗口,填入应用…

Python3——字典

Python 字典(Dictionary) 字典是另一种可变容器模型,且可存储任意类型对象。 字典的每个键值(key>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 定义字典 d {} d {key1 : value1, key2 : value2 } d di…

科技以换皮为本:路遥工具箱 V4 版本发布

作为定位“开发辅助”的工具,我也一直在想如何让工具更有效率。是更快的打开速度还是更丰富的功能?路遥工具箱 V3 版本的界面布局是偏 BS 后台系统的风格:可折叠的树形菜单用来拓宽用户的操作区域,多标签的功能布局让软件保持整洁…

myisam数据表根据frm文件恢复数据表

有时,我们重装mysql时,可能忘记备份数据了, 只留下了之前的mysql下面的data文件夹里的数据, 这时我们应该如何去恢复数据表呢 如果直接将原来的data目录导进现在的mysql,肯定是不行的,其实很简单 我们常用的数据表结构有myisam和innodb,这两种数据表恢复数据的方式是不一样的,这…

本文主要总结关于mysql的优化(将会持续更新)

2019独角兽企业重金招聘Python工程师标准>>> ON DUPLICATE KEY UPDATE 事件背景 在阅读公司原来代码的过程中,我发现了这样一段代码: $sql "INSERT INTO {$table} ({$fields}) VALUES " . $values; if (!empty($onDuplicate)) {$sql . ON DU…