|
|
51CTO旗下网站
|
|
移步端
  • 阿里开源MNNKit:基于MNN的运动端深度学习SDK,支持安卓和iOS

    前不久,阿里开源了基于 MNN 引擎的品种 MNNKit,面向安卓和 iOS,以 SDK 的措施提供 AI 头侧推理能力。开发者不需要了解算法细节就足以直接行使。

    笔者:一鸣、Jamin 来源:机械的心| 2020-01-23 15:08

    近些年,有越来越多之吃水学习框架初步面向移动端进行发展。前不久,阿里也基于其 MNN推理引擎开源了流行的 MNNKit深度学习SDK,安卓和 iOS 开发者都得以从容地展开实用。

    日前,有的是企业都在研制面向移动端的吃水学习框架。在国内有小米的 Mace、腾讯之 FeatherCNN(腾讯AI)和 ncnn(腾讯优图)、百度之 Paddle-moblie 等。而阿里也支出了上下一心之运动端深度学习框架 MNN。

    前不久,阿里开源了基于 MNN 引擎的品种 MNNKit,面向安卓和 iOS,以 SDK 的措施提供 AI 头侧推理能力。开发者不需要了解算法细节就足以直接行使。

    品种地址:https://github.com/alibaba/MNNKit

    脚下,MNNKit 已经有人脸检测、手势识别、人像分割等,持续可能有更多 API 连片。

    MNNKit: 基于 MNN 的吃水学习工具

    MNN 是基于阿里之 MNN 头上推理引擎所付出的使用解决方案,重点面向安卓和 iOS 系统,赞助将 AI 能力使用在现实的运动端场景中。

    MNNKit 架构

    MNNKit 提供了一番 SDK 供开发者使用,以下为 SDK 的架构。

    阿里开源MNNKit:基于MNN的移动端深度学习SDK,支持安卓和iOS

    副图中得以看到,MNNKit 可以分为三层结构,副底向上分别为:

    1. MNN 引擎层,是 MNN (https://github.com/alibaba/MNN) 库在 Android/iOS 上编译好的包的福利制 Release 本子,提供端侧运行环境。

    2. Core 基础层,这第一抽象和包装与 MNN c++接口调用粒度基本一致的中层 API,iOS 穿过 OC 接口提供,Android 穿过 Java 接口提供(TODO)。这一层同时也为基层 SDK 提供一些公共服务类或组织定义。

    3. 工作 Kit 层,包括了人脸检测、手势识别封装的 API。据项目介绍,后的工作 Kit 层会不断壮大。

    其间原理

    因为 MNNKit 重点提供阿里之嘴侧 AI 能力,故此封装了众多相关应用的 API。租用如下:

    阿里开源MNNKit:基于MNN的移动端深度学习SDK,支持安卓和iOS

    例如,顶用户需求征用 API 的时节,要求首先创建实例,下一场将图像、视频或其它组织化数据输入,拓展 AI 模型的推理工作。上班成就后释放实例即可。

    脚下 MNNKit 已支持的 API 有:

  • 面检测API

  • 手势识别 API

  • 人像分割 API

  • 以面检测为例,检测内容主要分为三大板块:

  • 面基本信息

  • 面位置的矩形坐标

  • 106 个关键点坐标(分别被遮挡的和未被遮挡的)

  • 置信度

  • 阿里开源MNNKit:基于MNN的移动端深度学习SDK,支持安卓和iOS

    106 个关键点之分布(来自官方开源 github)

    阿里开源MNNKit:基于MNN的移动端深度学习SDK,支持安卓和iOS

    面各区域关键点分布对应表

  • 欧拉角度

  • 阿里开源MNNKit:基于MNN的移动端深度学习SDK,支持安卓和iOS

    摇头(Yaw)、点头(Pitch)、歪嘴(Roll)三个高难度值

  • 面动作(包含 5 个体脸的动作)

  • 闪动

  • 开口

  • 摇头

  • 点头

  • 扬眉

  • 拍卖过程

    咱们掌握了人脸检测需要检测的多寡后,然后看看处理过程:

    阿里开源MNNKit:基于MNN的移动端深度学习SDK,支持安卓和iOS

    如图所示,该流程是 iOS 和安卓设备后置摄像头正向拍摄后,在运动端上的总体处理过程。

    第一,系统从摄像头获取数据,表现 SDK 的涌入。接着,SDK 会进展如下操作:

    1. 在 MNN 引擎执行推理之前,对原有的涌入进行预处理,合同输入数据中的人脸为正向

    2. 采用 AI 模型进行推导;

    3. 推理后,产生基于输入图像(预处理之后的)坐标系的高地结果;。

    4. 把关键点坐标变换到和荧屏渲染坐标系相同的主旋律,富有渲染。

    程应用中,说到底的结果关键点要显示在他家屏幕上,前者会利用一个用于渲染的"画布"。画布的星系被称为渲染坐标系,

    在 SDK 检测的最终一地,咱们将关键点变换到和渲染坐标系相同的主旋律,下一场等比例映射关键点坐标到渲染坐标系的坐标即可。照耀后方可直接渲染到画布上

    代码示例

    MNNKit 提供了包括人脸检测、手势识别等方面的示范代码。然后我们以面检测为例,探望怎样可以在安卓或 iOS 官方滥用 API 拓展推导工作。

    安卓代码

    明天文提到,租用 API 要求首先创建一个实例,以下为异步创建 FaceDetector 老,全线程中回调的编码。

    public static void createInstanceAsync (Context context, FaceDetectorCreateConfig createConfig, InstanceCreatedListener<FaceDetector> listener)

    在此间,面检测API 会进展监测和跟踪两个动作。检测会遭到人脸位置和关键点,而跟踪是在人脸移动时重新定位关键点之岗位。

    在视频模式下,系统默认每 20 帧检测一次,其他帧只盯住。图表模式下则每一次调用都检测。

    创造实例后,可以将数据输入模型进行推导。MNNKit 如今已支持多种数据格式输入。在视频流检测场景中,咱们可以运用摄像头的回调数据作为接口的涌入。步入数据的编码如下:

    public synchronized FaceDetectionReport[] inference(byte[] data, int width, int height, MNNCVImageFormat format, long detectConfig, int inAngle, int outAngle,  MNNFlipType outputFlip)

    采用输入数据为 bitmap 的推理代码如下:

    public synchronized FaceDetectionReport[] inference(Bitmap bitmap, long detectConfig, int inAngle, int outAngle, MNNFlipType outputFlip)

    顶 FaceDetector 老用完后,咱们需要手动释放实例,否则会产生 native 的内存泄露。

    public synchronized void release()

    iOS 代码

    和安卓代码类似,第一需要创造人脸检测实例:

    + (void)createInstanceAsync:(MNNFaceDetectorCreateConfig*)config Callback:(void(^)(NSError *error, MNNFaceDetector *faceDetector))block CallbackQueue:(dispatch_queue_t)callbackQueue;

    默认主线程回调:

    + (void)createInstanceAsync:(MNNFaceDetectorCreateConfig*)config Callback:(void(^)(NSError *error, MNNFaceDetector *faceDetector))block;

    PixelBuffer 步入进行推导的编码如下:

    - (NSArray<MNNFaceDetectionReport *> *)inference:(CVPixelBufferRef)pixelBuffer Config:(MNNFaceDetectConfig)detectConfig Angle:(float)inAngle OutAngle:(float)outAngle FlipType:(MNNFlipType)flipType error:(NSError *__autoreleasing *)error;

    UIImage 步入进行推导的编码如下:

    - (NSArray<MNNFaceDetectionReport *> *)inferenceImage:(UIImage*)image Config:(MNNFaceDetectConfig)detectConfig Angle:(float)inAngle OutAngle:(float)outAngle FlipType:(MNNFlipType)flipType error:(NSError *__autoreleasing *)error;

    采用通用 buffer 数组输入的编码如下:

    - (NSArray<MNNFaceDetectionReport *> *)inference:(unsigned char*)data Width:(float)w Height:(float)h Format:(MNNCVImageFormat)format Config:(MNNFaceDetectConfig)detectConfig Angle:(float)inAngle OutAngle:(float)outAngle FlipType:(MNNFlipType)flipType error:(NSError *__autoreleasing *)error;

    老生命周期结束以后,会自动触发相关内存的自由,不要调用方手动释放。

    据悉,MNNKit 是 MNN 团组织在阿里系应用大规模业务实践后的成熟解决方案,历经双十一等项目考验,在不依赖于后端的情况下进行高性能推理,采用起来稳定方便。

    【编纂推荐】

    1. 写 Python 代码不可不知之函数式编程技术
    2. 为什么阿里P8、P9艺术大牛反复强调“布局化思维”?
    3. 迪斯尼正式开源受 Rust 启示的新编程语言 Verona
    4. 又一个编程神器来了!迪斯尼开源软件特征源码分析工具
    5. 脚下运维与面试领域有哪些新技术?
    【义务编辑: 张燕妮 TEL:(010)68476606】

    点赞 0
  • 开源  艺术   趋势
  • 分享:
    大家都在看
    猜你喜欢
  • 24H热文
    一周话题
    每月获赞
  • 程序员必备学习编程软件,观看看你用过几个?高考了一番 46 岁的程序员,我思绪万千17年前阿里全员隔离,马云是怎么熬过非典的?震情之下,这是你也能上手的Python新冠病毒传播建模教程(附代码)删库跑路”这件事情真的发生了 ,还是艺术总监干的!震情下招聘观察:47%他家密集求职,艺术人才吃香震情传播与爆发仿真程序:巨额别出门!联合操作系统 UOS 回应质疑
  • 程序员必备学习编程软件,观看看你用过几个?删库跑路”这件事情真的发生了 ,还是艺术总监干的!震情传播与爆发仿真程序:巨额别出门!致Linux运维:顶你的蒸发器被黑了,永恒要看是不是犯了这5点错误DevOps 2020:值得关注的九大提高趋向菜鸟码农成神之路:必发娱乐手机版精选好文,都在此间了“跳槽”还是“卧槽”,你想好了吗?迪斯尼宣布:免费开放微软云办公、云桌面、云远程方案
  • 菜鸟码农成神之路:必发娱乐手机版精选好文,都在此间了共渡疫情,51CTO免费开放价值1000万精品在线课程!为什么阿里P8、P9艺术大牛反复强调“布局化思维”?35岁的你为何会“慌得一股”?阿里资深Leader:组建技术团队的组成部分思考Mozilla 通告 MDN Web 付出人员要求评估报告“跳槽”还是“卧槽”,你想好了吗?火神山医院正式交付!三角开5G,太空建好信息系统,IT集团做了什么?
  • 订阅专栏+更多

    Python使用场景实战手册

    Python使用场景实战手册

    Python使用场景实战手册
    共3章 | KaliArch

    19人口订阅学习

    一步到位玩儿透Ansible

    一步到位玩儿透Ansible

    Ansible
    共17章 | 骏马金龙1

    198人口订阅学习

    云架构师修炼手册

    云架构师修炼手册

    云架构师之必不可少技能
    共3章 | Allen在路上

    35人口订阅学习

    订阅51CTO邮刊

    点击这里查看样刊

    订阅51CTO邮刊

    51CTO劳务号

    51CTO官微



    &lt;menuitem id="1e580a12"&gt;&lt;/menuitem&gt;

    &lt;strike id="acc5b615"&gt;&lt;/strike&gt;