如何解决如果对象出现在网络摄像头上超过 5 秒,则打印一条消息 - Opencv Python
我有以下代码,它考虑使用网络摄像头视频来检测帧中是否有狗或猫。如果一只猫在框架中超过 5 秒,我需要打印“猫在框架中超过 5 秒”。如何使用 Opencv PYTHON 使用以下代码实现此目的?
category_index = label_map_util.create_category_index_from_labelmap(PATH_TO_LABELS,use_display_name=True)
import numpy as np
while True:
# Read frame from camera
ret,image_np = cap.read()
# Expand dimensions since the model expects images to have shape: [1,None,3]
image_np_expanded = np.expand_dims(image_np,axis=0)
input_tensor = tf.convert_to_tensor(np.expand_dims(image_np,0),dtype=tf.float32)
detections,predictions_dict,shapes = detect_fn(input_tensor)
label_id_offset = 1
image_np_with_detections = image_np.copy()
viz_utils.visualize_Boxes_and_labels_on_image_array(
image_np_with_detections,detections['detection_Boxes'][0].numpy(),(detections['detection_classes'][0].numpy() + label_id_offset).astype(int),detections['detection_scores'][0].numpy(),category_index,use_normalized_coordinates=True,max_Boxes_to_draw=200,min_score_thresh=.30,agnostic_mode=False)
# display output
cv2.imshow('object detection',cv2.resize(image_np_with_detections,(800,600)))
if cv2.waitKey(25) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
解决方法
我会使用多对象跟踪器 (MOT) 为每个检测到的对象分配一个跟踪 ID。考虑查看 SORT algorithm by Alex Bewley。它易于实施且运行良好。基本上,您为算法提供每一帧的检测结果,并返回一个跟踪 ID。由于跟踪的每个项目都有一个唯一的 ID,因此您可以随着时间的推移进行跟踪。
参见github页面上的示例。对于您的项目,您将在 cap.read()
循环之外创建跟踪对象:
mot_tracker = Sort()
然后在每次推理之后,将您的检测结果提供给算法,并为每个跟踪对象获取唯一 ID,您可以根据时间或帧数进行测量:
track_bbs_ids = mot_tracker.update(detections)
请注意,检测格式是格式为 [[x1,y1,x2,y2,score],[x1,...]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。