文字识别-fastdeploy

发布时间 2023-08-30 22:26:21作者: __username

地址

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)