Функция defineMultiScale () Python OpenCV перестает отвечать на запросы, когда я использую его в сценарии многопоточности в raspberry pi 3.
Я надеюсь создать два потока;один для показа живых изображений, а другой для обнаружения объекта и нахождения его центра.Даже несмотря на то, что функция показа живого изображения работает гладко, ее функция DetectMultiScale () не показывает никакого отклика.Я провел онлайн-исследование и выяснил, что OpenCV плохо справляется с параллельной обработкой.
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()