阿里又出新玩法|开箱即用的算法集 MNN Kit

简介: 今天的移动开发,AI随处可见:从手机淘宝里的拍立淘,到淘宝直播里的商品识别,到头条的个性化推荐,到抖音直播里的人脸识别,人工智能在移动app里发挥的作用越来越大。它也逐渐从Snapchat那些社交软件的一些比较好玩的属性(如人脸贴纸),慢慢发展到了淘宝里面那些能够真正为商业赋能的应用场景。在这样的背景下,阿里巴巴淘系技术的MNN团队,近日发布了开箱即用的工具集MNN Kit。

屏幕快照 2020-02-25 下午7.08.21.png

作者|MNN团队
出品|阿里巴巴新零售淘系技术部

端智能(On-Device AI)近年来已经从移动开发中的有意思的尝试,慢慢发展成为移动开发工程师核心的工具。今天的移动开发,AI随处可见:从手机淘宝里的拍立淘,到淘宝直播里的商品识别,到头条的个性化推荐,到抖音直播里的人脸识别,人工智能在移动app里发挥的作用越来越大。它也逐渐从Snapchat那些社交软件的一些比较好玩的属性(如人脸贴纸),慢慢发展到了淘宝里面那些能够真正为商业赋能的应用场景。

在这样的背景下,阿里巴巴淘系技术的MNN团队,近日发布了开箱即用的工具集MNN Kit。

MNN Kit是什么?

MNN Kit是阿里巴巴把经过多次战役实战考验的常用业务场景的模型进行封装,得到的一系列简单易用的SDK。它底层的技术基石是推理引擎是2019年5月开源的MNN(https://github.com/alibaba/MNN)。

急于尝试的同学们:MNN Kit 使用文档与开源的Demo工程的GitHub地址在此:https://github.com/alibaba/MNNKit

这些模型的背后,是淘系内部算法团队多年的技术沉淀。比如,MNN Kit 的人脸检测所使用的一系列模型,是由淘系专注于客户端深度学习视觉算法的 PixelAI 团队提供。

MNN Kit的模型简介

MNN Kit目前开放了以下三种场景的SDK:
人脸检测;【使用文档】
人像分割;【使用文档】
手势识别;【使用文档】

▐ 人脸检测

人脸检测是 MNNKit 提供的 AI 解决方案 SDK ,在端上提供了高精度、实时、功能丰富的人脸检测能力,能满足各种基于人脸检测的业务场景。

它提供了人脸基本信息(人脸的矩形坐标,106个关键点坐标,置信度),人脸三个维度(Yaw, Pitch, Roll)的欧拉角度,以及人脸在视频流中的动作(眨眼,点头等)。

106 个关键点的效果图如下:

1.png

下面的视频是 MNN Kit Demo 中实际展示的效果:

https://ucc-vod.alicdn.com/sv/1967515e-1707c240053/1967515e-1707c240053.mp4

人脸检测模型是一个非常通用的能力。在它的基础上,我们可以做出各种有意思的玩法,比如美颜,人脸贴纸,换脸,人脸老化效果等。2018 年双十一晚会现场的“笑脸大作战”互动节目,让明星互动 PK 笑脸数。它的背后是用人脸检测结合笑脸检测模型,实时识别出视频流中的笑脸,并与 emoji 进行匹配。

▐ 手势识别

手势检测是 MNNKit 提供的移动端 AI 解决方案 SDK,在端上提供了实时的手势检测和识别能力,基于它应用可以拓展丰富的业务场景和玩法。比如,你可以基于手势检测的模型,开发出猜拳的游戏;或者你可以基于它开发一款用受手势控制 App ,可以让用户在手指不方便接触屏幕的时候(比如吃饭时),可以远程刷手机。你的脑洞是玩法应用的边界。

手势识别的 Demo 见下面的视频:

▐ 人像分割

人像分割是 MNNKit 提供的移动端 AI 解决方案 SDK ,在端上提供了实时的人像分割能力。它也是一个基础的模型能力,可以应用到比如证件照自动抠图,协助PS等场景。

效果图如下:

1.png

极简的接入流程

MNN Kit 诞生于阿里巴巴淘系,一个需要针对诸如双 11,双 12 ,年货节等大促活动快速上线业务的环境。简单快速将模型整合到 app 里,是 MNN Kit 的必备的特性。

MNN Kit 的基本 API 只有三个:创建实例、推理、释放实例。使用流程如下图所示:

1.png

下面以Android中的人脸检测为例,简要介绍一下接入的代码。

▐ 创建实例

我们异步创建FaceDetector实例,它会在主线程中回调onSucceeded:

void createKitInstance() {
    // 定义Detector Config
    FaceDetector.FaceDetectorCreateConfig createConfig = new FaceDetector.FaceDetectorCreateConfig();
    createConfig.mode = FaceDetector.FaceDetectMode.MOBILE_DETECT_MODE_VIDEO;
    FaceDetector.createInstanceAsync(this, createConfig, new InstanceCreatedListener<FaceDetector>() {
        @Override
        public void onSucceeded(FaceDetector faceDetector) {
            // 获取回调实例
            mFaceDetector = faceDetector;
        }

        @Override
        public void onFailed(int i, Error error) {
            Log.e(Common.TAG, "create face detetector failed: " + error);
        }
    });
}

▐ 推理

我们从Android Camera API的onPreviewFrame callback中,可以获得相机帧的数据data。定义好需要在视频流中的人脸动作(如眨眼,张嘴等),即可在当前帧进行人脸检测。

// 从相机API回调中获取视频流的一帧
byte[] data = ....;

// 定义哪些人脸的动作需要在视频流中进行检测
long detectConfig =
        FaceDetectConfig.ACTIONTYPE_EYE_BLINK |
                FaceDetectConfig.ACTIONTYPE_MOUTH_AH |
                FaceDetectConfig.ACTIONTYPE_HEAD_YAW |
                FaceDetectConfig.ACTIONTYPE_HEAD_PITCH |
                FaceDetectConfig.ACTIONTYPE_BROW_JUMP;

// 进行推理
FaceDetectionReport[] results = mFaceDetector.inference(data, width, height,
        MNNCVImageFormat.YUV_NV21, detectConfig, inAngle, outAngle,
        mCameraView.isFrontCamera() ? MNNFlipType.FLIP_Y : MNNFlipType.FLIP_NONE);

▐ 释放实例

App 需要根据自己应用场景,主动释放模型所占用的内存。以我们的 Demo 为例,在 Activity 的 onDestroy ,释放掉模型占用的内存。你可以根据自己 app 的流程,来决定在什么时间节点进行释放。

protected void onDestroy() {
    super.onDestroy();

    if (mFaceDetector!=null) {
        mFaceDetector.release();
    }
}

▐ 前后处理最佳实践

在一个真正的落地场景中,除了以上三步以外,还有一些针对相机视频流的前后处理。这些处理,在很多时候都是类似的。比如前处理方面,如何正确地处理相机帧,需要考虑摄像头是前置还是后置,相机的旋转;后处理方面,需要把模型输出的结果(例如人脸关键点坐标)映射到原图进行渲染。MNN Kit 把这些最佳工程实践作为参考实现放在了 Demo 里面。这 Demo 的代码在 MNN Kit的GitHub 开源。

未来

MNN Kit 目前极大的简化了移动开发流程中使用通用模型能力的流程。如果你的应用场景不是完全契合这个通用的场景呢?很多情况下,以一个优秀的基础模型为起点,进行迁移学习,就可以得到适合你自己应有场景的模型。MNN 团队会后续发布产品来帮助大家更加轻松高效地进行迁移学习。

另外,MNN Kit 会逐步覆盖到其他的通用场景的模型。请大家拭目以待!

用户协议

MNN Kit 有它自己的用户协议【用户协议】

有几个重点强调一下:

  1. MNN Kit 本身不开源,模型不单独提供。使用这些模型的能力需要通过 MNN Kit 的 API 。用户协议中禁止了针对MNN Kit进行逆向工程。
  2. 不允许以商业或者盈利的目的对MNN Kit进行二次封装。比如,将 MNN Kit 进行封装为其他的 SDK,从事商业或者盈利的目的。
  3. 遵守 MNN Kit License 的前提下,允许应用集成 MNNKit SDK ,并因此产生商业价值或利益。

贴心的小橙也为大家准备了一场直播
MNN Kit 最新解读

image.png

We are hiring

淘宝基础平台部-端智能团队欢迎移动端计算优化工程师和推理引擎架构师的加入。对新技术感兴趣,善于创新突破,渴望用新技术给用户带来创新体验的同学请联系我们。简历投递至吕行:chengfei.lcf@alibaba-inc.com
屏幕快照 2020-02-25 下午7.37.51.png

更多技术干货,关注「淘系技术」微信公众号!
屏幕快照 2020-02-07 下午3.57.54.png

相关文章
|
1月前
|
存储 算法
【数据结构与算法】【腾讯阿里链表面试题】算法题--链表易懂版讲解
【数据结构与算法】【腾讯阿里链表面试题】算法题--链表易懂版讲解
|
6月前
|
缓存 算法 架构师
阿里P9架构师终于把毕生心血而成的分布式高可用算法笔记开源了
说在前面的话 分布式系统无处不在。 一台计算机内部多个互联的处理器组成了一个分布式系统,它们通过“一致性缓存”算法使每个处理器核心看到相同的数据。近三十年来,随着互联网的发展,越来越多的互联网后台系统采用计算机集群的方式来应对海量请求和数据的需求,这个计算机集群也是分布式系统。 为了简化分布式系统的开发,出现了很多为开发者提供分布式框架的开源项目,例如Apache基金会旗下的ZooKeeper项目就是一个应用广泛的分布式框架。 同时,国内也有很多关于如何使用这些分布式框架来搭建应用的书籍,它们极大地推动了分布式系统在国内的应用。我们不仅要知道如何使用这些现成的分布式框架来搭建应用,而且应
|
3月前
|
算法 搜索推荐 Java
太实用了!阿里内部强推的超全Java算法学习指南,已被彻底征服
算法和数据结构一直以来都是程序员的基本内功。 数据结构可以看作是算法实现的容器,通过一系列特殊结构的数据集合,能够将算法更为高效而可靠地执行起来。
|
3月前
|
算法
电子好书发您分享《阿里技术参考图册——算法篇》
电子好书发您分享《阿里技术参考图册——算法篇》
47 9
|
4月前
|
算法 NoSQL Java
2023年阿里高频Java面试题:分布式+中间件+高并发+算法+数据库
又到了一年一度的金九银十,互联网行业竞争是一年比一年严峻,作为工程师的我们唯有不停地学习,不断的提升自己才能保证自己的核心竞争力从而拿到更好的薪水,进入心仪的企业(阿里、字节、美团、腾讯.....)
|
4月前
|
存储 人工智能 算法
|
5月前
|
算法 网络协议 Java
48W字?GitHub上下载量破百万的阿里:图解Java、网络、算法笔记
Java基础这个东西,无论在哪个公司都被看得尤为重要,而面试中关于基础的问题也是层出不穷。所以基础可以说是重中之重,当你的基础打牢了,其他的也就没有那么重要了。
|
6月前
|
Kubernetes 算法 关系型数据库
No.3 腾讯,阿里,字节,优科面经(上-算法篇)
No.3 腾讯,阿里,字节,优科面经(上-算法篇)
|
7月前
|
算法 安全 Java
阿里二面:JVM 的三色标记算法你了解吗?
阿里二面:JVM 的三色标记算法你了解吗?
|
8月前
|
算法 NoSQL Java
2023年阿里高频Java面试题:分布式+中间件+高并发+算法+数据库
又到了一年一度的金九银十,互联网行业竞争是一年比一年严峻,作为工程师的我们唯有不停地学习,不断的提升自己才能保证自己的核心竞争力从而拿到更好的薪水,进入心仪的企业(阿里、字节、美团、腾讯.....)