You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何保留ANPR的OCR识别值并实现标签持续显示?

自动车牌识别(ANPR)标签持续显示问题解决

问题代码片段

if (num_area>600 and frame_counter%10==0):
    print("Numberplate Detected and OCR is performing")
    cropped_image=image1[y1:y2,x1:x2]
    num1, data=paddle_ocr(cropped_image)#running paddle_ocr
    label=num1
    if not cropped_image is None:
        filename = str(datetime.now())
        fn = filename.replace(" ","")
        fn = fn.replace(":","")
        fn = fn.replace(".","")
        fn = fn.replace("-","")
        img_name = os.path.join(output_directory+fn+".jpg")
        cv2.imwrite(img_name, cropped_image)

    # Add label
    cv2.putText(image, label, (int(x11), int(y11) - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 2)

问题描述

这段代码在while循环内运行,num1存储OCR识别出的车牌值,但作为标签显示时仅能出现1/10秒。需求是:未检测到车牌时标签为空,检测到后持续显示该值,直到识别到新的车牌更新num1。此前尝试将cv2.putText移到循环外出现"label未定义"错误,复制num1到其他变量也未解决问题。

解决步骤

  1. 在while循环外初始化持久化标签变量
    定义一个在整个循环周期内都不会被重置的变量,初始值为空:

    current_label = ""
    
  2. 仅在成功识别时更新标签
    在OCR检测的逻辑块里,只有当num1有效时才更新current_label(可根据你的OCR返回值调整判断条件,比如判断num1是否为空字符串/None):

    if (num_area>600 and frame_counter%10==0):
        print("Numberplate Detected and OCR is performing")
        cropped_image=image1[y1:y2,x1:x2]
        num1, data=paddle_ocr(cropped_image)
        # 仅当识别到有效车牌时更新标签
        if num1:
            current_label = num1
        # 保存裁剪图片的代码保持不变...
    
  3. 每次循环都绘制标签
    将cv2.putText移到循环的末尾,确保每帧画面都会绘制当前的current_label:

    # 每帧都绘制持久化的标签
    cv2.putText(image, current_label, (int(x11), int(y11) - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 2)
    

原理说明

  • 循环外初始化的current_label会在整个循环过程中保留值,不会随每次循环迭代重置
  • 只有当OCR识别到新的有效车牌时才更新它,否则保持之前的内容
  • 每帧都执行绘制操作,所以标签会持续显示在画面上,直到下一次识别到新车牌更新值

内容的提问来源于stack exchange,提问作者Yadu S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 11:29:51