У меня есть модель, которая обнаруживает и рисует ограничивающую рамку вокруг руки, и функцию, которая обрезает обнаруженный объект. Это работает, когда я передаю отдельные кадры, извлеченные ранее из видео, однако проблема с этим подходом заключается в том, что я получаю немного разные размеры ящиков для каждого, в то время как мне нужно, чтобы все ящики имели одинаковую ширину и высоту.
Я тогда пытался вызвать мою функцию для обрезки ограничивающих рамок внутри кода для извлечения кадров из видео. Я отлично поработал, у меня одинаковый размер ограничительной рамки для каждого кадра, извлеченного из видео, но как только он достигает второго видео, я получаю сообщение об ошибке:
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()
Вы можете мне помочь с этим, ребята?