树莓派开机自启动opencv程序脚本及报错分析

Posted TohkaQAQ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树莓派开机自启动opencv程序脚本及报错分析相关的知识,希望对你有一定的参考价值。

1.制作测试脚本

首先我们需要制作一个脚本来测试自启动是否有效。

pi@raspberry:~ $ nano /home/pi/start.sh

start.sh的内容如下:

/usr/bin/python3 /home/pi/GeometryOperations.py

这里一定要注意使用绝对路径,不然有概率会加载失败。

然后给脚本文件添加执行文件

pi@raspberry:~ $ chmod 777 start.sh

测试一下脚本功能

pi@raspberry:~ $ ./start.sh

如果观察到程序正常运行就可以继续下一步

2.添加自启动

修改rc.local文件

pi@raspberry:~ $ sudo nano /etc/rc.local

在文本中找到exit 0,在此之前添加的代码在启动时都会被执行,在exit 0 之前添加一行代码:

su pi -c “exec /home/pi/start.sh &”

ctrl+o保存,ctrl+x退出,重启。

pi@raspberry:~ $ sudo reboot

重启后程序即可运行。

3.DEBUG

如果重启后树莓派没有任何响应,可以通过systemctl查看一下rc-local的状态

pi@raspberry:~ $ sudo systemctl status rc-local

进去后就可以看到你开机启动后每一步的状态,检查哪里会报错。

4.可能会出现的报错

Process:454 ExecStart=/etc/rc.local start (code=exited,status=1/FAILURE)

这个出错大概是因为脚本文件的原因。
如果仅仅只是启动的话,那么一定要把文件路径写为绝对路径,不然就会报错。

error: (-2:Unspecified error) Can’t initialize GTK backend in function ‘cvInitSystem’

如果开机自启动的程序包含Opencv等具有窗口操作的代码则会报这种错误

原因是由于下面这一句引起

su pi -c “exec /home/pi/start.sh &”

如果你的命令需要长时间运行(例如死循环)或者运行后不能退出,那么你必须确保在命令的最后添加“&”符号让命令运行在其后台

而如果代码中包含类似于如下的窗口界面操作

cv2.namedWindow(‘Cap’)
cv2.imshow(‘Cap’, frame)

就会与后台运作冲突,使GTK的后端不能初始化,引发报错。
解决方法就是把有关于界面及窗口的操作全部删掉,程序即可良好运行啦!

以上是关于树莓派开机自启动opencv程序脚本及报错分析的主要内容,如果未能解决你的问题,请参考以下文章

树莓派设置开机启动脚本

关于树莓派自启动脚本的编写

树莓派开机启动运行脚本

树莓派在树莓派上制作开机自启动程序及服务2

树莓派开机自启python gui程序

树莓派怎么开机就执行一条命令