OpenHarmony基于润和Hi3516开发套件


概述
我们将在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时代,如何在云中聚合大量数据?
人工智能如何走向大众