Rockchip RK3588 - 基于Qt的视频监控系统

发布时间 2023-12-13 00:41:08作者: 大奥特曼打小怪兽

----------------------------------------------------------------------------------------------------------------------------

开发板 :NanoPC-T6开发板
eMMC256GB
LPDDR416GB
显示屏 :15.6英寸HDMI接口显示屏
u-boot2017.09
linux6.1
----------------------------------------------------------------------------------------------------------------------------

本节的目的目的就是很简单,就是基于Qt实现HDMI-IN输入视频的实时监控。主要利用的技术包括:Qtopencvv4l2

我们在《移植QT5.6到mini2440》中介绍了交叉编译安装Qt,当时使用的版本是qt-everywhere-opensource-src-5.6.0.tar.xz,其支持ARMv4t架构,我们是直接将Qt安装到ubuntu宿主机的。

本节我们将介绍适用于Armv8-a架构的Qtopencv的安装了,当然这一节我们安装并不打算通过编译源码的方式将其安装到ubuntu宿主机,至于原因嘛,有多个方面:

  • 编译Qt需要占用很大的物理磁盘,而我的虚拟机中的ubuntu宿主机磁盘空间已经不足;
  • 编译安装可能遇到各种问题,最初我尝试了安装qt-everywhere-src-5.12.0.tar.xz,编译时遇到了各种错误(大概率是我交叉编译环境和gcc版本的问题),因此不得不放弃编译安装的想法。

本节我们直接使用apt-get或者aptitudeQtopencv安装到NanoPC-T6开发板的debain系统中。

一、Qt安装及配置

1.1 安装Qt

1.1.1 命令安装

首先先将debian的软件更新:

pi@NanoPC-T6:/$ sudo aptitude update 

首先查看一下有没有安装Qt

pi@NanoPC-T6:/$ sudo apt list --installed | grep qtcreator

如果未安装,那么安装Qt,这里安装的版本为Qt5.x,默认安装的是该大版本下的最新版本:

pi@NanoPC-T6:/$ sudo aptitude install build-essential
pi@NanoPC-T6:/$ sudo aptitude install qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools 
pi@NanoPC-T6:/$ sudo aptitude install qtcreator 
pi@NanoPC-T6:/$ sudo aptitude install "~n^qt5"
1.1.2 安装目录

Qt默认是安装到/usr/lib/aarch64-linux-gnu/qt5目录,这里安装的版本为Qt 5.15.10

pi@NanoPC-T6:/$ ls -l /usr/lib/aarch64-linux-gnu/qt5
drwxr-xr-x  2 root root 4096 12月 12 22:37 bin
drwxr-xr-x  1 root root 4096 12月 12 22:37 examples
drwxr-xr-x  2 root root 4096 12月 12 22:37 libexec
drwxr-xr-x 76 root root 4096 12月 12 21:26 mkspecs
drwxr-xr-x  1 root root 4096 12月 12 22:37 plugins
drwxr-xr-x  1 root root 4096 12月 12 22:37 qml
-rw-r--r--  1 root root  562 11月 13 16:21 qt.conf

pi@NanoPC-T6:/$ ls -l /usr/lib/aarch64-linux-gnu/qt5/bin/
lrwxrwxrwx 1 root root 26  9月 18 03:19 assistant -> ../../../qt5/bin/assistant
lrwxrwxrwx 1 root root 33 11月 13 16:21 fixqt4headers.pl -> ../../../qt5/bin/fixqt4headers.pl
lrwxrwxrwx 1 root root 20 11月 13 16:21 moc -> ../../../qt5/bin/moc
lrwxrwxrwx 1 root root 29 11月 13 16:21 qdbuscpp2xml -> ../../../qt5/bin/qdbuscpp2xml
lrwxrwxrwx 1 root root 29 11月 13 16:21 qdbusxml2cpp -> ../../../qt5/bin/qdbusxml2cpp
lrwxrwxrwx 1 root root 22 11月 13 16:21 qlalr -> ../../../qt5/bin/qlalr
lrwxrwxrwx 1 root root 39 11月 13 16:21 qmake -> ../../../../bin/aarch64-linux-gnu-qmake
lrwxrwxrwx 1 root root 20 11月 13 16:21 rcc -> ../../../qt5/bin/rcc
lrwxrwxrwx 1 root root 26 11月 13 16:21 syncqt.pl -> ../../../qt5/bin/syncqt.pl
lrwxrwxrwx 1 root root 20 11月 13 16:21 uic -> ../../../qt5/bin/uic

pi@NanoPC-T6:/$ qmake -v
QMake version 3.1
Using Qt version 5.15.10 in /usr/lib/aarch64-linux-gnu

同时在路径/usr/lib/aarch64-linux-gnu/下有qt5的安装库;

pi@NanoPC-T6:/$ ls -l usr/lib/aarch64-linux-gnu | grep Qt5
-rw-r--r-- 1 root root       965 11月 13 16:21 libQt5Concurrent.prl
lrwxrwxrwx 1 root root        27 11月 13 16:21 libQt5Concurrent.so -> libQt5Concurrent.so.5.15.10
lrwxrwxrwx 1 root root        27 11月 13 16:21 libQt5Concurrent.so.5 -> libQt5Concurrent.so.5.15.10
lrwxrwxrwx 1 root root        27 11月 13 16:21 libQt5Concurrent.so.5.15 -> libQt5Concurrent.so.5.15.10
-rw-r--r-- 1 root root     68040 11月 13 16:21 libQt5Concurrent.so.5.15.10
-rw-r--r-- 1 root root       975 11月 13 16:21 libQt5Core.prl
lrwxrwxrwx 1 root root        21 11月 13 16:21 libQt5Core.so -> libQt5Core.so.5.15.10
lrwxrwxrwx 1 root root        21 11月 13 16:21 libQt5Core.so.5 -> libQt5Core.so.5.15.10
lrwxrwxrwx 1 root root        21 11月 13 16:21 libQt5Core.so.5.15 -> libQt5Core.so.5.15.10
-rw-r--r-- 1 root root   5928376 11月 13 16:21 libQt5Core.so.5.15.10
-rw-r--r-- 1 root root       946 11月 13 16:21 libQt5DBus.prl
lrwxrwxrwx 1 root root        21 11月 13 16:21 libQt5DBus.so -> libQt5DBus.so.5.15.10
lrwxrwxrwx 1 root root        21 11月 13 16:21 libQt5DBus.so.5 -> libQt5DBus.so.5.15.10
lrwxrwxrwx 1 root root        21 11月 13 16:21 libQt5DBus.so.5.15 -> libQt5DBus.so.5.15.10
-rw-r--r-- 1 root root    662664 11月 13 16:21 libQt5DBus.so.5.15.10
.....

1.2 配置

安装完成后,我们进入debian桌面系统,可以看到Qt Creater;如果是以root用户登录的话,可以直接双击图标,启动程序;

否则开启一个终端,使用如下命令启动Qt Creater

pi@NanoPC-T6:/$ sudo qtcreator

点击【Tools】-【External】- 【Configure】,进入配置页面。

1.2.1 编译器

点击左侧【Kits】,选择【Compilers】,这里已经检测到系统安装的C、C++编译器;当然如果有需求的话,也可以自己添加编译器,指定名称和编译器路径即可:

C编译器为例,这里检测到了/usr/bin/aarch64-linux-gnu-gcc、和/usr/bin/aarch64-linux-gnu-gcc-12

pi@NanoPC-T6:/$ /usr/bin/aarch64-linux-gnu-gcc -v
Using built-in specs.
COLLECT_GCC=/usr/bin/aarch64-linux-gnu-gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/aarch64-linux-gnu/13/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none
OFFLOAD_TARGET_DEFAULT=1
Target: aarch64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 13.2.0-8' --with-bugurl=file:///usr/share/doc/gcc-13/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-13 --program-prefix=aarch64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/libexec --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libquadmath --disable-libquadmath-support --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --enable-fix-cortex-a53-843419 --disable-werror --enable-offload-targets=nvptx-none=/build/reproducible-path/gcc-13-13.2.0/debian/tmp-nvptx/usr --enable-offload-defaulted --without-cuda-driver --enable-checking=release --build=aarch64-linux-gnu --host=aarch64-linux-gnu --target=aarch64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 13.2.0 (Debian 13.2.0-8)


pi@NanoPC-T6:/$ /usr/bin/aarch64-linux-gnu-gcc-12 -v
Using built-in specs.
COLLECT_GCC=/usr/bin/aarch64-linux-gnu-gcc-12
COLLECT_LTO_WRAPPER=/usr/lib/gcc/aarch64-linux-gnu/12/lto-wrapper
Target: aarch64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 12.3.0-12' --with-bugurl=file:///usr/share/doc/gcc-12/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-12 --program-prefix=aarch64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libquadmath --disable-libquadmath-support --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --enable-fix-cortex-a53-843419 --disable-werror --enable-checking=release --build=aarch64-linux-gnu --host=aarch64-linux-gnu --target=aarch64-linux-gnu
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 12.3.0 (Debian 12.3.0-12)

可以看到系统中安装了gcc 13.2.0版本和gcc 12.3.0版本。如果不想使用某个版本,直接移除即可。

1.2.2 Qt Vsersions

点击左侧【Kits】,选择【Qt Vsersions】,可以手动设置qmake路径,这里默认值为/usr/lib/qt5/bin/qmake

这里我们查看一下/usr/lib/qt5目录:

pi@NanoPC-T6:/$ ls -l /usr/lib/qt5
总用量 4
drwxr-xr-x 2 root root 4096 12月 12 22:37 bin
pi@NanoPC-T6:/$ ls -l /usr/lib/qt5/bin/
总用量 7728
-rwxr-xr-x 1 root root  995872  9月 18 03:19 assistant
-rwxr-xr-x 1 root root    6340 11月 13 16:21 fixqt4headers.pl
-rwxr-xr-x 1 root root  986248 11月 13 16:21 moc
-rwxr-xr-x 1 root root  331544 11月 13 16:21 qdbuscpp2xml
-rwxr-xr-x 1 root root  134240 11月 13 16:21 qdbusxml2cpp
-rwxr-xr-x 1 root root  134064 11月 13 16:21 qlalr
-rwxr-xr-x 1 root root 2954616 11月 13 16:21 qmake
-rwxr-xr-x 1 root root   68208 11月 13 16:21 qvkgen
-rwxr-xr-x 1 root root  920672 11月 13 16:21 rcc
-rwxr-xr-x 1 root root   48360 11月 13 16:21 syncqt.pl
-rwxr-xr-x 1 root root  658456 11月 13 16:21 tracegen
-rwxr-xr-x 1 root root  659376 11月 13 16:21 uic
1.2.3 定义构建套件

点击左侧【Kits】,选择【Kits】,添加套件:

如有调试需求,可以自行安装GDB调试器。

1.3 测试

1.3.1 示例教程

我们直接选择一个示例教程,如图所示:

选中项目Audio Devices Example

选中左侧【Build & Run】- 【RK3588】,然后点击左下角【Run】按钮;

测试发现示例教程无法运行,并且代码出现若干红线,具体原因尚不清楚;

1.3.2 创建测试项目

点击【File】-【New Project】;

选中【Application(Qt)】- 【Qt Widgets Application】;

指定项目名称以及保存路径,然后点击【Next】,一直点击【Next】;

接着我们运行项目,点击左下角的【Run】,运行结果如下;

二、安装opencv

参考文章

[1] Linux下基于qt的视频监控系统

[2] Linux Ubuntu搭建Qt RK3399编译 运行 调试环境

[3] 嵌入式Linux--交叉编译安装Qt5.12.9

[4] linux GUI-移植QT5.6mini2440

[5] 在`Ubuntu Linux`上从源代码构建`Qt 6.2.2的简短教程

[6] RK3588安装Qt+opencv+采集USB摄像头画面