python用fastapi 制作简易web服务做ocr接口

 

 python用fastapi 制作简易web服务做ocr接口_第1张图片

 

 python用fastapi 制作简易web服务做ocr接口_第2张图片

 

python用fastapi 制作简易web服务做ocr接口_第3张图片

 

WebMain.py  

import uvicorn

if __name__ == '__main__':
    uvicorn.run(app='Web:app', host='0.0.0.0', port=8000, reload=True)

Web.py

from imghdr import what
import subprocess
import cv2
import numpy as np
from fastapi import FastAPI, File, UploadFile

app = FastAPI()


@app.get("/")
def info():
    return {"ok"}
# get请求


@app.post("/api/ocr")
async def create_upload_file(file: UploadFile = File(...)):
    # 读取字节流
    bytes_stream = await file.read()
    # 字节流转图片(转换失败为None,图片超过400K直接返回None不作处理)
    srcImg = bytesToImg(bytes_stream)
    # 判断上传是否为JPG图片
    b_isJPG = isJPG(srcImg)
    # 处理文件格式
    if b_isJPG is False:
        return {"success": 0, "msg": "上传文件过大或格式不正确!"}
    else:
        # 图片等比例缩放(定宽550)
        resize_Img = imgResize(srcImg)
        # 图片本地保存
        imgSave(resize_Img)
        # 图文识别(只负责识别出结果,解析放在端处理)
        res_obj = ocr()
        # 生成响应
        result = responseJson(res_obj)
        return result
# post请求


def ocr():
    res = subprocess.getoutput(
        r'./ocr_db_crnn ch_ppocr_mobile_v2.0_det_opt.nb  ch_ppocr_mobile_v2.0_rec_opt.nb  ch_ppocr_mobile_v2.0_cls_opt.nb  ./tmp.jpg  ppocr_keys_v1.txt')
    return res
# 图文识别


def responseJson(resJson):
    res = {"success": 1, "msg": "成功", "data": resJson}
    return res
# 生成响应体JSON


def isJPG(image):
    if image is None:  # 转换失败
        return False
    else:
        isimg = what(image)
        # 识别文件是否是jpg
        if isimg == "jpeg":
            return True
        else:
            return False
# 判断上传文件是否是JPG图片


def imgSave(image):
    cv2.imwrite('./tmp.jpg', image)
# 图片本地保存


def bytesToImg(byteStream):
    try:
        if len(byteStream) > (400*1024):  # 超过400K不作处理
            return None
        else:
            resImg = cv2.imdecode(np.frombuffer(
                byteStream, np.uint8), cv2.IMREAD_COLOR)
            return resImg
    except Exception:
        return None
# 字节流转图片


def imgResize(image):
    # 输入你想要resize的图像宽度。
    Width_size = 550
    # 获取原始图像宽高。
    height, width = image.shape[0], image.shape[1]
    # 等比例缩放尺度。
    scale = width/Width_size
    # 获得相应等比例的图像高度。
    Height_size = int(height/scale)
    # 缩放
    image_resize = cv2.resize(image, (Width_size, Height_size))
    return image_resize
# 图片等比例缩放

what 在win平台上可以用在linux上不行没做过多研究直接不做检查注释掉那个模块,有空再来研究

你可能感兴趣的:(ARMV8,R5S,fastapi,python)