很多小伙伴在使用OCR时都希望能过采用API的方式调用,这样就可以跨端跨平台了。本文将介绍一种基于python的PaddleOCR识方案。喜欢的可以关注公众号,获取更多内容。

一、 Linux环境下部署
1.环境要求
操作系统:CenterOS7;
主要软件环境:python3.9X64、opencv4.5.5、PaddleOCR2.5、paddlepaddle2.2.1。python运行环境建议3.6-3.9
1. 环境安装
1.1 安装python3.9x64
运行以下命令,进行python3.9版本的安装

   wget  https://www.python.org/ftp/python/3.9.10/Python-3.9.10.tgz&&
yum install -y gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel&&
mkdir /usr/local/software&&
mkdir /usr/local/software/tars&&
mkdir /usr/local/software/python&&
tar -zxvf Python-3.9.10.tgz -C /usr/local/software/tars/&&
mv /usr/local/software/tars/Python-3.9.10 /usr/local/software/python&&
cd /usr/local/software/python/Python-3.9.10&&
# 指定安装目录为/usr/local/software/python/
./configure --prefix=/usr/local/software/python/&&
make&&
make install

如果提示没有【wget】命令,请准备【wget】的安装。
修改环境变量:

vi /etc/profile

在末尾添加如下内容:

#python
PATH=/usr/local/software/python/bin:$PATH

保存后执行

source /etc/profile

修改python的链接指向,用于修改默认的python命令版本

mv /usr/bin/python /usr/bin/python.bak
ln -s /usr/local/software/python/bin/python3 /usr/bin/python

因为yum和firewall都依赖python,所以更改会导致它们不可用,需要修改配置。
编辑yum文件:

vi /usr/bin/yum

将第一行”#!/usr/bin/python” 改为 “#!/usr/bin/python2.7”即可。

编辑urlgrabber-ext-down文件:

vi /usr/libexec/urlgrabber-ext-down

将第一行”#!/usr/bin/python” 改为 “#!/usr/bin/python2.7”即可。
验证是否修改成功 执行 :

python -V

至此,python3.9安装成功。

1.2 安装opencv4.5.5

pip3 install opencv-python==4.5.5.64
pip3 install opencv-python-headless

1.3 安装PaddleOCR

pip3 install  paddleocr

安装PaddleOCR的依赖预测库:

pip3 install paddlepaddle

1.4 安装其他依赖

pip3 install Flask
pip3 install DateTime

1.5 安装libstdc++.so.6.0
下载安装libstdc++.so.6.0依赖库
然后上传到linux任意目录下,执行以下命令:

cp libstdc++.so.6.0.26 /usr/lib64/
cd /usr/lib64/
rm -rf libstdc++.so.6
ln -s libstdc++.so.6.0.26 libstdc++.so.6

至此基本环境搭建完成,接下来即可搭建WebAPI项目了。

用于定义WebAPI的IP地址和端口,可根据实际情况部署修改。

请求方式:POST
url地址:http://ip:port//WebAPI/PaddleOCR

数据格式:json

把下面代码另存为PaddleOCRWebAPI.py文件,并上传到linux系统,

import io
from pickle import DICT
import paddleocr
import json
import base64
import DateTime
from flask import Flask, request,jsonify
import numpy as np
from PIL import Image
app=Flask(__name__)
app.config['JSON_AS_ASCII']=False
@app.route("/WebAPI/PaddleOCR",methods=["POST"])
def PaddleOCR():
if(request.data==""):
return APIResult.Error("request data is null")
data=json.loads(request.data)
imgbase64=data["image"];
imgbyte=base64.b64decode(imgbase64)
image=io.BytesIO(imgbyte)
temp= Image.open(image)
img=np.array(temp)[:,:,:3]
info= ppocr.ocr(img)
result={"TextBlocks":[]}
for textblocks in info:
textBlock={"Points":[],"Text":""}
for tk in textblocks[0]:
point={"x":str(tk[0]),"y":str(tk[1])}
textBlock["Points"].append(point)
textBlock["Text"]=textblocks[1][0]
result["TextBlocks"].append(textBlock)
print(result)
return jsonify(result) def main():
global ppocr;
ppocr=paddleocr.PaddleOCR(use_gpu=False);
app.run(debug=True,host="0.0.0.0",port=80)
if __name__=="__main__":
main();

启动服务:

python PaddleOCRWebAPI.py

windows下部署参考PaddleOCR在 windows下的webAPI部署方案 - 明月心技术学堂 - 博客园 (cnblogs.com)

更多技术学习请关注公众号【明月心技术学堂】或者加入QQ群了解。QQ群:318860399

PaddleOCR在 Linux下的webAPI部署方案的更多相关文章

  1. 莱特币ltc在linux下的多种挖矿方案详解

    莱特币ltc在linux下的多种挖矿方案详解 4.0.1 Nvidia显卡Linux驱动Nvidia全部驱动:http://www.nvidia.cn/Download/index.aspx?lang ...

  2. 在linux下用tomcat部署java web项目的过程与注意事项

    在linux下用tomcat部署java web项目的过程与注意事项 一.安装JDK 到http://www.oracle.com/technetwork/java/javase/downloads/ ...

  3. linux下实现自动部署tomcat的脚本

    linux下实现自动部署tomcat的脚本 由于经常部署war到tomccat上,经常有一些重复的工作要做:停服务.备份war包.上传新的war包.启动服务.索性就写了一个自动部署的脚本. 脚本如下a ...

  4. Vsftp的PASV mode(被动模式传送)和Port模式及 Linux下VsFTP配置全方案

    什么叫做PASV mode(被动模式传送)?他是如何工作的? FTP的连接一般是有两个连接的,一个是客户程和服务器传输命令的,另一个是数据传送的连接.FTP服务程序一般会支持两种不同的模式,一种是Po ...

  5. Linux下Tomcat同时部署两个工程然而只有一个能访问问题

    Linux下Tomcat同时部署两个工程然而只有一个能访问问题 问题: Linux下单个部署到Tomcat下的时候都正常,两个一起部署,只有一个能访问: 解决方案: 由于采用#./shutdown.s ...

  6. 在linux下用tomcat部署java web项目的过程与注意事项(转)

    在linux下用tomcat部署java web项目的过程与注意事项一.安装JDK到http://www.oracle.com/technetwork/java/javase/downloads/in ...

  7. Linux下Apache服务部署静态网站------网站服务程序

    文章链接(我的CSDN博客): Linux下Apache服务部署静态网站------网站服务程序

  8. Linux下使用JDK11部署Nacos启动报错:Could not find or load main class

    Linux下使用JDK11部署Nacos 错误日志 /nacos/jdk-11.0.12/bin/java -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize ...

  9. .NET5都来了,你还不知道怎么部署到linux?最全部署方案,总有一款适合你

    随着2020进入4季度,.NET5正式版也已经与大家见面了.不过,尽管 .NET Core发布已经有四五年的时间,但到目前为止,依旧有很多.NET开发者在坚守者.NET4,原因不尽相同,但最大的问题可 ...

  10. 如何在Linux下使用Tomcat部署Web应用(图文)

    学习Java必不可少的视同Tomcat,但是如果不会使用tomcat部署项目,那也是白扯,在这里教大家如果在Linux系统下视同Tomcat部署Web应用.   工具/原料   Apache-tomc ...

随机推荐

  1. k8s 深入篇———— k8s 的pod[五]

    前言 简单整理一下pod的相关知识. 正文 为什么我们需要pod. 前面我们知道了k8s一个最重要的作用是解决容器的编排功能,那么为什么有一个pod的东西. 这就是实际中遇到的问题. 那就是容器和容器 ...

  2. redis 简单整理——bitmaps[十二]

    前言 简单介绍一下bitmaps这个东西. 正文 我们都知道bitmaps 翻译过来就是二进制. 那么二进制可以存一些什么呢? 图片.视频,还可也存些什么呢? 现代计算机用二进制(位)作为信息的基础单 ...

  3. 重新整理数据结构与算法(c#)——算法套路普利姆算法[二十九]

    前言 看一个题目: 这个问题就是求最小生成树,是图转换为树的一种方式. 最小生成树概念: 最小生成树简称MST. 1.n个顶点,一定有n-1条边 2.包含全部顶点. 3.图转换为最小生成树,权重之和最 ...

  4. Redis为什么是单线程还支持高并发

    Redis为什么设计成单线程模式因为redis是基于内存的读写操作,所以CPU不是性能瓶颈,而单线程更好实现,所以就设计成单线程模式 单线程模式省却了CPU上下文切换带来的开销问题,也不用去考虑各种锁 ...

  5. vue中 如何实现一个单文件组件

    前端开发人员只要了解过vue.js框架可能都知道单文件组件.vue.js中的单文件组件允许在一个文件中定义一个组件的所有内容.这是一个非常有用的解决方案,在浏览器网页中已经开始提倡这种机制.但是不幸的 ...

  6. c#程序员必学清单补充

    作为 C# 程序员,除了上述经典书籍和开源框架外,还需要掌握以下技术: 1. .NET Core 和 ASP.NET Core:了解并熟练掌握 .NET Core 和 ASP.NET Core 框架, ...

  7. PyQt 快速使用

    1.安装 PyQt:使用 pip 命令在终端或命令提示符中运行以下命令: pip install pyqt5 2.创建 PyQt 应用程序:导入 PyQt5 模块并创建一个 QApplication ...

  8. 力扣383(java&python)-赎金信(简单)

    题目: 给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成. 如果可以,返回 true :否则返回 false . m ...

  9. 第3章 python 爬虫抓包与数据解析

    第 3章 Python 爬虫抓包与数据解析 3.1 抓包进阶 目前,我们已经会使用 Chrome 浏览器自带的开发者工具来抓取访问网页的数据包,但是这种抓包方法有局限性,比如只能监听一个浏览器选项卡, ...

  10. Apache Flink 在汽车之家的应用与实践

    ​简介: 汽车之家如何基于 Flink 上线了 AutoStream 平台并持续打磨. 本文整理自汽车之家实时计算平台负责人邸星星在 Flink Forward Asia 2020 分享的议题< ...