milkv-duo cvi-mmf 硬件加速 JPG 解码性能测试

2024-01-20 07:28

本文主要是介绍milkv-duo cvi-mmf 硬件加速 JPG 解码性能测试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

本文是基于 nihui 老师的 opencv-mobile 对其支持 milkv-duo cvi-mmf 硬件加速 JPG 解码的测试。
nihui 老师原文章如下:opencv-mobile 现已支持 milkv-duo cvi-mmf 硬件加速 JPG 解码
opencv-mobile 仓库地址如下:nihui/opencv-mobile: The minimal opencv for Android, iOS, ARM Linux, Windows, Linux, MacOS, WebAssembly (github.com)

仅供学习交流使用,侵删!

  1. opencv-mobile highgui 模块在运行时动态加载 cvi 库,JPG 硬件解码
  2. 无需修改代码,cv::imread()cv::imdecode() 自动支持
  3. 支持EXIF自动旋转,支持直接解码为grayscale
  4. 因为只测试验证了 milkv-duo/milkv-duo-256m,白名单暂时只有 milkv-duo/milkv-duo-256m

——nihui 老师

编译 opencv-mobile

这次的尝试同样是编译 opencv-mobile 和 opencv-mobile-test 程序并烧录到 milkv duo 开发板上使用,下载编译等流程基本一致(注意我的上篇文章中提到的 patches 文件夹小问题)。

另外,此次测试我尝试使用了内存更大的 Milkv duo 256 版本。使用区别仅在于需要使用新版镜像。

3d40c4941f72eed4a249a1e82f05dbe

基本流程和上一篇文章一样。

git pull 获取最新版本 opencv-mobile 源码后,首先需要检查修改 test 文件夹内的 CMakeLists.txt 文件为:

project(opencv-mobile-test)
cmake_minimum_required(VERSION 3.5)
set(CMAKE_CXX_STANDARD 11)set(OpenCV_DIR "${CMAKE_CURRENT_SOURCE_DIR}/opencv-mobile-4.8.1-milkv-duo/lib/cmake/opencv4")
find_package(OpenCV REQUIRED)add_executable(opencv-mobile-test main.cpp)target_link_libraries(opencv-mobile-test ${OpenCV_LIBS})

然后仍然是引入编译 opencv-4.8.1。自己编译的方式如下:

$ cd opencv-mobile$ wget -q https://github.com/opencv/opencv/archive/4.8.1.zip
$ unzip -q opencv-4.8.1.zip
$ cd opencv-4.8.1$ truncate -s 0 cmake/OpenCVFindLibsGrfmt.cmake
$ rm -rf modules/gapi
$ patch -p1 -i ../patches/opencv-4.8.1-no-rtti.patch
$ patch -p1 -i ../patches/opencv-4.8.1-no-zlib.patch
$ patch -p1 -i ../patches/opencv-4.8.1-link-openmp.patch
$ rm -rf modules/highgui
$ cp -r ../highgui modules/$ mkdir build
$ cd build
$ cmake -DCMAKE_TOOLCHAIN_FILE=../../toolchains/riscv64-unknown-linux-musl.toolchain.cmake -DCMAKE_C_FLAGS="-fno-rtti -fno-exceptions" -DCMAKE_CXX_FLAGS="-fno-rtti -fno-exceptions" -DCMAKE_INSTALL_PREFIX=install -DCMAKE_BUILD_TYPE=Release `cat ../../opencv4_cmake_options.txt` -DBUILD_opencv_world=OFF -DOPENCV_DISABLE_FILESYSTEM_SUPPORT=ON ..
$ make -j16
$ make install

不过项目主页上 nihui 老师已经放上了下载编译好的版本,可以直接下载到 opencv-mobile 文件夹中,省略上一步。下载链接:https://github.com/nihui/opencv-mobile/releases/latest/download/opencv-mobile-4.8.1.zip

img

编译 opencv-mobile-test 文件。

$ export RISCV_ROOT_PATH=$HOST_TOOL_PATH/gcc/riscv64-linux-musl-x86_64$ cd opencv-mobile/test$ mkdir build
$ cd build
$ cmake -DCMAKE_TOOLCHAIN_FILE=../../toolchains/riscv64-unknown-linux-musl.toolchain.cmake -DCMAKE_BUILD_TYPE=Release -DOpenCV_DIR=/home/nihui/dev/opencv-mobile/opencv-4.8.0/build/install/lib/cmake/opencv4 ..
$ make

运行结果

这次因为使用了 256MB Milkv Duo,所以应该可以尝试大一点的图片处理。我选用了一张3600KB的图片,opencv-mobile-test 仍然是简单的图片压缩处理(->200*200 大小)。

旧版程序:

[root@milkv-duo]~# time sh -c 'LD_LIBRARY_PATH=. ./opencv-mobile-test'
this device is not
real    0m 2.11s
user    0m 1.82s
sys     0m 0.27s
[root@milkv-duo]~# time sh -c 'LD_LIBRARY_PATH=. ./opencv-mobile-test'
this device is not
real    0m 2.11s
user    0m 1.82s
sys     0m 0.28s
[root@milkv-duo]~# time sh -c 'LD_LIBRARY_PATH=. ./opencv-mobile-test'
this device is not
real    0m 2.11s
user    0m 1.78s
sys     0m 0.31s
[root@milkv-duo]~# time sh -c 'LD_LIBRARY_PATH=. ./opencv-mobile-test'
this device is not
real    0m 2.10s
user    0m 1.78s
sys     0m 0.31s
[root@milkv-duo]~# time sh -c 'LD_LIBRARY_PATH=. ./opencv-mobile-test'
this device is not
real    0m 2.11s
user    0m 1.82s
sys     0m 0.27s

新版程序:

[root@milkv-duo]~# time sh -c 'LD_LIBRARY_PATH=. ./opencv-mobile-test'
this device is not whitelisted for jpeg encoder rkmpp
Command terminated by signal 11
real    0m 0.36s
user    0m 0.10s
sys     0m 0.15s
[root@milkv-duo]~# time sh -c 'LD_LIBRARY_PATH=. ./opencv-mobile-test'
this device is not whitelisted for jpeg encoder rkmpp
Command terminated by signal 11
real    0m 0.36s
user    0m 0.11s
sys     0m 0.14s
[root@milkv-duo]~# time sh -c 'LD_LIBRARY_PATH=. ./opencv-mobile-test'
this device is not whitelisted for jpeg encoder rkmpp
Command terminated by signal 11
real    0m 0.36s
user    0m 0.12s
sys     0m 0.13s
[root@milkv-duo]~# time sh -c 'LD_LIBRARY_PATH=. ./opencv-mobile-test'
this device is not whitelisted for jpeg encoder rkmpp
Command terminated by signal 11
real    0m 0.36s
user    0m 0.09s
sys     0m 0.17s
[root@milkv-duo]~# time sh -c 'LD_LIBRARY_PATH=. ./opencv-mobile-test'
this device is not whitelisted for jpeg encoder rkmpp
Command terminated by signal 11
real    0m 0.36s
user    0m 0.12s
sys     0m 0.13s

整体速度提升了5倍以上。

这篇关于milkv-duo cvi-mmf 硬件加速 JPG 解码性能测试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/625213

相关文章

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

黑神话,XSKY 星飞全闪单卷性能突破310万

当下,云计算仍然是企业主要的基础架构,随着关键业务的逐步虚拟化和云化,对于块存储的性能要求也日益提高。企业对于低延迟、高稳定性的存储解决方案的需求日益迫切。为了满足这些日益增长的 IO 密集型应用场景,众多云服务提供商正在不断推陈出新,推出具有更低时延和更高 IOPS 性能的云硬盘产品。 8 月 22 日 2024 DTCC 大会上(第十五届中国数据库技术大会),XSKY星辰天合正式公布了基于星

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

PR曲线——一个更敏感的性能评估工具

在不均衡数据集的情况下,精确率-召回率(Precision-Recall, PR)曲线是一种非常有用的工具,因为它提供了比传统的ROC曲线更准确的性能评估。以下是PR曲线在不均衡数据情况下的一些作用: 关注少数类:在不均衡数据集中,少数类的样本数量远少于多数类。PR曲线通过关注少数类(通常是正类)的性能来弥补这一点,因为它直接评估模型在识别正类方面的能力。 精确率与召回率的平衡:精确率(Pr

Verybot之OpenCV应用一:安装与图像采集测试

在Verybot上安装OpenCV是很简单的,只需要执行:         sudo apt-get update         sudo apt-get install libopencv-dev         sudo apt-get install python-opencv         下面就对安装好的OpenCV进行一下测试,编写一个通过USB摄像头采