很多小伙伴在使用OCR時都希望能采用API的方式調用,這樣就可以跨端跨平臺了。本文將介紹一種基于python的PaddleOCR識別WebAPI部署方案。喜歡的可以關注公眾號,獲取更多內容。
?一、 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
更多技術學習請關注公眾號【明月心技術學堂】或者加入QQ群了解。QQ群:318860399