在 Raspberry Pi 上启动 OpenCV python 脚本,无需桌面或 ssh 连接

Launch an OpenCV python script from Boot without desktop or ssh connection on Raspberry Pi

最近,我一直在编写一个 python 脚本,该脚本使用带有预训练模型的 COCO 数据集来检测对象。我使用“Mu 编辑器”在 Raspberry Pi 的桌面界面上成功地 运行 这段代码。我的目标是能够在 Raspberry Pi 上启动时自动 运行 此代码,而无需监视器或 SSH 连接。我意识到我的 OpenCV 程序使用 GUI 元素,因此很难简单地打开 Raspberry Pi 和自动 运行 我的代码。但是,我很好奇是否有任何方法可以提供此功能。

我尝试过的方法:

  1. /etc/rc.local - Pi 启动但没有 运行 我的代码。
  2. sudo crontab -e - 同样的问题。我会进入桌面,但什么也不会发生。我假设我的代码由于某种原因被 Raspberry Pi 绕过了。
  3. [Desktop Entry] - 这种方法最接近解决我的问题。但是,Raspberry Pi 会启动到桌面并自动 运行 我的代码。如果我断开连接到 raspberry pi 的 HDMI 电缆,我的代码将不会 运行。最佳结果是 raspberry pi 到 运行 代码在启动时无需打开桌面界面。

我附上了下面的代码:

import cv2
import pyttsx3
import time

cap = cv2.VideoCapture(0)
cap.set(3, 640)
cap.set(4, 480)
time.sleep(10)

classNames = []
classFile = '/home/pi/Desktop/Object Detection/coco.names'
with open(classFile,'rt') as f:
    classNames = [line.rstrip() for line in f]

configurationPath = '/home/pi/Desktop/Object Detection/ssd_mobilenet_v3_large_coco_2020_01_14.pbtxt'
weightsPath = '/home/pi/Desktop/Object Detection/frozen_inference_graph.pb'

net = cv2.dnn_DetectionModel(weightsPath, configurationPath)
net.setInputSize(320, 320)
net.setInputScale(1.0 / 127.5)
net.setInputMean((127.5, 127.5, 127.5))
net.setInputSwapRB(True)

engine = pyttsx3.init()
while True:
    success, img = cap.read()
    img = cv2.rotate(img, cv2.ROTATE_180)
    classIds, confs, bbox = net.detect(img, confThreshold=0.55, nmsThreshold=0.2)
    if len(classIds) == 0:
        engine.say("no objects detected")
        engine.runAndWait()
        continue
    if len(classIds) != 0:
        for classId, confidence, box in zip(classIds.flatten(), confs.flatten(), bbox):
            className = classNames[classId - 1]
            str1 = str(className)
            print(str1)
            engine.say(str1 + "detected")
            engine.runAndWait()
        continue
    cv2.imshow('Output', img)
    cv2.waitKey(1)

我忘了提一个注意事项:我尝试在终端而不是 Mu 编辑器中 运行ning 我的代码并且成功了。

我大约一个月前写了一个问题,并从这个社区收到了很好的建议! 如果有任何方法(软件或硬件添加)在引导时自动启动此脚本而不使用监视器或 SSH 连接,请告诉我。如果有任何建议,我将不胜感激!

您可以使用 systemd 在您的树莓派上创建服务。这将 运行 你的脚本在你的系统启动时在后台运行。

您会在 Internet 上找到很多关于如何配置它的教程(例如 this one)。