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

相关文章

Python使用自带的base64库进行base64编码和解码

《Python使用自带的base64库进行base64编码和解码》在Python中,处理数据的编码和解码是数据传输和存储中非常普遍的需求,其中,Base64是一种常用的编码方案,本文我将详细介绍如何使... 目录引言使用python的base64库进行编码和解码编码函数解码函数Base64编码的应用场景注意

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

Redis中高并发读写性能的深度解析与优化

《Redis中高并发读写性能的深度解析与优化》Redis作为一款高性能的内存数据库,广泛应用于缓存、消息队列、实时统计等场景,本文将深入探讨Redis的读写并发能力,感兴趣的小伙伴可以了解下... 目录引言一、Redis 并发能力概述1.1 Redis 的读写性能1.2 影响 Redis 并发能力的因素二、

Python实现PDF与多种图片格式之间互转(PNG, JPG, BMP, EMF, SVG)

《Python实现PDF与多种图片格式之间互转(PNG,JPG,BMP,EMF,SVG)》PDF和图片是我们日常生活和工作中常用的文件格式,有时候,我们可能需要将PDF和图片进行格式互转来满足... 目录一、介绍二、安装python库三、Python实现多种图片格式转PDF1、单张图片转换为PDF2、多张图

Golang中拼接字符串的6种方式性能对比

《Golang中拼接字符串的6种方式性能对比》golang的string类型是不可修改的,对于拼接字符串来说,本质上还是创建一个新的对象将数据放进去,主要有6种拼接方式,下面小编就来为大家详细讲讲吧... 目录拼接方式介绍性能对比测试代码测试结果源码分析golang的string类型是不可修改的,对于拼接字

mysql线上查询之前要性能调优的技巧及示例

《mysql线上查询之前要性能调优的技巧及示例》文章介绍了查询优化的几种方法,包括使用索引、避免不必要的列和行、有效的JOIN策略、子查询和派生表的优化、查询提示和优化器提示等,这些方法可以帮助提高数... 目录避免不必要的列和行使用有效的JOIN策略使用子查询和派生表时要小心使用查询提示和优化器提示其他常

SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程

《SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程》本文详细介绍了如何在虚拟机和宝塔面板中安装RabbitMQ,并使用Java代码实现消息的发送和接收,通过异步通讯,可以优化... 目录一、RabbitMQ安装二、启动RabbitMQ三、javascript编写Java代码1、引入

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

Tomcat高效部署与性能优化方式

《Tomcat高效部署与性能优化方式》本文介绍了如何高效部署Tomcat并进行性能优化,以确保Web应用的稳定运行和高效响应,高效部署包括环境准备、安装Tomcat、配置Tomcat、部署应用和启动T... 目录Tomcat高效部署与性能优化一、引言二、Tomcat高效部署三、Tomcat性能优化总结Tom