Я не смог выяснить, в чем может быть проблема с программой многопоточности, которую я написал на python в raspberry pi 3 для распознавания объектов.
Код работает на модели Raspberry Pi 3. Я надеюсь сделать две темы; один для показа живых изображений, а другой для обнаружения объекта и нахождения его центра. Я попробовал код, который я написал ниже. Он отлично работает, когда я использую его в ноутбуке, но он не работает (вторая функция; Detective () не отвечает после строки face = drop_cascade.detectMultiScale (image, 1.25, 7)) на Raspberry Pi, но если я удалите эту строку и следующий за циклом и замените простым кодом, таким как print ("hello"), он работает нормально.
import threading
import cv2
import numpy as np
from picamera.array import PiRGBArray
from picamera import PiCamera
import time
global image, center
center=[]
def capture():
global image, center
cv2.namedWindow('image',cv2.WINDOW_NORMAL)
cv2.moveWindow('image',0,0)
cv2.resizeWindow('image', 800,608)
camera=PiCamera()
camera.resolution=(800,608)
camera.framerate=50
rawCapture=PiRGBArray(camera,size=(800,608))
for frame in camera.capture_continuous(rawCapture,format='bgr',use_video_port=True):
image=frame.array
cv2.imshow('image',image)
key=cv2.waitKey(1)& 0xFF
rawCapture.truncate(0)
if key==ord('q'):
break
cv2.destroyAllWindows()
def detect():
global image, center
time.sleep(2)
drop_cascade = cv2.CascadeClassifier('cascade.xml')
while True:
faces = drop_cascade.detectMultiScale(image, 1.25, 7)
for (x, y, w, h) in faces:
center.append([x,y,w,h])
if __name__ == '__main__':
thread1=threading.Thread(target=capture)
thread2=threading.Thread(target=detect)
thread1.start()
thread2.start()
Я хочу запустить эти потоки одновременно, чтобы изображение, отображаемое функцией захвата, работало плавно, а обнаружение выполнялось функцией обнаружения.