rk3399pro使用

记录自己rk3399proc的使用

rk3399proC 是属于 firefly的产品,官方维基教程
rk3399proD 是属于 toybrick的产品,官方维基教程
两家的rk3399pro开发板名字是不一样的,虽然都是用的瑞芯微的芯片,但可能因为底板的不同,刷机镜像也不同(proc是ubuntu、prod是debian)。
了解硬件可以参考: https://blog.csdn.net/SMF0504/article/details/120322652

rk3399pro上部署算法

  1. 模型转换: 使用rknn-toolkit(pc或者开发板都可以使用)模型转换(推荐使用可视化界面)
    参考官方提供的文档
conda create -n rknn-toolkit python=3.6 # 创建conda环境
conda activate rknn-toolkit # 激活环境
pip3 install tensorflow==1.11.0 -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com # 安装cpu版本tensorflow
pip3 install torch==1.5.1 -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com # 安装torch
pip3 install torchvision==0.6.1 -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com # 安装torchvision
pip3 install mxnet==1.5.0 -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com # 安装mxnet
pip3 install rknn_toolkit-1.6.0-cp36-cp36m-linux_x86_64.whl # 安装rknn-toolkit
python3 -m rknn.bin.visualization # 启动rknn-toolkit可视化界面

如果pip 下载安装包遇到了 下面这个错误

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 49: ordinal not in range(128)

解决(修改系统编码):

export LANG=en_US
export LC_ALL=en_US.UTF-8

模型转换如下:

  1. c++实现
    参考官方提供的rknn_demo,如果只是单个算法的使用也可以参考npu驱动里的demo
    librga源码
    rkmedia的使用

  2. 开发板部署
    需要准备开发板上的环境,主要是开发板npu-driver的升级,我使用的是rk3399proC(proD也一样)

sudo apt update # 更新源
sudo apt search 3399pro # 查看 驱动版本
sudo apt install firefly-3399pronpu-driver # 安装firefly的npu的驱动(开发板不同这个命令可能不同)
sudo apt search librga # 搜索 可安装的RGA
sudo apt install librga2 librga-dev # 安装librga(板子的/usr/lib目录下有一个librga,应该是镜像自带的,不是apt装的,然后我删除了)
sudo apt search mpp
sudo apt install librockchip-mpp-dev # 更新mpp

开发板的npu驱动版本多少,那么使用的rknn-toolkit版本不要超过该版本。

firefly rk3399ProC 的mpp试用

我参考了基于ffmpeg和mpp的 github上的demo,可能因为版本不同吧,我进行了一点点的改动才能正常使用。

  1. 环境准备
sudo apt install librockchip-vpu0 librockchip-mpp-dev librockchip-mpp-static librockchip-mpp1 # 更新 mpp 
sudo apt install libavcodec-dev libavformat-dev libavutil-dev libavresample-dev libswscale-dev ffmpeg # 安装 ffmpeg
sudo apt install libopencv-dev # 安装opencv 源码编译也行

  1. 源码的修改
  • CMakelist
cmake_minimum_required(VERSION 3.5.1)

set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)

# set(tools /usr/local/cross-compile/aarch64-cc/)
# set(CMAKE_C_COMPILER ${tools}/bin/aarch64-linux-gnu-gcc)
# set(CMAKE_CXX_COMPILER ${tools}/bin/aarch64-linux-gnu-g++)
set(CMAKE_C_COMPILER gcc)
set(CMAKE_CXX_COMPILER g++)

set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)


project(mpp_test)

set(CMAKE_CXX_STANDARD 14)

set(CMAKE_CXX_FLAGS "-O0 -g")

include_directories(
	/usr/include/aarch64-linux-gnu
	# ${CMAKE_CURRENT_LIST_DIR}/ffm_inc
	${CMAKE_CURRENT_LIST_DIR}/rockchip
)

link_directories(
	/env/platforms/aarch64/so
	/env/platforms/aarch64/static
	/usr/local/lib
	# ${CMAKE_CURRENT_LIST_DIR}/firefly_mpplib
	# ${CMAKE_CURRENT_LIST_DIR}/ffm_lib
	
)

# set(OpenCV_DIR /home/firefly/software/opencv-4.1.2/install/lib/cmake/opencv4)
set(OpenCV_DIR /home/firefly/software/opencv-3.2.0/install/share/OpenCV)
find_package(OpenCV)
if(OpenCV_FOUND)
    INCLUDE_DIRECTORIES(${OpenCV_INCLUDE_DIRS})
    message(STATUS "OpenCV library status:")
    message(STATUS "    version: ${OpenCV_VERSION}")
    message(STATUS "    libraries: ${OpenCV_LIBS}")
    message(STATUS "    include path: ${OpenCV_INCLUDE_DIRS}")
endif()

add_executable(mpp_test MppDecode.cpp MppDecode.h main.cpp)

target_link_libraries(mpp_test
        rockchip_mpp
        /home/firefly/ffmpeg_rtsp_mpp-master/firefly_mpplib/libutils.a
        avformat
        avcodec
		avutil
		# opencv_core
		# opencv_highgui
		# opencv_imgproc
		# opencv_imgcodecs
		m
		${OpenCV_LIBS}
)

  • yuv转bgr那个函数没有加引用(可能作者忘了吧,我把引用加上后,再把作者屏蔽的保存图片打开,测试验证保存的图片是正常的)
void YUV420SP2Mat(MppFrame  frame, cv::Mat &rgbImg ) 

作者用的是opencv进行的转换,可以用RGA做转换

使用总结

使用firefly的 rk3399proc之后,个人感觉在其ubuntu系统上开发还是非常的简单的,另外github上的demo也很丰富。根据官方demo,我调通了以下流程:

  • ffmpeg 读rtsp流(参考github demo)
  • mpp中的VDEC对视频流解码(参考github demo)
  • 利用RGA模块对mpp解码出来的yuv420sp数据进行处理得到模型输入的RGB数据(RGA支持格式转换、颜色填充、缩放等等操作)
  • 利用rknn api调用npu获取模型输出
  • rk3399pro上 npu是一个usb设备,可以通过 lsusb 查看设备,另外可以用 npu_powerctrl 来控制npu

rk3399pro 频率设置

  1. cpu
sudo -s
cat /sys/devices/system/cpu/cpufreq/policy0/scaling_available_frequencies # 查看 4个A53核心 可设置的频率
cat /sys/devices/system/cpu/cpufreq/policy0/scaling_available_governors # 查看可设置模式
cat /sys/devices/system/cpu/cpufreq/policy0/cpuinfo_cur_freq # 查看当前cpu频率
echo 1416000 > /sys/devices/system/cpu/cpufreq/policy0/scaling_max_freq # 设置最大频率
echo performance > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor # 设置性能模式 (定频且最大频率)

cat /sys/devices/system/cpu/cpufreq/policy4/scaling_available_frequencies # 查看 2个A72核心 可设置的频率
cat /sys/devices/system/cpu/cpufreq/policy4/scaling_available_governors # 查看可设置模式
cat /sys/devices/system/cpu/cpufreq/policy4/cpuinfo_cur_freq # 查看当前cpu频率
echo 1800000 > /sys/devices/system/cpu/cpufreq/policy4/scaling_max_freq # 设置最大频率
echo performance > /sys/devices/system/cpu/cpufreq/policy4/scaling_governor # 设置性能模式 (定频且最大频率)

echo userspace /sys/devices/system/cpu/cpufreq/policy4/scaling_governor # 设置用户自定义频率模式
echo 1608000 > /sys/devices/system/cpu/cpufreq/policy4/scaling_setspeed # 设置频率并定频
  1. mali gpu
cat /sys/devices/platform/ff9a0000.gpu/devfreq/ff9a0000.gpu/device/gpuinfo # 查看gpu信息
cat /sys/devices/platform/ff9a0000.gpu/devfreq/ff9a0000.gpu/available_frequencies # 查看可设置的频率
cat /sys/devices/platform/ff9a0000.gpu/devfreq/ff9a0000.gpu/available_governors # 查看可设置的模式
cat /sys/devices/platform/ff9a0000.gpu/devfreq/ff9a0000.gpu/governor # 查看当前模式
cat /sys/devices/platform/ff9a0000.gpu/devfreq/ff9a0000.gpu/cur_freq # 查看当前频率
cat /sys/devices/platform/ff9a0000.gpu/devfreq/ff9a0000.gpu/load # 查看 gpu 占用
watch -n 1 cat /sys/devices/platform/ff9a0000.gpu/devfreq/ff9a0000.gpu/load # 监控 gpu 占用
echo 800000000 > /sys/devices/platform/ff9a0000.gpu/devfreq/ff9a0000.gpu/max_freq # 设置最大频率
echo performance > /sys/devices/platform/ff9a0000.gpu/devfreq/ff9a0000.gpu/governor # 设置性能模式
posted @ 2021-09-13 09:11  cc96  阅读(2582)  评论(0编辑  收藏  举报