Ошибка типа: объект ‘NoneType’ не может быть подписан

#python #cv2

Вопрос:

Я пробовал код на colab, и это часть моего кода

     while True:
            ret, frame = cap.read()
            if ret:
                frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
                cls_idx = int(frames_label[frames_label['frame'] == i]['label'])
    
                if annot:
                    bb = np.array(annot.iloc[i-1, 2:].astype(int))
                else:
                     
                    bb = detector.detect(frame)[0, :4].numpy().astype(int)
                bb[:2] = np.maximum(0, bb[:2] - 5)
                bb[2:] = np.minimum(frame_size, bb[2:]   5) if bb[2:].any() != 0 else bb[2:]
 

Я также использую imshow() для отображения изображения на моем экране(его нет в приведенном выше коде из-за длины кода), сначала изображения могут отображаться правильно, но он остановится на определенном изображении и поднимет

 Type error: 'NoneType' object is not subscriptable at 

bb = detector.detect(frame)[0, :4].numpy().astype(int)
 

p.s. bb-это аббревиатура ограничивающего прямоугольника

Изображение Ошибки:

Изображение Ошибки

кто-нибудь может помочь, пожалуйста? Спасибо

Комментарии:

1. Из вашего кода кажется, что вы получаете кадры с веб-камеры, возможно, что либо само frame изображение не записывается веб-камерой, либо detector.detect() выводится None . Возможно, вам захочется проверить и то, и другое. Не могли бы вы связать код для detector ?

2. Код слишком длинный, чтобы добавлять комментарии, это ссылка на код, который я использую github.com/GajuuzZ/Human-Falling-Detect-Tracks/blob/master/…

3. Я не мог понять всего, что делает код, но, похоже, вы не имеете дела с возможностью detect быть None в коде. Вы обрабатываете detect , если это не None так, но если это так, оно возвращается в любом случае. Одним из решений было бы окружить bb = detector.detect(frame)[0, :4].numpy().astype(int) попытку, за исключением и continue до следующего цикла, если он ошибается

4. когда я использую печать(кадр), выводятся числа, но когда я использую detector.detect(), он не выводит ни одного.

5. да, тогда это потому, что вы detect возвращаетесь None , потому что вы не справились с этим в своем коде

Ответ №1:

Я не могу полностью проверить это, но внесите эти изменения и дайте мне знать, работает ли это:

 try:
    bb = detector.detect(frame)[0, :4].numpy().astype(int)
except Exception as e:
    print("An error occurred:", e)
    continue