Исключение в потоке при обнаружении нескольких камер

#python #keras #python-multithreading

#python #keras #python -многопоточность

Вопрос:

У меня есть несколько камер, работающих в разных потоках, и я пытаюсь запустить обнаружение на каждом из них. Я определяю модель в основном и передаю ее потокам

Работает с одной камерой, но как только запускается второй поток камеры, он выдает следующую ошибку:

Исключение в потоке Thread-2: трассировка (последний последний вызов): Файл «C:UsersAdminAppDataLocalProgramsPythonPython36libthreading.py «, строка 916, в файле _bootstrap_inner self.run() «C:UsersAdminAppDataLocalProgramsPythonPython36libthreading.py «, строка 864, в файле run self._target(*self._args, **self._kwargs) «D:detecttestingcam.py «,строка 77, в video_read (locs, preds) = detect_and_predict(frame, person_net, hat_net) Файл «D:detecttestingcam.py «, строка 115, в detect_and_predict person = cv2.cvtColor(person, cv2.COLOR_BGR2RGB) cv2.ошибка: OpenCV(4.3.0) C:projectsopencv-pythonopencvmodulesimgprocsrccolor.cpp:182 : ошибка: (-215: ошибка утверждения) !_src.empty() в функции ‘cv::cvtColor’

Исключение в потоке Thread-1: Трассировка (последний последний вызов):
Файл «C:UsersAdminAppDataLocalProgramsPythonPython36libthreading.py «, строка 916, в файле _bootstrap_inner self.run() «C:UsersAdminAppDataLocalProgramsPythonPython36libthreading.py «, строка 864, в файле run self._target(*self._args, **self._kwargs) «D:detecttestingcam.py «,строка 77, в video_read (locs, preds) = detect_and_predict(frame, person_net, hat_net) Файл «D:detecttestingcam.py «, строка 115, в detect_and_predict person = cv2.cvtColor(person, cv2.COLOR_BGR2RGB) cv2.ошибка: OpenCV(4.3.0) C:projectsopencv-pythonopencvmodulesimgprocsrccolor.cpp:182 : ошибка: (-215: ошибка утверждения) !_src.empty() в функции ‘cv::cvtColor’

я пытался

 if frame is not None:
 #detection code
else:
 print('empty frame')
  

все еще выдает ту же ошибку,
я что-то упускаю?

код:

 def detect_and_predict(frame, person_net, hat_net):
    (h, w) = frame.shape[:2]
    blob = cv2.dnn.blobFromImage(frame, 1.0, (512, 512),(104.0, 177.0, 123.0))
    person_net.setInput(blob)
    detections = person_net.forward()
    persons = []
    locs = [] 
    preds = []

    for i in range(0, detections.shape[2]):
        confidence = detections[0, 0, i, 2]
        if confidence > 0.6:
            box = detections[0, 0, i, 3:7] * np.array([w, h, w, h])
            (startX, startY, endX, endY) = box.astype("int")

            (startX, startY) = (max(0, startX), max(0, startY))
            (endX, endY) = (min(w - 1, endX), min(h - 1, endY))

            person = frame[startY:endY, startX:endX]
            person = cv2.cvtColor(person, cv2.COLOR_BGR2RGB)
            person = cv2.resize(person, (224, 224))
            
            person = img_to_array(person)
            person = preprocess_input(person)
            
            persons.append(person)
            locs.append((startX, startY, endX, endY))
    if len(persons) > 0:
        persons = np.array(persons, dtype="float32")
        preds = hat_net.predict(persons, batch_size=32)
    return (locs, preds)
  

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

1. Пожалуйста, отправьте свой фрагмент кода для анализа, ничего нельзя сделать только с обратной трассировкой

Ответ №1:

Я решаю это. Просто используйте многопроцессорную обработку вместо многопоточности