Browse Source

[to #42322933] video detecor support output with timestamp

适配demoservice,增加视频时间戳输出,每一个结果对应一个时间戳
        Link: https://code.alibaba-inc.com/Ali-MaaS/MaaS-lib/codereview/10496879
master
leyuan.hjy yingda.chen 3 years ago
parent
commit
8b28b725ee
3 changed files with 19 additions and 4 deletions
  1. +6
    -2
      modelscope/models/cv/realtime_object_detection/realtime_video_detector.py
  2. +9
    -0
      modelscope/models/cv/realtime_object_detection/utils.py
  3. +4
    -2
      modelscope/pipelines/cv/realtime_video_object_detection_pipeline.py

+ 6
- 2
modelscope/models/cv/realtime_object_detection/realtime_video_detector.py View File

@@ -16,6 +16,7 @@ from modelscope.models.builder import MODELS
from modelscope.preprocessors import LoadImage from modelscope.preprocessors import LoadImage
from modelscope.utils.config import Config from modelscope.utils.config import Config
from modelscope.utils.constant import ModelFile, Tasks from modelscope.utils.constant import ModelFile, Tasks
from .utils import timestamp_format
from .yolox.data.data_augment import ValTransform from .yolox.data.data_augment import ValTransform
from .yolox.exp import get_exp_by_name from .yolox.exp import get_exp_by_name
from .yolox.utils import postprocess from .yolox.utils import postprocess
@@ -99,14 +100,17 @@ class RealtimeVideoDetector(TorchModel):
def inference_video(self, v_path): def inference_video(self, v_path):
outputs = [] outputs = []
desc = 'Detecting video: {}'.format(v_path) desc = 'Detecting video: {}'.format(v_path)
for frame, result in tqdm(
self.inference_video_iter(v_path), desc=desc):
for frame_idx, (frame, result) in enumerate(
tqdm(self.inference_video_iter(v_path), desc=desc)):
result = result + (timestamp_format(seconds=frame_idx
/ self.fps), )
outputs.append(result) outputs.append(result)


return outputs return outputs


def inference_video_iter(self, v_path): def inference_video_iter(self, v_path):
capture = cv2.VideoCapture(v_path) capture = cv2.VideoCapture(v_path)
self.fps = capture.get(cv2.CAP_PROP_FPS)
while capture.isOpened(): while capture.isOpened():
ret, frame = capture.read() ret, frame = capture.read()
if not ret: if not ret:


+ 9
- 0
modelscope/models/cv/realtime_object_detection/utils.py View File

@@ -0,0 +1,9 @@
# Copyright (c) Alibaba, Inc. and its affiliates.
import math


def timestamp_format(seconds):
m, s = divmod(seconds, 60)
h, m = divmod(m, 60)
time = '%02d:%02d:%06.3f' % (h, m, s)
return time

+ 4
- 2
modelscope/pipelines/cv/realtime_video_object_detection_pipeline.py View File

@@ -45,15 +45,17 @@ class RealtimeVideoObjectDetectionPipeline(Pipeline):
**kwargs) -> str: **kwargs) -> str:
forward_output = input['forward_output'] forward_output = input['forward_output']


scores, boxes, labels = [], [], []
scores, boxes, labels, timestamps = [], [], [], []
for result in forward_output: for result in forward_output:
box, score, label = result
box, score, label, timestamp = result
scores.append(score) scores.append(score)
boxes.append(box) boxes.append(box)
labels.append(label) labels.append(label)
timestamps.append(timestamp)


return { return {
OutputKeys.BOXES: boxes, OutputKeys.BOXES: boxes,
OutputKeys.SCORES: scores, OutputKeys.SCORES: scores,
OutputKeys.LABELS: labels, OutputKeys.LABELS: labels,
OutputKeys.TIMESTAMPS: timestamps,
} }

Loading…
Cancel
Save