MindSpore21天实战营(1)使用MindSpore Lite实现手机端图像检测

举报
张辉 发表于 2020/11/04 07:03:23 2020/11/04
【摘要】 本文介绍了如何使用MindSpore Lite进行手机端图像分类。。

到2020年11月4日为止,MindSpore实战营已经进行到Part3了,张小白在10月28日做了个体验作业:使用官方做好的APK ,在华为手机上安装后,推理了以下几张图发了个朋友圈。

image.png

image.png

image.png

image.png

image.png

张小白一直没有去做进阶作业。。。其实,主要的原因很可能是因为自己觉得自己体验作业做得也不好——无法找到作业题中所谓的“搞怪照片:

image.png

搞笑而不搞怪,搞怪而不搞笑——要“双搞”真的很难,真是伤透了张小白的脑筋。


直到张小白看到了论坛里 ML 饭 大大的文字。(https://bbs.huaweicloud.cn/forum/thread-83725-1-1.html  )这才提起一点写作业的兴趣。饭大大的文字虽然写的很好,但是亲自走一回还是必要的。本来在饭大大的帖子后面跟了个贴,想写一个tips就完事儿了。结果发现,需要躺的坑还是有几个的。想来应该可以成一篇文字。。。而且,写文字是有代价的。。。想到这点,张小白不禁手痒痒的。。。


第一次的进阶作业的内容是:利用官方提供的MindSpore Lite的相关Android项目生成一个APK,装到安卓手机上,然后拍几张照片发朋友圈,同时上传到指定位置候审。。。


首先,根据本次实战的指导文档要求,需要安装Android Studio 4.0,SDK版本大于等于26,并安装NDK 21.3,CMake 3.10.2.

那就开干吧。。。

自己的Android Studio(以下简称AS)自从安装后,一直在在硬盘里待着(就是不实战)。如果这次不开干的话,估计下次启动它的时间应该是 华为云新组织的 《移动应用开发全栈成长计划》了。(此处别的小助手应该表示下感激。。。)

首先下载MindSpore工程包。

image.png

当然是一股脑儿把整个MindSpore都下下来。。。


打开AS,进入下面的configure-》setting。

image.png

进入设置页面:选择 Appearance & Behavior  -> System Settings->Android SDK.

按照文档的要求选择NDK 21.3,CMake 3.10.2:

image.png

点击OK

image.png

继续OK

image.png

点击Accept,Next

image.png

看上图,它会去dl.google.com下载东西。这时,饭大大的文档就起到指导作用了。。。

在网站ping.chinaz.com中搜索dl.google.com:

image.png

然后记下找到的地址(随便一个,比如Ping的较快的)

image.png

写入本机的host文件:(路径一般为:C:\Windows\System32\drivers\etc)

image.png

下载如飞一般的快。。。

image.png

很快,NDK和CMake就装完了。


然后重新打开AS,并打开现有工程:工程位置:F:\learn\mindspore\model_zoo\official\lite\image_classification

image.png

结果系统就进入了漫长的gradle下载的等待期,项目工程迟迟不出内容:。。。

image.png

张小白就知道该找度娘干活了。。。

(比如这个链接:https://www.jianshu.com/p/6a6c3a07b39f?utm_campaign 

先下载好gradle-6.1.1-all.zip

然后删除 C:\Users\zhang\.gradle\wrapper\dists\gradle-6.1.1-all\cfmwm155h49vnt3hynmlrsdst 目录下的所有文件。并将下载好的gradle-6.1.1-all.zip 拷贝进去。。

image.png

此外,由于gradle下载包的时候缺省还会找国外的源,所以需要在 C:\Users\zhang\.gradle 下新建一个 init.gradle的文件:

内容如下:

allprojects{
    repositories {
        def ALIYUN_REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public'
        def ALIYUN_JCENTER_URL = 'http://maven.aliyun.com/nexus/content/repositories/jcenter'
        all { ArtifactRepository repo ->
            if(repo instanceof MavenArtifactRepository){
                def url = repo.url.toString()
                if (url.startsWith('https://repo1.maven.org/maven2') || url.startsWith('http://repo1.maven.org/maven2')) {
                    project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_REPOSITORY_URL."
                    remove repo
                }
                if (url.startsWith('https://jcenter.bintray.com/') || url.startsWith('http://jcenter.bintray.com/')) {
                    project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_JCENTER_URL."
                    remove repo
                }
            }
        }
        maven {
            url ALIYUN_REPOSITORY_URL
            url ALIYUN_JCENTER_URL
        }
    }


    buildscript{
        repositories {
            def ALIYUN_REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public'
            def ALIYUN_JCENTER_URL = 'http://maven.aliyun.com/nexus/content/repositories/jcenter'
            all { ArtifactRepository repo ->
                if(repo instanceof MavenArtifactRepository){
                    def url = repo.url.toString()
                    if (url.startsWith('https://repo1.maven.org/maven2') || url.startsWith('http://repo1.maven.org/maven2')) {
                        project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_REPOSITORY_URL."
                        remove repo
                    }
                    if (url.startsWith('https://jcenter.bintray.com/') || url.startsWith('http://jcenter.bintray.com/')) {
                        project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_JCENTER_URL."
                        remove repo
                    }
                }
            }
            maven {
                url ALIYUN_REPOSITORY_URL
                url ALIYUN_JCENTER_URL
            }
        }
    }
}

这样就使用了 阿里云的gradle源。

然后重新打开 F:\learn\mindspore\model_zoo\official\lite\image_classification 这个工程,页面就会打开了。。。(当然,由于gradle会自动做build,在打开项目的过程中,还需要等待(loading),但是右下角的进度会告诉你,AS在快速的下载一些包。。。)

image.png

如果没有什么意外,会正常Loading结束并告诉我们,gradle已经ok。

image.png

工程打开后:

image.png

点击Build-》Build Bundles/APK(s)->Build APK(s)

系统就会开始编译,结果生成了如下的文件:

image.png

app-customDebugType-unsigned.apk 

好奇怪的名字,就将它安装到手机上吧。

张小白用的方法是:电脑上,打开QQ发出去。。。

image.png

手机上打开QQ收下来。。

image.png

点击“安装”

image.png

点击“允许”

image.png

点击“继续安装”

image.png

不可避免的失败了。

这个其实张小白以前也遇到过(就是这次忘记了)。就是没签名的安装包,无法装。。。。

所以,还是需要AS生成一个带签名的安装包。下面先解决这个问题。

当然是继续度娘。。。。

好像也不难。。

点击build-》Generate Signed Bundle/APK...

image.png

出现以下画面:

image.png

选择APK,next

image.png

点击Create New...

image.png

在录入以上内容的同时,记得在工程的目录下建立一个signAPK目录(存jks文件)

image.png

在前面那张图点击OK继续。。

image.png

选择release并都选中v1,v2。。点击Finish。

系统当时会弹出一个提示框提示用户需要处理一下jks文件。。。不要紧。把那句话copy下来。

在命令行窗口执行:

image.png

当然,上面报了一个错误,继续度娘发现,原来是文件名重复了。。。

简单,修改第二个文件名为 SignDemo1.jks

image.png

成功的完成了签名的密钥导入。

image.png

下面让张小白生成个新的带签名的APK吧。。。

重新点击Build-》Build Bundles/APK(s)->Build APK(s)

这回成功在app/release目录下生成了 app-release.apk

image.png

同样将这个文件,使用电脑QQ传过去:

image.png

然后在手机上接收。。

image.png

安装:

image.png

点击允许。。。

image.png

没有风险,继续安装。。

image.png

安装成功。。

打开APP。

照一下耳机:

image.png

推理出 植物,电风扇,基础设施,花瓣。。(嗯,花瓣可能是对的)

image.png

手机,看来MS Lite只是懂手机。。

image.png

植物,花园。。。很好。。

image.png


海报。。。

当然,后面两个没有识别出来是书。。。这还是有点遗憾的。。。

原来MS只深度学习,却不识书。。。这个结论也着实让张小白吓了一跳啊~~

不过这个APP,张小白觉得,倒是很有可能延伸到张小白最新关注的垃圾分类应用上去。。(https://bbs.huaweicloud.cn/forum/forum.php?mod=viewthread&tid=84854&page=2#pid442638  )

(全文完,谢谢阅读)


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。