最近公司要做一个火灾图像识别程序,要在板子上跑。板子是firefly3399pro,这板子性能比较好,带gpu,但是这次时间的关系就选择opencv来做图像识别,gpu性能就无法发挥了,但cpu也是6核。由于用的netcore,在nuget上用了opencvsharp库,使用还是很方便,对opencv封装比较好,函数名基本一致,但是有个最大的问题,这个opencvsharp库提供了现成的Windows,Linux的运行库,但是都是基于x86架构cpu的,基于arm64的还没有,需要自己下载opencv源代码进行编译,再下载opencvsharp源代码进行编译,最后生成opencv库与opencvsharp运行库。于是在网上搜索了很多文章,在这过程中还是踩了不少坑,下面整理如下。
系统环境:
主板:firefly RK3399Pro
.Netcore环境:.Netcore3.1
Opencv:Opencv-4.5.1
Opencvsharp:4.5.1
CPU架构:双Cortex-A72+四Cortex-A53(Arm64)
操作系统:Ubuntu18.04
-
工具准备(编译工具cmake,build-essential)
板子上运行命令:
sudo apt-get install build-essential
sudo apt-get install cmake libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
-
gstreamer安装
在arm64上用opencv获取rtsp会报错:drm prime is not supported as input pixel format
Opencv默认用ffmpeg,要用gstreamer。
sudo apt-get install libgstreamer-plugins-base1.0-dev
下载opencv源码opencv-4.5.1.tar.gz,地址如下
https://github.com/opencv/opencv/archive/4.5.1/opencv-4.5.1.tar.gz
拷贝传输至板子上,使用解压命令tar -zxvf opencv-4.5.1.tar.gz解压至本地(也可以使用git工具同步到本地)。
进入文件夹:cd opencv-4.5.1。
创建build文件夹:sudo mkdir build,进入build:cd build。
执行cmake命令,最好关闭不要的模块,什么文档、例子、测试(非常耗资源,全部编译内存不足怎么也不过),如果板子内存小了,可以通过swap指令增加交换空间。注意最后的..(cmake要去找 CMakeLists.txt),注意用DWITH_GSTREAMER=ON指定gstreamer解码。指令如下:
Sudo cmake -DCMAKE_BUILD_TYPE=RELEASE \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DBUILD_DOCS=OFF \
-DBUILD_EXAMPLES=OFF \
-DBUILD_TESTS=OFF \
-DBUILD_PERF_TESTS=OFF \
-DWITH_GSTREAMER=ON\
Cmake完后就生成要编译的内容。
执行编译,执行sudo make -j4,其中4是指参与编译的cpu数量,不要全量,容易拷死机,等待一长段时间,过程中有进度输出,如果内存不足会卡死,造成编译不通过,需要重新调整上面的参数。
最后执行生成sudo make install,生成完后在/usr/local/lib可以看到生成的so库。
可以使用ldconfig命令将/usr/local/lib加入到默认库。具体命令如下:
sudo echo "/usr/local/lib" >> /etc/ld.so.conf
/sbin/ldconfig
Opencvsharp移植较为简单,可以参考
https://blog.csdn.net/u012168125/article/details/108888207
编译完毕后在目录/home/gitData/OpenCvSharpExtern/ 目录内有一个文件libOpenCvSharpExtern.so拷贝到/usr/lib就行了。
编译好的libopencv以及opencvsharp库已上传
https://download.csdn.net/download/fanshijian21/15500918
。
最近公司要做一个火灾图像识别程序,要在板子上跑。板子是firefly3399pro,这板子性能比较好,带gpu,但是这次时间的关系就选择opencv来做图像识别,gpu性能就无法发挥了,但cpu也是6核。由于用的netcore,在nuget上用了opencvsharp库,使用还是很方便,对opencv封装比较好,函数名基本一致,但是有个最大的问题,这个opencvsharp库提供了现成的Windows,Linux的运行库,但是都是基于x86架构cpu的,基于arm64的还没有,需要自己下载o...
YOLOv5训练
移植
RK3399
Pro
_PyTorch转ONNX转RKNN(带说明文档).zip
YOLOv5训练
移植
RK3399
Pro
_PyTorch转ONNX转RKNN(带说明文档).zip
YOLOv5训练
移植
RK3399
Pro
_PyTorch转ONNX转RKNN(带说明文档).zip
yolov5+Deepsort算法部署于rk3588和
rk3399
pro
开发板C++完整源码(车辆行人检测跟踪)+rknn模型+操作说明文档.zip
【资源介绍】
改善了边界框漂移, 完善了当图中没有目标等其他情形出现的bug, 增加了对cost matrix出现nan时的处理
加入了隔帧检测的功能. 设置方法:
在./yolov5/include/detect.h中 将 const int det_interval = 1;改成期望的数值, 例如3, 表示每隔3帧检测一次, 这样可以显著提升速度. 同时, 也需要更改./deepsort/include/deepsort.h中line 39的const int track_interval = 1; , 数值要和检测的保持一致.
加入Re-ID多线程的功能
如果您不希望使用多线程, 则在./deepsort/src/deepsort.cpp中line 144的if (numOfDetections < 2) 改成if (true)
更多详细介绍请查看资源内的项目说明。按照步骤操作使用
RK3399
板子获取rtsp流报错drm prime is not supported as input pixel format
不要使用ffmpeg,需要使用gstreamer
编译
opencv
之前,需要安装gstreamer, cap.open时指定CAP_GSTREAMER
int opened = cap.open("rtsp://admin:xxxxx@192.168.3.108:554/cam/realmonitor?channel=1&subtype=1",CAP_GSTREAMER
现需要将
RK3399
板子能够将自身WIFI接收到的网络数据通过Ethernet网口分发出去,使其扩展成为像路由器一样的功能,并且可以自动分配IP给Client,做到自由上网。自动分配IP地址,则就想到了DHCP服务器的功能,但Android中是没有自带的DHCP服务器的,所以就涉及到DHCP服务器
移植
,
移植
方法网上有很多教程,此文针对
RK3399
平台,DHCP服务器
移植
的经验之淡,以便将来作回顾的用处。
移植
步骤
以下步骤基于Ubuntu16.04的环境下
1、先下载DHCP压缩包,网上有着各种的版本供选择。我这里下载的是dhcp-4.2.5版本的,有需要的可以由以下链接下载。
此次的数据格式是AV_PIX_FMT_NV12,所以采用以下进行播放
int width = tmp_frame->width, height = tmp_frame->height;
cv::Mat tmp_img = cv::Mat::zeros(height * 3 / 2, width, CV_8U.
按照上一篇文章的方式
移植
后发现可以正常操作图片文件,不能正常获取视频文件,后来发现是因为
OpenCV
中的视频API接口依赖于FFmpeg的支持,因此必须得
移植
合适版本的FFmpeg库,最新的不一定好,能用即可!
在嵌入式设备上做视频图像处理还是需要依赖强大的工具才行,虽然
移植
的过程比较痛苦,但是成功,后面的开发任务就轻松很多,事半功倍,可以将宝贵的时间放在更High-Leve
rk3399
是一种高性能,低功耗的嵌入式处理器,可用于嵌入式系统、智能手表、智能穿戴、智能家居、工业自动化等多种应用领域。Ubuntu 18.04是最新的Ubuntu操作系统版本,由于Ubuntu具有稳定、安全、易于使用等特点,因此在嵌入式应用中广泛使用。
为将Ubuntu 18.04
移植
到
rk3399
平台,需按以下步骤操作:
1.获取Ubuntu 18.04的源代码。
2.根据
rk3399
的硬件架构,为Ubuntu 18.04进行
交叉编译
,并生成相应的内核和文件系统。
3.下载并安装
rk3399
的bootloader。
4.将生成的内核和文件系统写入到
rk3399
的存储介质中。
5.使用串口连接
rk3399
,启动系统并进行相关配置。
6.测试系统,确保其在
rk3399
上正常运行。
需要注意的是,
移植
Ubuntu 18.04到
rk3399
平台可能会遇到一些问题,如无法正常启动、硬件驱动不兼容等。在
移植
过程中需要不断调试和解决问题,确保系统能够在
rk3399
上稳定运行。
总之,将Ubuntu 18.04
移植
到
rk3399
平台需要有一定的嵌入式系统开发经验和
Linux
操作系统基础,并且需要耐心和细心进行调试和解决问题,最终才能实现成功
移植
。