文字识别-fastdeploy
地址
https://github.com/PaddlePaddle/FastDeploy/blob/develop/README_CN.md#fastdeploy-quick-start-python
可选择gpu or cpu 跑
代码
test
import time
import fastdeploy as fd
import cv2
res_options = fd.RuntimeOption()
res_options.set_cpu_thread_num(4)
det = fd.vision.ocr.DBDetector(
params_file=r'E:\Code\Python\fastdeploy\models\ch_PP-OCRv3_det_infer\inference.pdiparams',
model_file=r'E:\Code\Python\fastdeploy\models\ch_PP-OCRv3_det_infer\inference.pdmodel',
runtime_option=res_options)
cls = fd.vision.ocr.Classifier(
model_file=r'E:\Code\Python\fastdeploy\models\ch_ppocr_mobile_v2.0_cls_infer\inference.pdmodel',
params_file=r'E:\Code\Python\fastdeploy\models\ch_ppocr_mobile_v2.0_cls_infer\inference.pdiparams',
runtime_option=res_options
)
rec = fd.vision.ocr.Recognizer(
model_file=r'E:\Code\Python\fastdeploy\models\ch_PP-OCRv3_rec_infer\inference.pdmodel',
params_file=r'E:\Code\Python\fastdeploy\models\ch_PP-OCRv3_rec_infer\inference.pdiparams',
label_path=r'E:\Code\Python\fastdeploy\models\ppocr_keys_v1.txt',
runtime_option=res_options
)
t1 = time.time()
model = fd.vision.ocr.PPOCRv3(det_model=det, cls_model=cls, rec_model=rec)
# img_path = r'E:\Code\Python\fastdeploy\layout.jpg'
# img_path = r'E:\Code\Python\fastdeploy\a1.jpg'
img_path = r'E:\Code\Python\fastdeploy\down1.jpg'
img = cv2.imread(img_path)
res = model.predict(img)
t2 = time.time()
print(res)
print(type(res))
print(res.__dir__())
print(res.boxes)
print(res.text)
print("时间", t2 -t1)
flask_server
from flask import Flask, jsonify, request
import base64
import fastdeploy as fd
import cv2
app = Flask(__name__)
res_options = fd.RuntimeOption()
res_options.set_cpu_thread_num(1)
det = fd.vision.ocr.DBDetector(
params_file=r'E:\Code\Python\fastdeploy\models\ch_PP-OCRv3_det_infer\inference.pdiparams',
model_file=r'E:\Code\Python\fastdeploy\models\ch_PP-OCRv3_det_infer\inference.pdmodel',
runtime_option=res_options)
cls = fd.vision.ocr.Classifier(
model_file=r'E:\Code\Python\fastdeploy\models\ch_ppocr_mobile_v2.0_cls_infer\inference.pdmodel',
params_file=r'E:\Code\Python\fastdeploy\models\ch_ppocr_mobile_v2.0_cls_infer\inference.pdiparams',
runtime_option=res_options
)
rec = fd.vision.ocr.Recognizer(
model_file=r'E:\Code\Python\fastdeploy\models\ch_PP-OCRv3_rec_infer\inference.pdmodel',
params_file=r'E:\Code\Python\fastdeploy\models\ch_PP-OCRv3_rec_infer\inference.pdiparams',
label_path=r'E:\Code\Python\fastdeploy\models\ppocr_keys_v1.txt',
runtime_option=res_options
)
model = fd.vision.ocr.PPOCRv3(det_model=det, cls_model=cls, rec_model=rec)
@app.route('/fastdeploy_ocr', methods=['GET', 'POST'])
def fastdeploy_ocr():
dic = {}
if request.method == 'POST':
try:
json_data = request.get_json()
if 'image_data' in json_data:
image_data = json_data['image_data']
output_path = "output_image.jpg"
base64_to_image(image_data, output_path)
text_ls, boxes_ls = get_info(output_path)
dic['boxes_ls'] = repr(boxes_ls)
dic['text_ls'] = repr(text_ls)
except Exception as e:
error_message = str(e)
return jsonify({"error": error_message})
if dic:
dic['message'] = 'success'
return jsonify(dic)
else:
return jsonify({"message": "No data processed"})
# base64转图片
def base64_to_image(base64_data, output_path):
image_data = base64.b64decode(base64_data)
with open(output_path, "wb") as image_file:
image_file.write(image_data)
print('图片已保存为', output_path)
def get_info(img_path=r'E:\Code\Python\fastdeploy\layout.jpg'):
img = cv2.imread(img_path)
res = model.predict(img)
textLs, boxesLs = res.text, res.boxes
return textLs, boxesLs
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5555, debug=True)
访问服务测试
import time
import requests
import cv2, base64
url = 'http://127.0.0.1:5555//fastdeploy_ocr'
# url = 'http://43.139.184.232:3310/fastdeploy_ocr'
def image_to_base64(image_path):
import base64
with open(image_path, "rb") as image_file:
image_data = image_file.read()
base64_encoded = base64.b64encode(image_data).decode("utf-8")
return base64_encoded
# image_path = r'E:\Code\Python\fastdeploy\layout.jpg'
image_path = r'E:\Code\Python\fastdeploy\down1.jpg'
cc = image_to_base64(image_path)
dic = {'image_data': cc}
t1 = time.time()
res = requests.post(url, json=dic)
t2 = time.time()
print(res.json())
print(t2-t1)