8. 100ASK_V853-PRO开发板支持MPP媒体处理平台

news2024/11/20 18:38:14

0.前言

​ MPP 系统控制模块,根据芯片特性,完成硬件各个部件的复位、基本初始化工作,同时负责完成 MPP(Media Process Platform 媒体处理平台)系统各个业务模块的初始化、去初始化以及管理 MPP 系统各个业务模块的工作状态、提供当前 MPP 系统的版本信息等功能。 应用程序启动 MPP 业务前,必须完成 MPP 系统初始化工作。同理,应用程序退出 MPP 业务后,也要完成 MPP 系统去初始化工作,释放资源。

​ 本章主要讲述如何在Tina SDK中增加MPP补丁包和如何编译使用,该补丁包含有MPP部分的源码。具体MPP如何开发可以参考位于百度网盘中的100ASK_V853-PRO开发板的资料光盘中01_学习手册/《100ASK-V853_Pro系统开发手册》,该手册中的第四篇 基础组件开发中的第七章 Tina Linux 多媒体MPP 开发指南,此章节详细说明了100ASK_V853-PRO开发板针对MPP 系统控制模块的开发指导。

100ASK_V853-PRO开发板的资料光盘:

链接:https://pan.baidu.com/s/1TX742vfEde9bMLd9IrwwqA?pwd=sp6a
提取码:sp6a

全志MPP_sample_使用说明:https://tina.100ask.net/SdkModule/Linux_MPP_Sample_Instructions-01/

100ASK_V853-PRO开发板资料汇总:

链接:100ASK_100ASK-PRO 资料汇总 - Allwinner / V853-Pro - 嵌入式开发问答社区

100ASK_V853-PRO开发板购买链接:100ASK_V853-PRO开发板

image-20230418094041344

1.增加MPP扩展包

MPP扩展包:

下载完成后,将sunxi-mpp.tar.gz压缩包放入虚拟机的任意目录,假设放在/home/book/workspaces目录下,

例如:

ook@100ask:~/workspaces$ ls
100ASK_V853-PRO_TinaSDK  sunxi-mpp.tar.gz  tina-v853-open

解压sunxi-mpp.tar.gz压缩包,输入

tar -xzvf sunxi-mpp.tar.gz 

例如:

book@100ask:~/workspaces$ tar -xzvf sunxi-mpp.tar.gz 
sunxi-mpp/
sunxi-mpp/CMake/
sunxi-mpp/CMake/sunxi_mpp_lib.cmake
sunxi-mpp/CMake/sunxi_mpp_include.cmake
...

等待解压完成后进入sunxi-mpp目录下,即可查看当前目录下的文件

book@100ask:~/workspaces$ cd sunxi-mpp/
book@100ask:~/workspaces/sunxi-mpp$ ls
CMake  CMakeLists.txt  include  lib  README.md  sample  STAGING_DIR.sh  toolchain

下面对各文件夹进行说明

CMake:设置mpp各文件的头文件和依赖目录
CMakeLists.txt:设置编译文件、交叉编译工具链位置、依赖等位置和规则信息
include:包含MPP扩展包所需的头文件
lib:包含MPP扩展包所需的依赖文件
sample:包含MPP个应用示例源码
STAGING_DIR.sh:设置环境变量
toolchain:包含V853交叉编译工具链

2.编译MPP扩展包

添加交叉编译环境变量,这里仅需要增加sunxi-mpp的位置的环境变量,输入

book@100ask:~/workspaces/sunxi-mpp$ export CMAKE_CURRENT_SOURCE_DIR=~/workspaces/sunxi-mpp

激活环境变量,输入

book@100ask:~/workspaces/sunxi-mpp$ source STAGING_DIR.sh

创建build目录,用于编译和存储编译后的应用程序

book@100ask:~/workspaces/sunxi-mpp$ mkdir build

进入build目录下,执行cmake .. ,配置工具链、暂存目录和编译规则

book@100ask:~/workspaces/sunxi-mpp$ cd build/
book@100ask:~/workspaces/sunxi-mpp/build$ cmake ..
-- The C compiler identification is GNU 7.5.0
-- The CXX compiler identification is GNU 7.5.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- STAGING_DIR: build
-- Configuring done
-- Generating done
-- Build files have been written to: /home/book/workspaces/sunxi-mpp/build

执行完成后会在build目录下生成以下文件,其中bin目录用于存储生成后的二进制应用程序。

book@100ask:~/workspaces/sunxi-mpp/build$ ls
bin  CMakeCache.txt  CMakeFiles  cmake_install.cmake  Makefile  sample  STAGING_DIR.sh

编译mpp应用程序,输入

book@100ask:~/workspaces/sunxi-mpp/build$ make
Scanning dependencies of target sample_virvi2vo
[  1%] Building C object sample/sample_virvi2vo/CMakeFiles/sample_virvi2vo.dir/sample_virvi2vo.c.o
[  2%] Linking C executable ../../bin/sample_virvi2vo
[  2%] Built target sample_virvi2vo
...
Scanning dependencies of target sample_demux2adec2ao
[ 99%] Building C object sample/sample_demux2adec2ao/CMakeFiles/sample_demux2adec2ao.dir/sample_demux2adec2ao.c.o
[100%] Linking C executable ../../bin/sample_demux2adec2ao
[100%] Built target sample_demux2adec2ao

编译完成后可以进入bin目录下查看编译生成的二进制文件。

book@100ask:~/workspaces/sunxi-mpp/build$ cd bin/
book@100ask:~/workspaces/sunxi-mpp/build/bin$ ls
sample_adec               sample_CodecParallel         sample_MotionDetect         sample_uvc2vo        sample_virvi2venc
sample_aec                sample_demux2adec            sample_multi_vi2venc2muxer  sample_uvcout        sample_virvi2venc2muxer
sample_aenc               sample_demux2adec2ao         sample_rtsp                 sample_uvc_vo        sample_virvi2vo
sample_ai                 sample_demux2vdec            sample_smartIPC_demo        sample_venc          sample_virvi2vo_zoom
sample_ai2aenc            sample_demux2vdec2vo         sample_smartPreview_demo    sample_venc2muxer    sample_vo
sample_ai2aenc2muxer      sample_demux2vdec_saveFrame  sample_timelapse            sample_vi_g2d        yuv420pTobmp
sample_ao                 sample_driverVipp            sample_UILayer              sample_vin_isp_test
sample_ao_resample_mixer  sample_g2d                   sample_uvc2vdec_vo          sample_vi_reset
sample_aoSync             sample_glog                  sample_uvc2vdenc2vo         sample_virvi

关于如何测试使用MPP应用程序,请一定要参考:

全志MPP_sample_使用说明:https://tina.100ask.net/SdkModule/Linux_MPP_Sample_Instructions-01/

如果《全志MPP_sample_使用说明》中没有测试说明,可查看每个示例程序中的Readme.txt。例如,假设我需要sample_driverVipp程序,需要进入该源码目录下,输入

book@100ask:~/workspaces/sunxi-mpp$ cd sample/sample_driverVipp/
book@100ask:~/workspaces/sunxi-mpp/sample/sample_driverVipp$ ls
CMakeLists.txt  Readme.txt  sample_driverVipp.c  sample_driverVipp.h

可以看到源码目录中有一个Readme.txt文件,该文件详细说明了如何进行测试。

book@100ask:~/workspaces/sunxi-mpp/sample/sample_driverVipp$ cat Readme.txt 
sample_driverVipp:
    该sample演示直接调用linux内核驱动获取frame。按下ctrl+c,终止测试。
    每隔若干帧保存一帧到指定的目录。

读取测试参数的流程:
    sample只支持命令行模式输入参数。如果不输入参数,会提示输入。
    从命令行启动sample_driverVipp的指令:
    ./sample_driverVipp
    或
    ./sample_driverVipp 0 1920 1080 8 60 0 10 60 /mnt/extsd

测试参数的说明:
(1)video device: 0~3 (vipp0~vipp3)
(2)capture_width:指定camera采集的图像宽度
(3)capture_height:指定camera采集的图像高度
(4)pixel_format:指定camera采集的图像格式
(5)fps:指定camera采集的帧率
(6)test frame count:指定测试采集的frame总数,0表示无限。
(7)store count: 指定保存的图像数量。
(8)store interval: 指定保存图像的周期,即每n帧图像保存1帧。
(9)frame saving path: 指定保存图像的目录,该目录要确保存在。

​ 如果您想使用MPP进行开发,编写自己的应用程序,请阅读位于百度网盘资料中的100ASK_V853-PRO开发板的资料光盘中01_学习手册/《100ASK-V853_Pro系统开发手册》,该手册中的第四篇 基础组件开发中的第七章 Tina Linux 多媒体MPP 开发指南,此章节详细说明了100ASK_V853-PRO开发板针对MPP 系统控制模块的开发指导。

3.测试MPP应用程序

测试MPP应用程序需要增加开发板的依赖文件,该依赖文件位于sunxi-mpp/lib目录下,如下图所示

在这里插入图片描述

将该目录下的全部文件拷贝到开发板的lib目录下,假设我使用TF卡将其拷贝到开发板上,将lib文件夹拷贝到TF卡中,在将TF插入100ASK_V853-PRO开发板上,挂载TF卡,输入

root@TinaLinux:/# mount /dev/mmcblk1p1 /mnt/extsd/

挂载完成后进入TF目录下

root@TinaLinux:/# cd /mnt/extsd/
root@TinaLinux:/mnt/extsd# ls
System Volume Information        lib

可以看到lib文件夹,将lib目录下的全部文件拷贝到开发板的lib目录下,输入

root@TinaLinux:/mnt/extsd# cp lib/* /lib/

等待拷贝完成即可。

3.1 测试LCD上实时预览摄像头数据应用程序

​ 硬件要求:100ASK_V853-PRO开发板、4寸MIPI显示屏、MIPI摄像头。

​ 示例名称为:sample_virvi2vo

​ 源码路径:sunxi-mpp/sample/sample_virvi2vo/

​ 该示例演示了通过摄像头获取数据并实时显示在LCD屏幕上,下面演示如何将编译好的应用程序在100ASK_V853-PRO开发板上运行。

​ 编译mpp扩展包后,会在sunxi-mpp/build/bin目录下生成sample_virvi2vo文件,将生成的文件拷贝到TF卡上备用。

​ 将sunxi-mpp/sample/sample_virvi2vo目录下的sample_virvi2vo.conf拷贝到TF卡下备用。

​ 将sunxi-mpp/lib整个目录拷贝到TF卡备用。

拷贝完成后,将TF卡插入100ASK_V853-PRO开发板后,将TF卡挂载到开发板上,输入mount /dev/mmcblk1p1 /mnt/extsd/

root@TinaLinux:/# mount /dev/mmcblk1p1 /mnt/extsd/
[  168.601231] FAT-fs (mmcblk1p1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.

进入挂载目录/mnt/extsd/

root@TinaLinux:/# cd /mnt/extsd/

查看对应文件是否存在

root@TinaLinux:/mnt/extsd# ls
System Volume Information  sample_virvi2vo
sample_virvi2vo.conf

运行测试程序,输入./sample_virvi2vo -path ./sample_virvi2vo.conf

 root@TinaLinux:/mnt/extsd# ./sample_virvi2vo -path ./sample_virvi2vo.conf

执行完后,会在MIPI屏上实时显示摄像头获取的图像数据。

应用程序执行设定时间后会自动结束,也可以通过按下Crtl+C提前结束测试。

3.2 测试实时预览人脸识别和人形识别应用程序

​ 硬件要求:100ASK_V853-PRO开发板、4寸MIPI显示屏、MIPI摄像头。

​ 示例名称为:sample_smartPreview_demo

​ 源码路径:sunxi-mpp/sample/sample_smartPreview_demo

​ 该示例演示了通过摄像头获取图像数据后使用人脸模型或人形模型进行处理后,将打框后的结果实时显示在LCD屏幕上,下面演示如何将编译好的应用程序在100ASK_V853-PRO开发板上运行。

​ 编译mpp扩展包后,会在sunxi-mpp/build/bin目录下生成sample_smartPreview_demo文件,将生成的文件拷贝到TF卡上备用。

​ 将sunxi-mpp/sample/sample_smartPreview_demo/models/fdet目录下的face.nb人脸模型拷贝到TF卡中备用。

​ 将sunxi-mpp/sample/sample_smartPreview_demo/models/pdet目录下的2.0.0_Gamma.nb人形模型文件拷贝到TF卡中备用。

​ 将sunxi-mpp/sample/sample_smartPreview_demo目录下的sample_smartPreview_demo.conf参数文件拷贝到TF卡中备用。

拷贝完成后,将TF卡插入100ASK_V853-PRO开发板后,将TF卡挂载到开发板上,输入mount /dev/mmcblk1p1 /mnt/extsd/

root@TinaLinux:/# mount /dev/mmcblk1p1 /mnt/extsd/
[  168.601231] FAT-fs (mmcblk1p1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.

进入挂载目录/mnt/extsd/

root@TinaLinux:/# cd /mnt/extsd/

查看对应文件是否存在

root@TinaLinux:/mnt/extsd# ls
2.0.0_Gamma.nb                   sample_smartPreview_demo
System Volume Information        sample_smartPreview_demo.conf
face.nb

修改sample_smartPreview_demo.conf文件,假设我这里使用的是百问网的4寸MIPI屏和2Line MIPI摄像头,需要测试的是人脸识别模型,需要修改该文件为:

########### paramter (ref to tulip_cedarx.conf)############
[parameter]
main_isp_dev = 0
main_vipp_dev = 0
main_capture_width = 360
main_capture_height = 640
main_layer_num = 0
main_display_x = 0
main_display_y = 0
main_display_width = 480
main_display_height = 800
main_nn_nbg_type = 1                    #-1:disable, 0:human, 1:face
main_nn_isp = 0
main_nn_vipp = 8
main_nn_vi_buf_num = 3
main_nn_src_frame_rate = 20             #fps
main_nn_nbg_file_path = "face.nb"
main_nn_draw_orl_enable = 1

sub_isp_dev = 1
sub_vipp_dev = 1
sub_capture_width = 1920
sub_capture_height = 1080
sub_layer_num = 1
sub_display_x = 0
sub_display_y = 00
sub_display_width = 480
sub_display_height = 800
sub_nn_nbg_type = 1                    #-1:disable, 0:human, 1:face
sub_nn_isp = 1
sub_nn_vipp = 9
sub_nn_vi_buf_num = 3
sub_nn_src_frame_rate = 20             #fps
sub_nn_nbg_file_path = "face.nb"
sub_nn_draw_orl_enable = 1

disp_type = "lcd"                      #disp_type is lcd, hdmi, cvbs
pic_format = "nv21"                    #pic_format is yu12, yv12, nv21, nv12
frame_rate = 20                        #fps

orl_thick=200
test_duration = 0                      #unit:s, 0:Infinite duration.

如果需要测试人形检测,也需要修改sample_smartPreview_demo.conf文件中的,将main_nn_nbg_type设置为0、main_nn_nbg_file_path设置为人形模型的路径名称,例如:

main_nn_nbg_type = 1 
main_nn_nbg_file_path = "2.0.0_Gamma.nb"

运行测试程序:

root@TinaLinux:/mnt/extsd# ./sample_smartPreview_demo -path sample_smartPreview_demo.conf 

执行后,显示屏端会接收摄像头的数据,但一开始会丢弃部分图像数据,可能会导致一开始的画面卡顿。测试成功后会在显示屏上实时显示摄像头的数据,并可以对摄像头的图像中的人脸进行打框。

4.总结

​ 对于其他应用程序这里就不逐一去演示,大家可以参考每个示例的程序的Readme.txt或《全志MPP_sample_使用说明》进行测试体验,参考《Tina Linux 多媒体MPP 开发指南》进行开发。MPP媒体处理平台的可玩性和公开程度都适合大家去开发自己的应用程序,希望通过这章节可以让大家了解MPP的使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/516445.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python基于LBP+SVM开发构建基于fer2013数据集的人脸表情识别模型是种什么体验,让结果告诉你...

本身LBPSVM是比较经典的技术路线用来做图像识别、目标检测,没有什么特殊的地方 fer2013数据集在我之前的博文中也有详细的实践过,如下: 《fer2013人脸表情数据实践》 系统地基于CNN开发实现 《Python实现将人脸表情数据集fer2013转化为图像…

IP网络电话呼叫转移设置

这里的网络电话呼叫转移设置,我们以IP电话系统用方位的网络电话机为例说明 通话转移 当用户正在与对方通话时,并希望将呼叫转移到其他号码,这里有两种方法来转移呼叫,出席移转和非出席移转。 出席移转 出席移转也被称为“礼貌…

条形码阅读器 CnetSDK Barcode Scanner SDK Crack

条形码阅读器组件SDK CnetSDK Barcode Scanner SDK 为.NET程序员提供了一个免费测试的条形码阅读器软件,称为.NET Barcode Scanner SDK。它在从许多图像文件中读取条形码和识别条形码方面非常有效。这个.NET条形码库支持最流行的线性和2D条形码,如QR码&a…

膨胀阀的结构和工作原理(详细篇)

膨胀阀的工作原理 编辑搜图 膨胀阀也称节流阀,是组成汽车空调制冷系统的主要部件,安装在蒸发器入口处,如图 所示,是汽车空调制冷系统的高压与低压的分界点。其功用是:把来自贮液干燥器的高压液态制冷剂节流减压&#…

第五十七章 Unity 混音器

本章节我们介绍Unity 混音器 (Audio Mixer),它允许我们混合各种音频源,并对音频源进行统一控制或应用各种效果。在Unity中混音器是一种资源文件,可以右键Create创建AudioMixer文件。虽然它是一个文件,但是Unity提供了图形化界面来…

人大李崇轩:我的生成模型修炼之路丨智源大会嘉宾风采

导读 AIGC的飞速发展离不开生成模型、深度学习以及多模态学习等领域研究的不断累积,其中生成模型的原理与算法发展是不可或缺的一部分,如:生成对抗网络 GAN 及其一系列变体、变分自编码器 VAE 及其一系列变体、自回归模型 AR、流模型 FLOW &a…

考虑多能负荷不确定性的区域综合能源系统鲁棒规划(MatlabPython代码)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Interiorai: 室内设计工具平台

【产品介绍】 Interiorai是一个可以让用户从自己的房间照片中生成不同风格的室内设计的在线平台。用户只需上传一张房间的照片,选择想要的设计风格和模式,就可以看到AI生成的室内设计效果,并且可以下载或分享。帮助用户快速找到装修或改造房间…

即时聊天app开发-即时通讯app开发方案分析

如今,即时聊天APP层出不穷,它已经成为人们日常生活中密不可分的社交工具。如今,即时聊天APP不仅是聊天工具,也是企业营销的利器。我们经常可以在聊天主页上看到一些广告。如有必要,用户可以直接点击广告了解详情。即时…

五、云对象存储以及课程分类管理模块

本项目的存储图片和音频文件都存储在腾讯云的服务器中,本章先介绍存储图片的方式。 存储桶文件创建: 存储桶项目存储内容: APPID和密钥管理: APPID和密钥是整个云存储最为重要的验证依据,在配置文件中应用。 现在简要…

超大规模数据库集群保稳系列之一:高可用系统

总第560篇 2023年 第012篇 基于过去多年在大规模数据集群保稳方面的实践经验,我们希望能够跟业界进行一些技术交流,美团技术团队举办了第75期技术沙龙。我们邀请到了美团研究员赵应钢担任出品人,同时请邀请到张洪、王占全、蔺瑞超、沈裕锋等4…

【Linux】进程信号(上)

文章目录 1.信号概念理解信号产生信号保存信号处理 2. 信号的产生证明输入 CTRL C 就是向前台进程发送信号signal 函数内部参数传递的理解对于信号自定义动作的捕捉问题 3.信号产生的方式1.从键盘输入2.使用系统调用向进程发送信号killraiseabort 3.由软件条件产生信号 1.信号概…

轻博客Plume的搭建

什么是 Plume ? Plume 是一个基于 ActivityPub 的联合博客引擎。它是用 Rust 编写的,带有 Rocket 框架,以及 Diesel 与数据库交互。前端使用 Ructe模板、WASM 和SCSS。 反向代理 假设我们实际访问地址为: https://plume.laosu.ml…

Map和WeakMap对象的用法(JS)

📝个人主页:爱吃炫迈 💌系列专栏:数据结构与算法 🧑‍💻座右铭:道阻且长,行则将至💗 文章目录 🌸Mapkey创建map的其他方式Map常用方法Map结构原生提供三个遍历…

项目成本管理

定义:项目各个成本的总和 作用:在预算范围内完成项目 考点: 直接成本是指一个由项目组承担的费用,例如员工的工资,电脑等硬件费用。 间接成本是指由多个项目组承担的费用,例如租金,水电费&am…

社交媒体中的“点赞”“喜欢”是如何存储在数据库中的?

你有没有想过 Instagram、Twitter、Facebook 或任何社交媒体平台如何跟踪谁喜欢你的帖子?让我们在这篇文章中弄清楚! 1:序言 最近,我受邀在一个名为“CityJS”的活动中发言。但问题在于:我是 PHP 开发人员。我根本不懂…

Palo Alto Networks利用基于机器学习的自动化网络安全解决方案

“ Palo Alto Networks利用第三代英特尔至强可扩展处理器和部署在云中的英特尔软件,为其云端安全服务提供强有力的支持,从而提升机器学习和推断的性能。 面对恶意软件攻击的快速演变和难以捉摸的特性,企业网络安全团队面临着巨大的挑战。恶意…

"五步走"的MES系统改进战略,让ERP不再是面子工程

随着制造业信息化进程的不断推进,大部分的制造业企业都开始意识到,生产技术的领先和生产流程的有效管理是其发展的重要一环,有些企业已经或者正在实施的 ERP系统。但是,从相关部门的数据来看, ERP在分散型制造业企业中…

算法(一)—— 回溯(1)

文章目录 前言1 77 组合2 77 组合优化 前言 1、回溯法解决的问题都可以抽象为树形结构(N叉树),使用树形结构来理解回溯。 2、回溯法解决的都是在集合中递归查找子集,集合的大小就构成了树的宽度,递归的深度&#xff…

FPGA基于GS2971/GS2972实现SDI视频收发 提供工程源码和技术支持

目录 1、前言2、我目前已有的SDI编解码方案3、GS2971/GS2972芯片解读GS2971解读GS2972解读 4、详细设计方案5、vivado工程1解读硬件逻辑工程软件SDK工程 6、vivado工程2解读硬件逻辑工程软件SDK工程 7、上板调试验证8、福利:工程代码的获取 1、前言 FPGA实现SDI视频…