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到其他变量也未解决问题。
解决步骤
在while循环外初始化持久化标签变量
定义一个在整个循环周期内都不会被重置的变量,初始值为空:current_label = ""仅在成功识别时更新标签
在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 # 保存裁剪图片的代码保持不变...每次循环都绘制标签
将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
相关产品推荐
相关产品推荐

