Как исправить «проблему многопоточности» в python в rasberry pi - PullRequest
1 голос
/ 21 июня 2019

Я не смог выяснить, в чем может быть проблема с программой многопоточности, которую я написал на 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()

Я хочу запустить эти потоки одновременно, чтобы изображение, отображаемое функцией захвата, работало плавно, а обнаружение выполнялось функцией обнаружения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...