如何在视频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?