在Raspberry Pi上无需桌面或ssh连接即可从Boot启动OpenCV python脚本



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

我尝试过的方法:

  1. /etc/rc.local-Pi启动了,但没有运行我的代码
  2. sudo crontab-e-同样的问题。我会走到桌面上,什么都不会发生。我想我的代码只是因为某种原因被树莓派绕过了
  3. [桌面输入]-这种方法最接近于解决我的问题。然而,树莓派会引导到桌面并自动运行我的代码。如果我断开了与树莓派的HDMI电缆,我的代码将无法运行。最佳结果是树莓派在启动时运行代码,而不必打开桌面界面

我已附上以下代码:

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编辑器中运行我的代码,结果成功了。

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

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

你会在互联网上找到很多关于如何配置它的教程(比如这个(。

最新更新