Как запустить два файла python3 с обоими файлами, используя одну и ту же камеру Raspberry Pi

#python #python-3.x #machine-learning #deep-learning #raspberry-pi

Вопрос:

У меня есть два файла python3

#1 Распознавание масок для лица (Глубокое обучение)

#2 Сканер QR-кода (машинное обучение)

Я использую камеру Raspberry Pi 3 B и 8-мегапиксельную камеру с одним Pi

Обе программы не имеют никакого соединения, однако мне нужно запустить обе одновременно, чтобы обнаружить кого-то, кто маскируется или нет, и отсканировать QR-код пользователя

Проблема в том, что я обнаружил конфликт на pi-камере, потому что я использую только одну pi-камеру для двух разных программ. Кроме того, маска для лица с использованием видеопотока во время QR-сканирования с использованием видеокапсул.

Надеюсь, кто-нибудь может помочь мне в конфликте pi-камеры с двумя файлами python3, которые его используют.

Ниже приведен мой код:

#1 Распознавание масок на основе Github

https://github.com/manish-1305/facemask_detection/blob/73f37f724b519731eec7d46cb4a23482147db24b/detect.py

#2 Сканер QR-кода

 import cv2
import re
from time import time
import datetime
import board


cap = cv2.VideoCapture(0)
detector = cv2.QRCodeDetector()

def sw1Pressed():
    global sw1Press
    sw1Press = True

sw1.when_pressed = sw1Pressed
sw1Press = False


print("Press SW1 to scan.")


while True:
    if sw1Press == True:
        led.toggle()
        
        _, img = cap.read()
        data, bbox, _ = detector.detectAndDecode(img)
        
        if bbox is not None:
            for i in range(len(bbox)):
                cv2.line(img, tuple(bbox[i][0]), tuple(bbox[(i 1) % len(bbox)][0]), color=(255,
                         0, 0), thickness=2)
                
            cv2.putText(img, data, (int(bbox[0][0][0]), int(bbox[0][0][1]) - 10), cv2.FONT_HERSHEY_SIMPLEX,
                        0.5, (0, 255, 0), 2)
            
            if data:
                sw1Press = False
                
                data = data.split(",")
                print("ID: "   data[0])
                print("NAME: "   data[1])
               
                print()
                
                userScanned = False
                with open('XXX.csv') as csvfile:
                    reader = csv.DictReader(csvfile)
                    for row in reader:
                        if row["ID"] == data[0]:
                            buzzer.beep(0.1, 0.1, 1)
                            userScanned = True
                    
                if userScanned == False:
                    buzzer.beep(0.1, 0.1, 2)
                    with open('XXX.csv', 'a') as csvfile:
                        fieldNames = ['ID', 'NAME']
                        
                        writer = csv.DictWriter(csvfile, fieldnames=fieldNames)
                        writer.writerow({'ID': data[0], 'NAME': data[1]})
                        
                currentTime = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
                
                print("Date amp; Time: {}".format(currentTime))
                print()
                
                data = {
                'ID' : data[0],
                'NAME' : data[1],
                
                'TIME' : currentTime,
               
                }
                
        cv2.imshow("code detector", img)
    
    else:
        cap.read()
        cv2.destroyAllWindows()
    
    
    if cv2.waitKey(1) == ord("q"):
        break

led.off()
cap.release()
cv2.destroyAllWindows()
 

Ответ №1:

Запустите одну программу (или поток), которая непрерывно считывает изображение с камеры и сохраняет его там, где два клиента (маска и QR) могут его прочитать.

В практическом плане это может быть:

  • одна программа с 3 потоками, один поток считывает данные с камеры в общий массив Numpy и два потока считывают данные из этого общего массива, или
  • три программы, одна из которых считывает изображения в многопроцессорную общую память Python v3.8 и две программы, подключенные к этой общей памяти для чтения кадров
  • три программы, возможно, на разных машинах, одна считывает кадры с камеры и помещает их в Redis, а две другие считывают кадры из Redis

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

1. Сэр, как насчет того, чтобы я использовал веб-камеру в качестве второй камеры? Но я не знаю, как настроить программу так, чтобы она могла использовать Pi Cam или веб-камеру для разных задач. Pi Cam = Маска для лица и веб-камера = Считывание QR-кода

2. Если у вас есть вопрос о второй камере, просто задайте другой вопрос — они бесплатны — ответы тоже бесплатны. Обязательно скажите, что это за камера и как она подключена.