Запуск скрипта Python из терминала на Raspberry не работает, но работает в среде IDE

Я написал скрипт Python на своем Raspberry Pi, и он отлично работает при работе с Thonny IDE. Но когда я хочу запустить его из терминала, у него много ошибок импорта. Я уже добавил комментарий к среде в начале скрипта. Это мой следующий код:


    #!/usr/bin/env python
    import cv2
    import time
    import os
    import numpy
    import imutils
    from threading import Thread
    import threading
    
    class WebcamVideoStream:
        def __init__(self, src ='/dev/video0', cap = cv2.CAP_V4L2):
            self.stream = cv2.VideoCapture(src,cap)
            self.stream.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter.fourcc('M','J','P','G'))
            self.stream.set(cv2.CAP_PROP_FPS,30.0)
            self.stream.set(cv2.CAP_PROP_FRAME_WIDTH,1280)
            self.stream.set(cv2.CAP_PROP_FRAME_HEIGHT,720)
            (self.grabbed, self.frame) = self.stream.read()
            self.stopped = False
        def start(self):
            Thread(target = self.update, args=()).start()
            return self
        def update(self):
            while(True):
                if self.stopped:
                    return
                (self.grabbed, self.frame) = self.stream.read()
        def read(self):
            return self.frame
        def stop(self):
            self.stopped = True
    if __name__ == "__main__":
        vs = WebcamVideoStream()
        vs.start()
        fourcc = cv2.VideoWriter_fourcc(*'MJPG')
        timeStart = False
        timeStartReal = time.time()
        faceRecNeeded = True
        count = 0
        countFrames = 0
        face_cascade = cv2.CascadeClassifier('/home/pi/Downloads/haarcascade_frontalface_default.xml')
        while True:
            frame = vs.read()
            if faceRecNeeded:
                gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
                # Detect the faces
                faces = face_cascade.detectMultiScale(gray, 1.1, 4)
                    # Draw the rectangle around each face
                for (x, y, w, h) in faces:
                    cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 2)
                    count += 1
            
            if count>0 and timeStart == False:
                faceRecNeeded = False
                timeStart = True
                timeStartReal = time.time()
                out = cv2.VideoWriter('output' + str(time.time()) + '.avi', fourcc, 15.0, (1280, 720))
            count = 0
        
            if timeStart == True and time.time()-timeStartReal < 5:
                out.write(frame)
                countFrames+=1
        
            if timeStart == True and time.time()-timeStartReal >= 5:
                timeStart = False
                faceRecNeeded = True
                out.release()
                print(countFrames)
        
            # Display
            #cv2.imshow('img', frame)
            # Stop if escape key is pressed
            if cv2.waitKey(1) & 0xFF == ord('q'):
                if timeStart == True:
                    out.release()
                break
        cv2.destroyAllWindows()
        vs.stop()

Это мой вывод моего терминала после запуска cmd = python3 /home/pi/Desktop/DATANAME.py

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/numpy/__init__.py", line 140, in <module>
    from . import core
  File "/usr/lib/python3/dist-packages/numpy/core/__init__.py", line 101, in <module>
    from . import _internal
  File "/usr/lib/python3/dist-packages/numpy/core/_internal.py", line 10, in <module>
    import platform
  File "/usr/lib/python3.9/platform.py", line 119, in <module>
    import subprocess
  File "/usr/lib/python3.9/subprocess.py", line 51, in <module>
    import threading
  File "/home/pi/Desktop/threading.py", line 3, in <module>
    from imutils.video import FPS
  File "/usr/local/lib/python3.9/dist-packages/imutils/video/__init__.py", line 4, in <module>
    from .videostream import VideoStream
  File "/usr/local/lib/python3.9/dist-packages/imutils/video/videostream.py", line 2, in <module>
    from .webcamvideostream import WebcamVideoStream
  File "/usr/local/lib/python3.9/dist-packages/imutils/video/webcamvideostream.py", line 2, in <module>
    from threading import Thread
ImportError: cannot import name 'Thread' from partially initialized module 'threading' (most likely due to a circular import) (/home/pi/Desktop/threading.py)
Traceback (most recent call last):
  File "/home/pi/Desktop/faceDetectionThreading.py", line 2, in <module>
    import cv2
ImportError: numpy.core.multiarray failed to import

Можете ли вы помочь мне исправить эту ошибку, чтобы я мог работать и через терминал?

Какую версию Numpy вы используете? Это ответ на ваш вопрос: stackoverflow.com/questions/20518632/…

user-124812948 11.05.2022 11:26

Я переустановил numpy, и он все еще не работает. У меня сейчас установлена ​​версия 1.22.3

GottaGaming 11.05.2022 11:51
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
21
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я предполагаю, что ваш файл «threading.py», который находится в каталоге рабочего стола. Это, скорее всего, вызывает циклическую ошибку импорта, поскольку подпроцесс ошибочно импортирует ваш собственный модуль вместо встроенного модуля потоковой передачи Python.

Ваша проблема должна быть решена, когда вы переименуете файл threading.py, чтобы он не мешал другим модулям.

Другие вопросы по теме