专栏首页玩转全栈Tensorflow Lite之图片识别研究
原创

Tensorflow Lite之图片识别研究

TensorFlow lite的介绍

有关TensorFlow的介绍建议看官网,如果懒的话可以直接看我上篇文章。官方告诉我们,入门TensorFlow lite的最好姿势是学习他的demo,这里从第一个例子,图片识别开始。

环境搭建,建议在Android上尝试,因为ios安装真机需要证书或者越狱
  1. 安装Android studio 这里假设你已经安装好了Android studio了,官方建议版本3.2以上,这里如果不是最好更新一下咯。
  2. git clone https://github.com/tensorflow/examples.git
  3. 图片识别的Android工程源码放在examples/lite/examples这里了,使用Android studio打开已存在的项目。
跑起来之后,直接接可以识别了
已经有了结果了,当然是要纠结一下它是怎么run起来的了。

图像识别,很显然需要用到相机,这里,对于Android平台,demo中处理了一下权限的问题,还有cameracamera2的一些api的兼容问题,这些过程都不是很重要,重要的是,我们拿到图片流之后的处理:我们随便拿一个,比如camera 方式的回调

这里拿到图片之后,主要进行了一个convertYUV420SPToARGB8888的转换,因为camera拿到的字节是YUV格式的,而后面模型处理算法是RGB方式,因此需要转换一下。

好,接着进入processImage环节

同样,代码没有多么难以理解,拿到刚刚捕获的RGB字节,将他写入rgbFrameBitmap中,然后将其转换一下,放到一个新的croppedBitmap中,然后直接就使用分类器来识别图片了,看起来就一句代码实现了这个图像识别。

那么这个classfier是在哪里创建的呢?

创建的代码在此处,这里传入的参数有model,设备,线程数,对应于一下ui界面这里的设置。

那么,分类器具体是如何构造的呢?

构造一份分类器,需要用到模型文件,需要制定是使用CPU,还是NNAPI(Android Neural Networks API (NNAPI) 是一个 Android C API,专门为在移动设备上对机器学习运行计算密集型运算而设计),还是GPU,然后需要把要识别的结果标签加载到内存中,使用不同的模型,构造器的具体实现类还不一样。

具体的分类器的实现类有两个,比如我们就看ClassifierQuantizedMobileNet这个分类器的实现。

分类器构造好之后,就该了解具体是如何做识别的了

说到底这里也是一句代码的调用,然后使用优先队列来做了一个排序,个人感觉有点多次一句,直接Arrays.sort()不就搞定了,还需要用什么优先队列先塞一下,在取了在塞,浪费。

最后跟一下runInference这个方法,是一个抽象方法,前面说了,根据模型不同,由具体分类器自己实现,我们姑且看ClassifierQuantizedMobileNet这个,以为是价值一个亿的代码,结果就这么简简单单的一行而已,不过看了下label列表,大概有1000行,估摸着这样排序会快一些,相当于做了一个堆排序。

也就是说tflite会根据此时的imgData来生成一个labelProbArray,然后具体哪个label的可能性如何就可以直接取了。

总结

整个过程就分析完了,实际上有一个可用的模型的化,就很好办了,客户端写下套路代码就ok,应用这个模型就可以给出推断结果,那么,毫无疑问,模型是如何训练呢?欲知后事如何,请听下文分解。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 码农也该懂点sketch

    sketch是一款轻量的,易用的矢量设计工具,有了它,可以让你进行更加简单高效的UI设计。

    brzhang
  • 一个开源P2P-IM项目研究

    现在,小伙伴觉得隐私是非常重要的一件事情,谁也不希望裸奔在互联网的汪洋大海之中,那么如何做到,P2P IM,无服务器IM.

    brzhang
  • sketch做一个背景中空的图片--人脸识别那个遮罩

    最近接到一个需求,需要模拟微信小程序人脸识别的页面,然后里面需要用到一张背景是黑色,人头透明框的遮罩层,又没有设计会给我做,因此只有自己使用sketch来做了。

    brzhang
  • 前端,Java,产品经理,微信小程序,Python等资源合集大放送

    王小婷
  • 谁用了22号端口,到底是谁

    通常情况下一般使用netstat -aunltp 查看服务器连接状态信息,windows 和 linux 都能使用,大家都也熟悉

    蒋小爱
  • 靶机渗透DC-7

    CMS还是Drupal,msf几个模块都没成功,扫描后台也没扫描出什么有用的信息。应该还是在网站上。

    HipHip
  • 码农也该懂点sketch

    sketch是一款轻量的,易用的矢量设计工具,有了它,可以让你进行更加简单高效的UI设计。

    brzhang
  • Windows Server 2008 R2系统无法远程连接登陆初步排查

    点左上角“发送远程命令”,选择“Ctrl-Alt-Delete”,使服务器当前界面进入到输密码的界面;

    夏日萤火
  • Kubernetes 1.19.0——密码管理

    gz_naldo
  • 【腾讯云的1001种玩法】构建企业级应用环境之应用层面优化

    在上一篇中,我们完成了数据区域的优化,得到很多童鞋的反馈,说想了解下如何优化应用层面,其实也无所谓优化,之前我们在实现应用高可用时采用的是NLB 或 IIS A...

    李斯达

扫码关注云+社区

领取腾讯云代金券