Обрезать обнаруженный объект из видеокадров - PullRequest
0 голосов
/ 09 июля 2020

У меня есть модель, которая обнаруживает и рисует ограничивающую рамку вокруг руки, и функцию, которая обрезает обнаруженный объект. Это работает, когда я передаю отдельные кадры, извлеченные ранее из видео, однако проблема с этим подходом заключается в том, что я получаю немного разные размеры ящиков для каждого, в то время как мне нужно, чтобы все ящики имели одинаковую ширину и высоту.

Я тогда пытался вызвать мою функцию для обрезки ограничивающих рамок внутри кода для извлечения кадров из видео. Я отлично поработал, у меня одинаковый размер ограничительной рамки для каждого кадра, извлеченного из видео, но как только он достигает второго видео, я получаю сообщение об ошибке:

File "C: \ Users \ Public \ handdetection.py", строка 49, в draw_box_on_image1 return image_np [p1 [1]: p2 [1], p1 [0]: p2 [0]]

TypeError: объект 'NoneType' не подлежит подписке

Здесь это код для извлечения

def draw_box_on_image1(num_hands_detect, score_thresh, scores, boxes, im_width, im_height, image_np):
for i in range(num_hands_detect):
    if (scores[i] > score_thresh):
        (left, right, top, bottom) = (boxes[i][1] * im_width, boxes[i][3] * im_width,
                                      boxes[i][0] * im_height, boxes[i][2] * im_height)
        p1 = (int(left-100), int(top-100))
        p2 = (int(right+100), int(bottom+100))
        return cv2.rectangle(image_np, p1,p2, (77, 255, 9), 3, 1)
        return image_np[p1[1]:p2[1], p1[0]:p2[0]]


for i in tqdm(range(train.shape[0])):
count = 0
videoFile = train['video_name'][i] # i is each row (each video) from column video name in dataframe train


cap = cv2.VideoCapture(videoFile)# capturing the video from the given path
frameRate = cap.get(cv2.CAP_PROP_FPS) #frame rate
x=1
while(cap.isOpened()):
    frameId = cap.get(10) #current frame number
    ret, frame = cap.read()
    image_np=frame
    image_np=draw_box_on_image1(num_hands_detect, args.score_thresh,scores, boxes, im_width, im_height,
                             image_np)
    if (ret != True):
        break
    if (frameId % math.floor(frameRate) == 0):
        # storing the frames in a new folder named train_1
        #filename ='train_1/' + videoFile.split('/')[1].split(' ')[0] +"_frame%d.jpg" % count;count+=1
        filename ='train_1/' + videoFile +"_frame%d.jpg" % count;count+=1
        cv2.imwrite(filename, image_np)
cap.release()

Вы можете мне помочь с этим, ребята?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...