如何在同一台树莓派上运行两个使用相同摄像头的Python3文件

我有两个Python3文件

#1 口罩识别(深度学习)

#2 QR码扫描(机器学习)

我使用的是Raspberry Pi 3 B+ 和8百万像素的单摄像头

这两个程序之间没有任何连接,但我需要同时运行这两个程序来检测某人是否戴口罩并扫描用户的QR码

问题是我发现树莓派摄像头存在冲突,因为我只用一个摄像头来运行两个不同的程序。此外,口罩识别使用的是视频流,而QR码扫描使用的是视频捕捉。

希望有人能帮助我解决使用两个Python3文件时树莓派摄像头的冲突问题。

以下是我的代码:

#1 基于Github的口罩识别

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

#2 QR码扫描器

import cv2import refrom time import timeimport datetimeimport boardcap = cv2.VideoCapture(0)detector = cv2.QRCodeDetector()def sw1Pressed():    global sw1Press    sw1Press = Truesw1.when_pressed = sw1Pressedsw1Press = Falseprint("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 & 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"):        breakled.off()cap.release()cv2.destroyAllWindows()

回答:

运行一个程序(或线程),它持续读取摄像头并将图片存储在两个客户端(口罩和QR码)可以读取的地方。

在实际操作中,这可以是:

  • 一个具有三个线程的程序,一个线程从摄像头读取到共享的Numpy数组,另外两个线程从该共享数组读取数据,或者
  • 三个程序,一个程序将图像读取到Python v3.8的多处理共享内存中,另外两个程序连接到该共享内存来读取帧
  • 三个程序,可能在不同的机器上,一个程序从摄像头读取帧并将其放入Redis,另外两个程序从Redis中读取帧

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注