►
概述
我们将在hi3516dv300 sdk的基础之上进行开发,分别为手部检测+手势识别实验,垃圾分类实验。手部检测+手势识别实验以及垃圾分类实验,主要基于训练好的wk模型在板端进行部署,并充分发挥海思ive、nnie硬件加速能力,完成ai推理和业务处理。
►
目录
ai_sample在hi3516dv300 sdk基础上进行开发,在利用媒体通路的基础上,通过捕获vpss帧进行预处理操作,并送至nnie进行推理,结合ai cpu算子最终得到ai flag并进行相应业务处理,该ai sample集成了垃圾分类、手势检测识别两个基础场景,运用到媒体理论、多线程、ipc通信、ive、nnie等思想,实现了一个轻量级sample,方便开发者了解taurus hi3516dv300的ai能力,ai_sample目录结构如下:
//device/soc/hisilicon/hi3516dv300/sdk_linux/sample/taurus/ai_sample│ build.gn # 编译ohos ai_sample需要的gn文件├─ai_infer_process # ai前处理、推理、后处理相关接口│ ├─ai_infer_process.c│ └─ai_infer_process.h├─dependency # ai sample依赖的一些功能,如语音播报│ ├─audio_test.c│ └─audio_test.h├─ext_util # 常用的基础接口、可移植操作系统接口posix等│ ├─base_interface.c│ ├─base_interface.h│ ├─misc_util.c│ ├─misc_util.h│ ├─posix_help.c│ └─posix_help.h├─mpp_help # 封装的媒体相关接口│ ├─include│ │ ├─ive_img.h│ │ └─vgs_img.h│ └─src│ ├─ive_img.c│ └─vgs_img.c├─scenario│ ├─cnn_trash_classify # 垃圾分类sample│ │ ├─cnn_trash_classify.c│ │ └─cnn_trash_classify.h│ └─hand_classify # 手部检测+手势识别sample│ ├─hand_classify.c│ ├─hand_classify.h│ ├─yolov2_hand_detect.c│ └─yolov2_hand_detect.h└─smp # ai sample主入口及媒体处理文件 ├─sample_ai_main.cpp ├─sample_media_ai.c └─sample_media_ai.h
►
拷贝第三方库
步骤1:在源码的根目录下,分步执行下面的命令,拷贝第三方库至ai sample中
mkdir device/soc/hisilicon/hi3516dv300/sdk_linux/sample/taurus/ai_sample/third_party/src/ -pcp third_party/iniparser device/soc/hisilicon/hi3516dv300/sdk_linux/sample/taurus/ai_sample/third_party/src/ -rf
步骤2:使用ide打开device/soc/hisilicon/hi3516dv300/sdk_linux/sample/taurus/ai_sample/third_party/src/iniparser/src/iniparser.c文件,把第15行的1024改成8192。
#define asciilinesz ((8192)) // (1024)
►
编译
在编译ai_sample之前,需确保openharmony 小型系统的主干代码已经整编通过,且已经按照《修改源码及配置文件适配taurus开发板》的内容进行修改。在单编ai_sample之前,需修改目录下的一处依赖,进入//device/soc/hisilicon/hi3516dv300/sdk_linux目录下,通过修改build.gn,在deps下面新增target,sample/taurus/ai_sample:hi3516dv300_ai_sample,如下图所示:
点击deveco device tool工具的build按键进行编译,具体的编译过程这里不再赘述,编译成功后,如下图所示:
编译成功后,即可在out/hispark_taurus/ipcamera_hispark_taurus_linux/rootfs/bin目录下,生成 ohos_camera_ai_demo可执行文件,如下图所示:
►
拷贝可执行程序和依赖文件至开发板的mnt目录下
方式一:使用sd卡进行资料文件的拷贝
首先需要自己准备一张sd卡:
步骤1:将编译后生成的可执行文件拷贝到sd卡中。
步骤2:将devicesochisiliconhi3516dv300sdk_linuxoutlib目录下的libvb_server.so和 libmpp_vbs.so拷贝至sd卡中
步骤3:将device/soc/hisilicon/hi3516dv300/sdk_linux/sample/taurus/目录下的models文件夹和aac_file文件夹拷贝至sd卡中。(前提是按照《获取sample依赖的资源文件到本地》文档获取了资源文件)
步骤4:可执行文件拷贝成功后,将内存卡插入开发板的sd卡槽中,可通过挂载的方式挂载到板端,可选择sd卡 mount指令进行挂载。
mount -t vfat /dev/mmcblk1p1 /mnt# 其中/dev/mmcblk1p1需要根据实际块设备号修改
挂载成功后,如下图所示:
方式二:使用nfs挂载的方式进行资料文件的拷贝
首先需要自己准备一根网线:
步骤1:参考博客链接中的内容,进行nfs的环境搭建;
步骤2:将编译后生成的可执行文件拷贝到windows的nfs共享路径下;
步骤3:将devicesochisiliconhi3516dv300sdk_linuxoutlib目录下的libvb_server.so和 libmpp_vbs.so拷贝至windows的nfs共享路径下;
步骤4:将device/soc/hisilicon/hi3516dv300/sdk_linux/sample/taurus/目录下的models文件夹和aac_file文件夹拷贝至windows的nfs共享路径下(前提是按照《获取sample依赖的资源文件到本地》文档获取了资源文件)。
步骤5:依赖文件拷贝至windows的nfs共享路径下后,执行下面的命令,将windows的nfs共享路径挂载至开发板的mnt目录下
mount -o nolock,addr=192.168.200.1 -t nfs 192.168.200.1:/d/nfs /mnt
►
拷贝mnt目录下的文件至正确的目录下
执行下面的命令,拷贝mnt目录下面的ohos_camera_ai_demo至userdata目录,拷贝mnt目录下面的libvb_server.so和 libmpp_vbs.so至/usr/lib/目录下,再将models和aac_file文件夹拷贝至userdata目录下
cp /mnt/ohos_camera_ai_demo /userdata/cp /mnt/*.so /usr/lib/cp /mnt/models /userdata/ -rfcp /mnt/aac_file /userdata/ -rf
执行下面的命令,给ohos_camera_ai_demo文件可执行权限
湖南省人大常委会党组副书记一行到访国科微调研
基于PID控制算法的智能小车设计方案
智能卡口监控补光灯主要作用是什么?有哪些特点?
浅谈易用性测试及GUI常见的测试要求
智云股份再获TPK8827万元大单 得行业人士认可
OpenHarmony基于润和Hi3516开发套件
明基笔记本保修条例
iphone8即将开卖:为新品让路,iphone7无奈跌至历史最低价!买不买?
【世说芯品】科技与乐趣碰撞,芯讯通解锁运动新玩法
机器人FOLGE程序是如何被调用激活的呢?
你知道吗?数据显示英特尔Core M处理器“完爆”苹果A8
3C绿色能源:甲醇燃料电池
容联云发布赤兔大模型,一次由内而外的自我重塑
软通动力助力餐饮零售数字化转型
芯华章连获行业权威奖项 荣膺“年度创新人物”、“年度EDA产品”殊荣
如何使用NRF24L01收发器模块在两个Arduino板之间进行无线通信
欧洲科学家研发出磁驱动的新型高速软体机器人
如何用草图完善自动布线的不足
万物互联的IoT时代,如何在云中聚合大量数据?
人工智能如何走向大众