【发布时间】:2020-06-25 00:48:00
【问题描述】:
我目前正在使用 Detectron2 来检测视频中的人物,我一直在尝试运行以下代码来读取视频文件,逐帧进行预测并使用处理后的帧录制视频,但我是得到一个空的视频文件。我为此创建的环境位于 Colaboratory 中,并具有以下版本(python 3.6、opencv 4.2.30)。 我是新手,但如果有人能给我一个想法,我将不胜感激
这是代码
#!/usr/bin/env python3
# -- coding: utf-8 --
import detectron2
from detectron2.utils.logger import setup_logger
setup_logger()
# import some common libraries
import numpy as np
import cv2
# import some common detectron2 utilities
from detectron2 import model_zoo
from detectron2.engine import DefaultPredictor
from detectron2.config import get_cfg
from detectron2.utils.visualizer import Visualizer
from detectron2.data import MetadataCatalog
import time
cap = cv2.VideoCapture('piloto legger 1.mp4')
hasFrame, frame = cap.read()
FPS = cap.get(cv2.CAP_PROP_FPS)
frame_width = frame.shape[1]
frame_height = frame.shape[0]
video_writer = cv2.VideoWriter('out.mp4', cv2.VideoWriter_fourcc('m', 'p', '4', 'v'), FPS, (frame_width, frame_height))
while cv2.waitKey(1) < 0:
hasFrame, frame = cap.read()
if not hasFrame:
cv2.waitKey()
break
cfg = get_cfg()
cfg.merge_from_file(model_zoo.get_config_file("COCO-Keypoints/keypoint_rcnn_R_50_FPN_3x.yaml"))
cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.7 # set threshold for this model
cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url("COCO-Keypoints/keypoint_rcnn_R_50_FPN_3x.yaml")
predictor = DefaultPredictor(cfg)
outputs = predictor(frame)
v = Visualizer(frame[:,:,::-1], MetadataCatalog.get(cfg.DATASETS.TRAIN[0]), scale=1.2)
v = v.draw_instance_predictions(outputs["instances"].to("cpu"))
imagen = (v.get_image()[:, :, ::-1])
cv2.imwrite('POSE detectron2.png', imagen)
video_writer.write(imagen)
cap.release()
video_writer.release()
cv2.destroyAllWindows()
【问题讨论】:
-
你对这段代码很讲究吗?或者您只需要使用detectron2 处理视频。 Detectron2 附带了一些代码来获取您要求的视频。
-
我看过,我尝试在视频上运行演示,但我得到一个空文件。我现在使用的代码是我在 Detectron2 存储库中的函数中看到的代码的一个版本
-
您能否尝试在处理帧时将其可视化并确保将重定向数据写入视频?
-
已经做到了。在编写处理过的帧之前,我打印它们(使用这条线 cv2.imwrite('POSE detectron2.png', imagen) 并且数据很好。
标签: python opencv google-colaboratory