微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果对象出现在网络摄像头上超过 5 秒,则打印一条消息 - Opencv Python

如何解决如果对象出现在网络摄像头上超过 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,...]

的 bbox 和分数的 np 数组

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。