如何在视频python中检测到对象(人)时获取时间

Posted

技术标签:

【中文标题】如何在视频python中检测到对象(人)时获取时间【英文标题】:How to get time when object (person) detected in video python 【发布时间】:2020-11-09 10:09:35 【问题描述】:

我即将使用 python 构建视频分析。我能够使用张量流检测视频中的人。 我可以检测出现在视频中的人并保存人像(保存检测到的对象)。但我无法得知此人出现在视频中的时间。我有这样的场景:

我有来自安全摄像头的 16 秒视频。 在第 5 秒,有人出现在视频中

所以它会打印 "在 00:00:05 检测到人员"

这是我的一些检测代码:

while(cap.isOpened()):
            ret, frame = cap.read()        
            frame_count += 1
            millis = cap.get(cv2.CAP_PROP_POS_MSEC)

            if not  ret:
                print("end of the video file...")
                break
            
            input_frame = frame

            # Expand dimensions since the model expects images to have shape: [1, None, None, 3]
            image_np_expanded = np.expand_dims(input_frame, axis=0)

            # Actual detection.
            (boxes, scores, classes, num) = sess.run(
                [detection_boxes, detection_scores, detection_classes, num_detections],
                feed_dict=image_tensor: image_np_expanded)

            # insert information text to video frame
            font = cv2.FONT_HERSHEY_SIMPLEX

            # Visualization of the results of a detection.        
            counter, csv_line, counting_mode = vis_util.visualize_boxes_and_labels_on_image_array(cap.get(1),
                                                                                                  input_frame,
                                                                                                  1,
                                                                                                  is_color_recognition_enabled,
                                                                                                  np.squeeze(boxes),
                                                                                                  np.squeeze(classes).astype(np.int32),
                                                                                                  np.squeeze(scores),
                                                                                                  category_index,
                                                                                                  targeted_objects=targeted_object,
                                                                                                  use_normalized_coordinates=True,
                                                                                                  line_thickness=4)
            if(len(counting_mode) == 0):
                cv2.putText(input_frame, "...", (10, 35), font, 0.8, (0,255,255),2,cv2.FONT_HERSHEY_SIMPLEX)                       
            else:
                counting_mode = " ".format(counting_mode, millis) 
                cv2.putText(input_frame, counting_mode, (10, 35), font, 0.8, (0,255,255),2,cv2.FONT_HERSHEY_SIMPLEX)
                
            cv2.imshow('object counting',input_frame)

            if cv2.waitKey(1) & 0xFF == ord('q'):
                    break

        cap.release()

我在谷歌上寻找,他们中的大多数人说使用cv2.CAP_PROP_POS_MSEC,但我很难使用它。它仅以毫秒为单位显示。

提前感谢您的帮助。

编辑

我要问的是如何获取视频中出现(检测到)人的时间。就像我的场景一样,在第 5 秒检测到人,因此它将打印“在 00:00:05 检测到的人”

【问题讨论】:

毫秒很容易转换为秒。这是milliseconds / 1000 嗨@CoderCharmander 谢谢你的回答,我的意思是如何获取该视频中出现或检测到人的时间。 if len(boxes)>0: print("Person detected at", millis/1000) 【参考方案1】:

如果您可以获取以毫秒为单位的时间戳,则可以使用 datetime.timedelta 来获取更易读的时间戳

from datetime import timedelta

my_milliseconds = [54321, 7562732, 1234, 24984, 349589]

for millisecs in my_milliseconds:
    timestamp = timedelta(milliseconds=millisecs)
    print(timestamp)

输出

0:00:54.321000
2:06:02.732000
0:00:01.234000
0:00:24.984000
0:05:49.589000

【讨论】:

以上是关于如何在视频python中检测到对象(人)时获取时间的主要内容,如果未能解决你的问题,请参考以下文章

如何通过浏览器从网络摄像头获取实时流视频详细信息到 python?

如何获取我网站上正在播放的视频的当前时间戳?

从 PHAsset 获取视频时如何检测视频是不是为横向/纵向?

TensorFlow对象检测API教程中获取边界框坐标

使用Python,Opencv检测AprilTag

如何提高 Blob 检测精度?