目录
背景
在jetson nano上开发时,免不得要做一个界面,当然这个在yolov5和yolov8都可以使用(因为暂时只测试了这两个,按道理来说起码对于yolo系列应该都是可以适配的),用于用户的交互,此文章主要解决安装pyqt5的问题,我们一般跑的是python脚本,一般情况可以选择安装pyside,但是在我寻找了很多资料后,我大胆下出这样一个结论,jetson nano无法安装pyside,所以这是我安装pyqt的原因。
1. 安装pyqt5
由于只能在apt包中安装,所以我们先把它安装在主环境中,命令如下
sudo apt install pyqt5*
sudo apt-get install python3-pyqt5
同样,通过软链接的方式,把它链接到你的虚拟环境中,
ln -s /usr/lib/python3/dist-packages/PyQt5/ /home/x/archiconda3/envs/yolov8/lib/python3.8/site-packages
ln -s /usr/lib/python3/dist-packages/sip* /home/x/archiconda3/envs/yolov8/lib/python3.8/site-packages
这段命令的具体解释可以查看 我前面的这篇文章
接下来,你可以用以下命令在你的虚拟环境中进行验证,查看是否安装成功
python3.6 -c "from PyQt5.QtWidgets import QApplication; print(QApplication)"
只要没报错import错误,就是安装成功了的
2. 解决运行报错问题
cannot allocate memory in static TLS block-报错问题解决
具体报错内容如下
ImportError: /home/lianlu/.local/lib/python3.8/site-packages/sklearn/__check_build/../../scikit_learn.libs/libgomp-d22c30c5.so.1.0.0: cannot allocate memory in static TLS block
export LD_PRELOAD=
分析原因如下
可能的原因有:
TLS段过大:某些情况下,编译器生成的TLS段超过了操作系统为单个进程分配给TLS的默认大小。预加载libgomp可能调整了TLS的使用方式或分配策略,从而避免了这个问题。
动态链接问题:可能是由于程序在链接OpenMP库或其他相关库时出现了问题,直接指定LD_PRELOAD确保了正确的库被使用,特别是那些关于并发和线程管理的部分。
资源限制或冲突:在某些环境中,可能存在与TLS相关的资源限制或与其他库的冲突,预加载特定版本的libgomp可能绕过了这些限制或解决了冲突。
解决方法:
在命令行输入以下内容
export LD_PRELOAD=/home/lianlu/.local/lib/python3.8/site-packages/sklearn/__check_build/../../scikit_learn.libs/libgomp-d22c30c5.so.1.0.0
后面接着的那段路径就在报错内容中
ImportError: /home/lianlu/.local/lib/python3.8/site-packages/sklearn/__check_build/../../scikit_learn.libs/libgomp-d22c30c5.so.1.0.0: cannot allocate memory in static TLS block
再次运行这个python脚本就可以直接运行了
3. 总结
但是自我感觉在板子上直接搭建运行界面的环境还是不太合适,最后跑出来的效果fps只有14左右,实时检测的显示效果很卡,但是视频保存下来后,又有快进的效果,所以我觉得如果要做界面,最好还是直接用板子给主机进行图传可能效果要好一些。