Как исправить ошибку «AttributeError» и OpenCV

#python #flask #mediapipe

Вопрос:

У меня есть программа flask, которая использует OpenCV и mediapipe. Приложение создает веб-сервер, который получает входной видеофайл, а затем обрабатывает данные на нем с помощью mediapipe.

Когда я запускаю свой код в виртуальной среде, я получаю следующую ошибку.

 Debugging middleware caught exception in streamed response at a point where response headers were already sent.
Traceback (most recent call last):
  File "/Users/alexandrafalkner/Desktop/vandy/5278/CS5279-Project-Gesture-Recognition/lib/python3.9/site-packages/werkzeug/wsgi.py", line 462, in __next__
    return self._next()
  File "/Users/alexandrafalkner/Desktop/vandy/5278/CS5279-Project-Gesture-Recognition/lib/python3.9/site-packages/werkzeug/wrappers/response.py", line 49, in _iter_encoded
    for item in iterable:
  File "/Users/alexandrafalkner/Desktop/vandy/5278/CS5279-Project-Gesture-Recognition/lib/python3.9/site-packages/flask/helpers.py", line 131, in generator
    yield from gen
  File "/Users/alexandrafalkner/Desktop/vandy/5278/CS5279-Project-Gesture-Recognition/Elastic Beanstalk/GestureRec/application.py", line 67, in gen
    image = detector.image
AttributeError: 'Detect' object has no attribute 'image'
192.168.1.248 - - [12/Jul/2021 17:25:32] "GET /video_feed HTTP/1.1" 200 -
192.168.1.248 - - [12/Jul/2021 17:25:33] "GET /favicon.ico HTTP/1.1" 200 -
OpenCV: Couldn't read video stream from file "https://r4---sn-ab5sznle.googlevideo.com/videoplayback?expire=1626146734amp;ei=TrPsYI7TAsi2hwbUhZzgBgamp;ip=69.169.5.159amp;id=o-AArBuxjnP3vAs1NJIUfCHWQig2OOQnb8QfLhJehoUaRcamp;itag=22amp;source=youtubeamp;requiressl=yesamp;mh=Tmamp;mm=31,26amp;mn=sn-ab5sznle,sn-p5qs7n76amp;ms=au,onramp;mv=mamp;mvi=4amp;pl=23amp;initcwndbps=2586250amp;vprv=1amp;mime=video/mp4amp;ns=BagCNZ55LiZyxfj48GVlM_IGamp;ratebypass=yesamp;dur=291.062amp;lmt=1614364379358865amp;mt=1626124648amp;fvip=4amp;fexp=24001373,24007246amp;beids=9466587amp;c=WEBamp;txp=1432434amp;n=ssmaZFn8YLnHUKV5Jwamp;sparams=expire,ei,ip,id,itag,source,requiressl,vprv,mime,ns,ratebypass,dur,lmtamp;sig=AOq0QJ8wRgIhAMayd18uVr6ho_GzGCI-xmLforRk0tlIAf2QfHrlcZKfAiEAgiGe3e3MuyQvIsHOXfObzJgrSb6LhyeL63pLdqpSwyI=amp;lsparams=mh,mm,mn,ms,mv,mvi,pl,initcwndbpsamp;lsig=AG3C_xAwRQIhAIpFmquDVDUoAPCZjsRQbhQsPX9lA44HCguTlmnBogi1AiAgjEhIg9xY7yQvlpjxWA6GDgVNPlEqcSsodg5FW2sEWQ=="
[ERROR:0] global /private/var/folders/rs/82_yq8xs1q15sncx9xmsh1nh0000gn/T/pip-install-7w_cmwpj/opencv-python/opencv/modules/videoio/src/cap.cpp (162) open VIDEOIO(CV_IMAGES): raised OpenCV exception:

OpenCV(4.5.3) /private/var/folders/rs/82_yq8xs1q15sncx9xmsh1nh0000gn/T/pip-install-7w_cmwpj/opencv-python/opencv/modules/videoio/src/cap_images.cpp:235: error: (-5:Bad argument) CAP_IMAGES: error, expected '0?[1-9][du]' pattern, got: https://r4---sn-ab5sznle.googlevideo.com/videoplayback?expire=1626146734amp;ei=TrPsYI7TAsi2hwbUhZzgBgamp;ip=69.169.5.159amp;id=o-AArBuxjnP3vAs1NJIUfCHWQig2OOQnb8QfLhJehoUaRcamp;itag=22amp;source=youtubeamp;requiressl=yesamp;mh=Tmamp;mm=31,26amp;mn=sn-ab5sznle,sn-p5qs7n76amp;ms=au,onramp;mv=mamp;mvi=4amp;pl=23amp;initcwndbps=2586250amp;vprv=1amp;mime=video/mp4amp;ns=BagCNZ55LiZyxfj48GVlM_IGamp;ratebypass=yesamp;dur=291.062amp;lmt=1614364379358865amp;mt=1626124648amp;fvip=4amp;fexp=24001373,24007246amp;beids=9466587amp;c=WEBamp;txp=1432434amp;n=ssmaZFn8YLnHUKV5Jwamp;sparams=expire,ei,ip,id,itag,source,requiressl,vprv,mime,ns,ratebypass,dur,lmtamp;sig=AOq0QJ8wRgIhAMayd18uVr6ho_GzGCI-xmLforRk0tlIAf2QfHrlcZKfAiEAgiGe3e3MuyQvIsHOXfObzJgrSb6LhyeL63pLdqpSwyI=amp;lsparams=mh,mm,mn,ms,mv,mvi,pl,initcwndbpsamp;lsig=AG3C_xAwRQIhAIpFmquDVDUoAPCZjsRQbhQsPX9lA44HCguTlmnBogi1AiAgjEhIg9xY7yQvlpjxWA6GDgVNPlEqcSsodg5FW2sEWQ== in function 'icvExtractPattern'


Exception in thread Thread-5:
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/threading.py", line 950, in _bootstrap_inner
    self.run()
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/threading.py", line 888, in run
    self._target(*self._args, **self._kwargs)
  File "/Users/alexandrafalkner/Desktop/vandy/5278/CS5279-Project-Gesture-Recognition/Elastic Beanstalk/GestureRec/get_video.py", line 226, in detect
    self.mp_drawing = mp.solutions.drawing_utils # Drawing helpers
AttributeError: module 'mediapipe' has no attribute 'solutions'
 

Ниже приведен HTML-код:

 header_text = '''
    <html>n<head> <title>Gesture Recognition</title> </head>n<body>'''
instructions = '''
    <p><em>Gesture Recognition</em>:</p>'''
home_link = '<p><a href="/">Back</a></p>n'
footer_text = '</body>n</html>'
upload_form =     b'''
    <!doctype html>
    <title>Gesture recognition</title>
    <h1>Upload MP4 video for Fortnite dance gesture recognition</h1>
    <form method="POST">
        <input name="YouTube URL">
        <input type="submit">
    </form>
    '''
 

Это строка 67 с первой ошибкой:

 image_path = os.path.join(os.getcwd(),'live.jpeg')
image = detector.image    
 

И строка 226 со второй ошибкой атрибута (я импортировал mediapipe как mp):

 def detect(self,model_name,source = 0,trail_frames=[5,15]):
        if source != 0:
            self.yt_url = 'https://www.youtube.com/watch?v='
            vPafy = pafy.new(self.yt_url   source)
            play = vPafy.getbest(preftype="mp4")
            source = play.url
        cap = cv2.VideoCapture(source)
        # Initiate holistic model
        with open(model_name   '_body_language.pkl', 'rb') as f:
            model = pickle.load(f)
        self.mp_drawing = mp.solutions.drawing_utils # Drawing helpers
        self.mp_holistic = mp.solutions.holistic # Mediapipe Solutions
        frame_num = 0
        frame_list = []

 

Он работает на компьютере моего партнера, поэтому я думаю, что проблема не в коде, а в том, как я загрузил и настроил mediapipe и, возможно, OpenCV.
Спасибо!

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

1. что такое detector ? Я не вижу этого в коде. Ошибка показывает, что detector этого не произошло image .

2. может быть, вы установили неправильно или устарели mediapipe , и этого нет solutions . ИЛИ, может быть, вы создали собственный файл mediapipe.py и теперь import загружаете свой файл mediapipe.py вместо модуля mediapipe — вы можете проверить print( mp.__file__ ) , правильно ли вы импортируете файл.