Raspberry Pi - 自动启动 OpenCv 脚本 - cv::imshow() 错误

2023-12-11

简短的介绍:

我想在启动后通过 systemd 服务脚本自动启动可执行文件(opencv 二进制文件,通过 c++ 生成),但我不成功。

我将错误范围缩小到代码语句“cv::imshow(....)”,该语句打开一个窗口并显示图像。此时,代码抛出错误:“QXcbConnection:无法连接到显示”

但是,如果我手动执行 sh 脚本或二进制文件,两者都可以正常工作。我在 stackoverflow 上搜索了最常见的错误,并尝试修复所有能找到的错误。我非常确定:

  1. 我的服务文件实际上在启动时运行(直到发生错误)
  2. 手动执行二进制文件效果很好
  3. 手动执行 .sh 脚本效果很好
  4. 我没有运行时链接错误(请参阅.sh-script)

我将不胜感激任何帮助。请帮助我修复该错误,并向我解释为什么会出现此错误。多谢 :)

.

我的系统:

Machine: Raspberry Pi 3 Model B
Architecture: arm32 / ARMv7
OS: NOOBS

.

我的脚本位于 /etc/systemd/system/ (test.service):

[Unit]
Description=lalala

[Service]
Type=oneshot
ExecStart=/bin/bash "/home/pi/Desktop/test.sh" start
ExecStop=/bin/bash "/home/pi/Desktop/test.sh" stop
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

此外,我确实执行了以下命令:

sudo chmod u+rwx /etc/systemd/system/test.service

sudo systemctl enable test

如果我手动启动该服务,它会以与启动过程中自动启动时相同的错误输出运行:

sudo systemctl enable test

.

我的 shell 脚本(test.sh):

#!/bin/sh -e

exec 2> /tmp/test.sh.log       # send stderr to a log file
exec 1>&2                      # send stdout to the same log file
set -x                         # tell sh to display commands before execution


echo "in script"


start() 
{
    echo "in start"

    sleep 30

    LD_LIBRARY_PATH=/usr/local/OpenCV/lib:/usr/local/SFML/lib:/usr/local/curl/lib:$LD_LIBRARY_PATH
    export LD_LIBRARY_PATH

    /home/pi/Desktop/test/main -e &
}


# THE OTHER CASES, NOT PUT IN HERE (stop, status)


case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    status)
        status 
        ;;
    restart)
        stop
        start
        ;;
    *)
        echo "Usage:  {start|stop|status|restart}"
        exit 1
        ;;
esac

exit 0

.

我的源代码的最小示例:(可执行)

#include <opencv2/opencv.hpp>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

int main()
{
    cv::Mat frame;
    cv::namedWindow("result", cv::WINDOW_NORMAL);

    ## CRASH

    return 0;
}

.

P.S:

我知道有一个类似的线程(使用 imshow 启动时运行 OpenCV 脚本)。但由于这个问题没有解决方案,而且我有更多信息可以分享,我认为开始一个新的线程会更合适。


幸运的是,我解决了这个问题:

问题出在我的服务脚本的配置中。我确实知道我需要一个 DISPLAY 变量来定位 X Display 的位置,但我不知道它也需要授权。这个线程帮助我弄清楚了:

https://unix.stackexchange.com/questions/85244/setting-display-in-systemd-service-file

简而言之:

将这些添加到 /etc/serviced/service 中的 test.service 行中:

Environment=XAUTHORITY=/home/pi/.Xauthority
Environment=DISPLAY=:0.0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Raspberry Pi - 自动启动 OpenCv 脚本 - cv::imshow() 错误 的相关文章

  • 选择合适的IDE

    您会推荐使用以下哪种 IDE 语言来在 Windows 下开发涉及识别手势并与操作系统交互的项目 我将使用 OpenCV 库来执行图像处理任务 之后 我将使用 win32 API 或 NET 框架与操作系统交互 具体取决于您建议的工具 性能
  • 如何让 STDOUT 和 STDERR 都转到终端和日志文件?

    我有一个脚本 将由非技术用户交互式运行 该脚本将状态更新写入 STDOUT 以便用户可以确定脚本运行正常 我希望将Stdout和STDERR重定向到终端 以便用户可以看到脚本正在工作 并查看是否存在问题 我还希望将两个流都重定向到日志文件
  • 如何使用ssh直接连接远程docker容器

    我想直接使用 ssh 连接到远程运行的 Docker 容器 通常我可以 ssh i privateKey user host docker ps which will list all running containers docker e
  • Bash 脚本:将数组作为参数传递给函数并打印数组

    我将一个数组传递给一个函数并尝试打印该数组的每个元素 下面是数组参数周围带有引号的代码片段 bin bash print array array for i in array with quotes do echo i done ar 1
  • bash:清理三个文件的外连接,保留文件成员资格

    考虑以下三个文件 其标题位于第一行 file1 id name in1 1 jon 1 2 sue 1 file2 id name in2 2 sue 1 3 bob 1 file3 id name in3 2 sue 1 3 adam 1
  • 带有存储在文件中的通配符的 grep

    我希望 grep 通过读取需要从文本文件中过滤掉的内容来过滤掉行 这是我给 grep 的内容 它存储在foo txt Users 1337 X Users 1337 R Users 1337 W 这是它应该过滤的内容 它存储在bar txt
  • 如何将查找结果传递给 CP,以便带空格的文件名起作用 [重复]

    这个问题在这里已经有答案了 我正在尝试将带有特定附件的文件复制到不同的目录 并保留其相对路径 从我调用的原始顶部路径 cp parents find name pdf print new path 我相信这有效 但仅当找到的文件名称中没有空
  • 将图像加载到现有 Mat 中

    有没有办法将图像加载到现有的 Mat 中 如果没有 有没有办法控制 OpenCV 在调用 cv imread 时分配内存的位置 我只是为您的类创建一个构造函数 该构造函数接受 imread 的输入参数并将图像直接加载 并分配 到您的类中 所
  • 相机校准:如何正确进行

    我正在尝试使用棋盘格通过众所周知的张氏方法进行校准 然后进行捆绑调整 该方法在 Matlab 和 OpenCV 中都可用 有很多经验指南 但从我个人的经验来看 准确性是相当随机的 它有时可能非常好 但有时也可能非常糟糕 实际上 只需将棋盘放
  • Opencv 对象检测:ORB GPU 检测器和 SURF GPU 描述符提取器

    我只是做了一个小实验来尝试不同的检测器 描述符组合 我的代码使用 ORB GPU 检测器来检测特征 并使用 SURF GPU 描述符来计算描述符 我使用 BruteForceMatcher GPU 来匹配描述符 并使用 knnMatch 方
  • 用于读取文件的 Bash 脚本

    不知道为什么最后一行没有从脚本中删除 bin bash FILENAME 1 while read line do cut d f2 echo line done lt FILENAME cat file 1 test 2 test 3 t
  • 如何在 Linux/OS X 上温和地终止 Firefox 进程

    我正在使用 Firefox 进行一些自动化操作 尽管我可以从 shell 打开 Firefox 窗口 但我无法正确终止它 如果我kill火狐进程与kill 3 or kill 2当我下次打开新的 Firefox 窗口时 命令会询问我是否要在
  • Python子进程Exec格式错误

    抱歉 如果这个问题很愚蠢 我正在使用Pythonsubprocess在 Ubuntu Natty 11 04 中调用 bat 文件的语句 但是 我收到错误消息 Traceback most recent call last File pfa
  • 在后台使用 HERE_DOC 方法运行脚本

    我有一个应该在后台运行的脚本 我必须在运行 bash 后立即回答一个问题 我该怎么做 nohup python script py lst lt
  • 如何选择图像插值方法? (Emgu/OpenCV)

    Emgu OpenCV的 net包装器 提供的图像调整大小功能可以使用四种插值方法中的任意一种 http www emgu com wiki files 1 4 0 0 html 596dd03d 301e d3c6 4c53 c42855
  • 带有二进制数据的 Bash echo 命令?

    有人可以解释一下为什么这个脚本有时只返回十六进制字符串表示形式的 15 个字节吗 for i in 1 10 do API IV openssl rand 16 API IV HEX echo n API IV od vt x1 w16 a
  • Bash touch - 非法选项 -d

    昨天我拍了很多照片 但我忘记更改相机中的时区 现在所有图片的修改日期都有错误 我想将特定目录中所有文件的修改日期更改为minus 10 hours bin sh for i in Users slick Desktop 100D5200 d
  • 用于获取特定用户 ID 和进程数的 Bash 脚本

    我需要 bash 脚本来计算特定用户或所有用户的进程 我们可以输入 0 1 或更多参数 例如 myScript sh root deamon 应该像这样执行 root 92 deamon 8 2 users has total proces
  • Bash 的源命令无法处理从互联网上卷曲的文件

    我正在尝试使用curl从互联网获取脚本文件 如下所示 source lt curl url echo done 我看到的是 完成 得到了回响before卷曲甚至开始下载文件 这是实际的命令和输出 bash 3 2 source lt cur
  • 独特的 Linux 文件名,可按时间排序

    以前我用的是uuidgen http man7 org linux man pages man1 uuidgen 1 html创建唯一的文件名 然后我需要通过 bash 脚本按日期 时间迭代该文件名 从那时起 我发现简单地通过 ls l 循

随机推荐

  • 在 ui:repeat 或 p:dataTable 中使用 p:graphicImage

    我有一个 Bean 它有一个对象列表 其中包含代表数据库中图像的 StreamedContent 对象 Primefaces 类型 现在我想在 JSF 2 0 页面 使用 Primefaces 中迭代此列表 并显示图像 以这种方式仅显示一张
  • 如何防止 PrimeFaces 向导的下一步按钮激活客户端验证?

    我的 JSF 2 2 PrimeFaces 应用程序中有一个带有三个选项卡的向导 在每个选项卡中 我都有一个表单来捕获用户的数据 每个表单都有一些验证 现在 当我单击 下一步 进入下一个选项卡时 它正在验证表单中的数据 我不希望这种事发生
  • Google Api 获取用户电子邮件地址

    我正在使用 Google Api PHP 客户端登录用户 我想获取用户的电子邮件地址 我有以下代码 Scope client gt setScopes https www googleapis com auth userinfo profi
  • @function 处的 Mingw32 汇编器错误

    我正在使用 mingw32 将一个项目移植到 Windows 该项目依赖于一个名为 libfec 的库 Libfec 有大量汇编代码来优化内部工作 在 Linux 使用 GCC 5 4 中 该库编译得很好 今天我尝试使用 mingw32 以
  • 从 PHP 写入图像文件时出错

    我正在尝试从 blob 写入图像文件 if POST logoFilename undefined logoFile fopen POST logoFilename w or die Cannot create POST logoFilen
  • Appcelerator 5.2GA 中的 Facebook 模块不再是 64 位

    Facebook 模块已停止工作 我正在 appcelerator 中开发钛金应用程序 当我尝试构建我的应用程序时 出现以下错误 INFO Invoking xcodebuild ERROR BUILD FAILED ERROR The f
  • 使用 Perl 提取特定行

    我正在编写一个 perl 程序来提取我匹配的两个模式之间的行 例如下面的文本文件有 6 行 我正在匹配负载均衡器和终端 我想要得到中间的 4 条线 load balancer new old good bad end 我的问题是如何将负载均
  • 对如何构建 GUI (wxpython) 感到困惑

    我从一本书转到另一本书 从谷歌搜索到另一本书 我注意到每一本书都以完全不同的方式启动主窗口 我不想养成坏习惯 所以有人可以给我最好的这些选择以及为什么这是更好的方法 以下是我见过的所有方法 A 类 iFrame wx Frame 定义ini
  • 发送有关受监控目录中文件更改的电子邮件

    如果服务器上的员工文件夹中的文件发生更改 我想向我们公司的人员发送电子邮件通知 我有一个脚本 可以很好地使用 inotifywait 在每次文件更改时发送电子邮件 我想做的是在多个文件上传 假设 10 个 jpg 正在上传到某人的员工文件夹
  • 使用 set_value 以 codeigniter 形式填充下拉列表

    我有一个使用下拉菜单的表单 我使用 codeigniter 表单助手和表单验证 因此 当我在表单中收到验证错误时 所有正确输入的字段都会使用 codeigniter 的 set value 进行填充 但这不适用于下拉列表 我正在做 当表单出
  • 如何使用 Windows 身份验证连接字符串使用 OLEDB 连接到 SQL Server

    我的 SQL Server 2010 在 Windows 身份验证模式下运行 并且已分配了正确的组 我可以使用 Windows 身份验证通过 SQL Server Client Studio 进行连接 这样可行 但是当使用 NET OLED
  • EPPlus 将 200 万行、200 多列的数据表保存到多个 Excel 文件

    我有使用 EPPlus 将所有记录从 SQL 表保存到 Excel 工作表的功能 如果我导出少量数据 一切正常 但如果导出 200 多列和 500 000 多行 则会出现 OutOfMemory 异常 我想修改我的代码 以便每个文件能够保存
  • JavaFX:设置场景最小尺寸(不包括装饰)

    我知道使用 JavaFX 您可以使用以下命令设置舞台最小大小stage setMinWidth and stage setMinHeight 但是 这将包括窗口边框 带有最小化 最大化和关闭按钮 设置最小尺寸时如何排除这一点 您可以显示St
  • 从 Office 加载项外部使用 Office.js API

    在 Office js 文档中 您可以阅读以下有关新 ExecuteAsync 方法 模式的内容 这还允许我们即使在 Excel 加载项之外也可以使用相同的 API 例如 想象一下 您想要针对存储在 OneDrive 中的 Excel 工作
  • 更改 Android 中 Sherlocks 库中 ActionBar 中选项卡的背景颜色?

    我正在使用 Sherlock 库开发 Actionbar 我想以不同的方式更改操作栏和选项卡的背景图像 目前我已经在运行时通过代码成功更改了操作栏的背景 Drawable myIcon getResources getDrawable R
  • Grails 与 Gaelyk 的新 Groovy AppEngine 应用程序 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我开始使用 Groovy
  • 在 Rust 中将 Vec 转换为 &str 的切片?

    Per 在 Rust 中你应该使用 str除非你确实需要拥有某物的所有权String 同样 建议使用对切片的引用 代替Vec除非您确实需要拥有该Vec 我有一个Vec
  • 在 Express js 会话中存储实例

    我正在使用expressjs会话 并且我有一个实例需要存储 function a this name var ins new a req session user ins 当我下次得到 res session user 时 该对象不是ins
  • 如何自动将浏览器前缀添加到CSS3属性中?

    您可能知道 由于 CSS3 并不兼容所有浏览器 因此当我们使用 CSS3 时 我们应该为 CSS3 属性添加前缀 例如 moz webkit o 等 手动编写这些前缀很困难 那么 是否有任何插件 程序或其他东西可以检测我的 CSS 文件中的
  • Raspberry Pi - 自动启动 OpenCv 脚本 - cv::imshow() 错误

    简短的介绍 我想在启动后通过 systemd 服务脚本自动启动可执行文件 opencv 二进制文件 通过 c 生成 但我不成功 我将错误范围缩小到代码语句 cv imshow 该语句打开一个窗口并显示图像 此时 代码抛出错误 QXcbCon