Объект 'NoneType' не имеет атрибута 'size' - как определить лицо с помощью mtcnn? - PullRequest
0 голосов
/ 28 января 2020

Я пытаюсь создать распознавание лиц в режиме реального времени в нейронной сети (фа cenet сеть), используя pytorch и обнаружение лиц, используя MTCNN. Я пробовал это для обнаружения лиц в режиме реального времени (с веб-камеры), но не работает чтение фреймов, затем проходит через детектор mtcnn

import cv2  
capture = cv2.VideoCapture(0)  
while(True):      
   ret, frame = capture.read()     
   frames_tracked = []      
   print('\rTracking frame: {}'.format(i + 1), end='')     
   boxes,_ = mtcnn.detect(frame)     
   frame_draw = frame.copy()     
   draw = ImageDraw.Draw(frame_draw)     
   for box in boxes:
       draw.rectangle(box.tolist(), outline=(255, 0, 0), width=6)          
       frames_tracked.append(frame_draw.resize((640, 360), Image.BILINEAR))      
   d = display.display(frames_tracked[0], display_id=True)     
   i = 1     
   try:        
      while True:
          d.update(frames_tracked[i % len(frames_tracked)]) 
          i += 1     
   except KeyboardInterrupt:
      pass  
   if cv2.waitKey('q') == 27:     
     break  

  capture.release() 
  cv2.destroyAllWindows()

, но возникает эта ошибка:

это полный трассировщик http://dpaste.com/0HR58RQ

AttributeError: у объекта 'NoneType' нет атрибута 'size'

Есть ли решение этой проблемы? что вызвало эту ошибку? спасибо за ваш совет

1 Ответ

1 голос
/ 28 января 2020

Давайте еще раз посмотрим на эту ошибку.

AttributeError: 'NoneType' object has no attribute 'size'

, поэтому где-то в вашем коде вы (или mtcnn) пытаетесь вызвать атрибут size из переменной None. вы передаете frame на mtcnn, используя следующую команду:

 boxes,_ = mtcnn.detect(frame)

именно там, где вы видите эту ошибку. потому что вы передаете переменную None в mtcnn. чтобы предотвратить это, вы можете предотвратить это перед вызовом этого метода. другими словами:

ret, frame = capture.read()
if frame == None:
    continue
...