02、利用paddleocr识别监控图像的时间

1 需求

根据摄像头抓拍图像中的时间,判断设备是否出现时差

2 安装paddle依赖

这里使用paddleocr进行识别,首先使用pip安装paddleocr依赖库

python -m pip install paddlepaddle paddleocr -i https://mirror.baidu.com/pypi/simple

3 写个测试类进行验证

在这里插入图片描述
在这里插入图片描述

from paddleocr import PaddleOCR
from PIL import Image

def get_result_list(img_path):
    # 模型路径下必须含有model和params文件,如果没有,现在可以自动下载了,不过是最简单的模型
    # use_gpu 如果paddle是GPU版本请设置为 True
    ocr = PaddleOCR(use_angle_cls=True, use_gpu=False)
    result_list = ocr.ocr(img_path, cls=True)
    return result_list


if __name__ == '__main__':
    img_path = r'./2.jpg'  # 这个是自己的图片,自行放置在代码目录下修改名称
    result_list = get_result_list(img_path)
    print(result_list)

    # save_img(img_path, result_list)

4 根据上面的返回值结果,进行接口开发

4.1 引入Flask,实现web接口

from logging.handlers import RotatingFileHandler
from flask import Flask, request, jsonify,make_response
from gevent import pywsgi

app = Flask(__name__)
# 全局变量
PROGRAM_NAME = 'ocr'
PROGRAM_VERSION = '1.0.0'
LOG_LEVEL = logging.INFO

@app.route('/ocr/hello',methods=['GET'])
def test():
    #获取参数name
    name = request.args.get('name')    
    print(name)
	#给用户响应,hello
    return 'hello ' + name

if __name__ == '__main__':
    here = os.path.dirname(os.path.abspath(__file__))
    os.chdir(here)
    if not os.path.isdir('logs'):
        os.mkdir('logs')
    # 日志初始化
    logfile = os.path.join(here, 'logs', '%s.log' % PROGRAM_NAME)
    log_handler = RotatingFileHandler(logfile, maxBytes=1*1024*1024*1024, backupCount=2)
    log_formatter = logging.Formatter('%(asctime)s - %(name)s [%(levelname)s] %(message)s')
    log_handler.setFormatter(log_formatter)
    log = logging.getLogger()
    log.setLevel(LOG_LEVEL)
    log.addHandler(log_handler)

    #--------------同步输出到控制台---------
    console_handler = logging.StreamHandler()
    console_fmt = "%(name)s-%(levelname)s-%(asctime)s- %(message)s"
    fmt1 = logging.Formatter(fmt=console_fmt)
    console_handler.setFormatter(fmt1)
    log.addHandler(console_handler)
    #--------------同步输出到控制台---------
   
    server = pywsgi.WSGIServer(('0.0.0.0', 8985), app)
    log.info(f"服务启动成功: {PROGRAM_NAME}")
    server.serve_forever()

启动脚本,访问 8985:/ocr/hello 测试

4.2 引入ocr,进行图片识别

from paddleocr import PaddleOCR
from PIL import Image

def get_result_list(img):
    # 模型路径下必须含有model和params文件,如果没有,现在可以自动下载了,不过是最简单的模型
    # use_gpu 如果paddle是GPU版本请设置为 True
    ocr = PaddleOCR(use_angle_cls=True, use_gpu=False)
    cropped_img_array = np.array(img)

    result_list = ocr.ocr(cropped_img_array, cls=True)
    return result_list

# 根据ocr获取图片中的文字
@app.route('/ocr/getTime',methods=['POST'])
def GetTimeByOcr():
    current_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    log.info("接收到请求时间是: " + str(current_time))

    # 检查请求是否包含文件
    if 'file' not in request.files:
        return jsonify({'error': 'No file part'}), 400
    
    file = request.files['file']

    # 检查文件是否为空
    if file.filename == '':
        return jsonify({'error': 'No selected file'}), 400

    # 检查文件类型是否是图像
    if not file.filename.endswith(('.jpg', '.jpeg', '.png', '.gif')):
        return jsonify({'error': 'Unsupported file format'}), 400       
    
    try:
        # 使用Pillow库打开图像
        img = Image.open(file)
        # 这里可以添加处理图像的代码,比如保存、修改等
        # ...

        result_list = get_result_list(img)

        timestamps = convert_to_timestamp(result_list)

        return jsonify({'message': 'Image uploaded and processed successfully','result':timestamps}), 200

    except Exception as e:
        return jsonify({'error': str(e)}), 500

启动脚本,访问接口测试:
在这里插入图片描述
在这里插入图片描述

5 编辑Dockerfile,打包成镜像,上线部署

完整代码包下载:https://download.csdn.net/download/qq_16089135/88418315

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云上凯歌

好活,当赏!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值