自iphone X以来,各品牌的手机旗舰机型都开始支持Face ID。与之前的指纹识别相比,人脸识别还是更方便一些。近期在国内大火的抖音,也与人脸识别技术密不可分。各手机厂家还纷纷推出人工智能芯片,希望能让人工智能应用在手机、单片机上运行的更加流畅。可以看到,将在PC上已经大获成功的机器学习模型部署在移动设备上是大势所趋,又能引发一轮新的可能性。手机的精准定位带来了一大波O2O的应用,产生了包括美团、滴滴这样的巨型独角兽。那么人工智能在手机上的广泛应用又将带来什么变革呢?但这个问题不是本文讨论的重点,下面我来从技术角度出发,谈谈如何在Android上部署Tensorflow的图像识别模型。

   

Android中支持的Tensorflow模型文件为pb格式。pb相比于训练时的ckpt格式,会保存网络结构,并具有语言独立性,适合在移动端使用。

constant_graph = graph_util.convert_variables_to_constants(sess, sess.graph_def, ["output"])
with tf.gfile.FastGFile(pb_file_path, mode='wb') as f:f.write(constant_graph.SerializeToString())

同时,由于在Android中读取pb文件时要通过变量名来获取输入层和输出层,所以在保存pb文件前,我分别将输入和输出层变量名设为“input”和“output”。

train_batch = tf.add(train_batch, tf.zeros([IMG_W, IMG_H, 3]), name="input")
output = tf.add(train_logits, tf.zeros(N_CLASSES), name="output")

App界面采用最常见的底部导航栏结构,使用BottomNavigationView方式实现。拥有从相册中选图片识别和摄像头实时识别两个Fragment,页面间的切换采用FragmentTransaction的show/hide方式。

 fragmentManager = getSupportFragmentManager();FragmentTransaction transaction = fragmentManager.beginTransaction();transaction.add(R.id.fragment, mPhotoFragment = new PhotoFragment());transaction.add(R.id.fragment, mCameraFragment = new CameraFragment());transaction.commit();

对于摄像头Fragment,在onResume和onPause时分别Open、Release Camera;由于画面会不停移动需要重新对焦,还需要实现摄像头的自动对焦功能。

 @Overridepublic void onResume() {super.onResume();onHiddenChanged(false);}@Overridepublic void onPause() {onHiddenChanged(true);super.onPause();}
       @Overridepublic void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {camera.autoFocus(new Camera.AutoFocusCallback() {@Overridepublic void onAutoFocus(boolean success, Camera camera) {if(success){focus();//实现相机的参数初始化camera.cancelAutoFocus();}}});}

成功获取图片后,调用Classifier对图片进行识别。在Classifier中,将输入的bitmap图片转换成float数组,创建并调用TensorFlowInferenceInterface进行推断。根据识别结果对猫狗置信度的大小,在页面上展示猫或狗的头像。

       inferenceInterface.feed(inputName, floatValues, 1, inputSize, inputSize, 3);inferenceInterface.run(outputNames, logStats);inferenceInterface.fetch(outputName, outputs);
        Classifier.Recognition answer = null;for (final Classifier.Recognition recognition : results) {if (answer == null || recognition.getConfidence() > answer.getConfidence()) {answer = recognition;}}int resId = answer.getTitle().equals("cat") ? R.mipmap.cat : R.mipmap.dog;view.setImageResource(resId);

项目地址:https://github.com/wlkdb/TensorflowInAndroid

Tensorflow猫狗识别模型在Android上的部署相关推荐

  1. tensorflow 猫狗识别 数据增强

    文章目录 卷积网络参数 网络配置 模型训练和效果展示 完整代码 数据增强 角度旋转 平移变换 缩放 channel_shift 翻转 rescale变化 图像填充 任务介绍: 有猫和狗的图片,需要对这 ...

  2. tensorflow.js在nodejs训练猫狗分类模型在浏览器上使用

    目录 本人系统环境 注意事项 前言 数据集准备 处理数据集 数据集初步处理 将每一张图片数据转换成张量数据(tensor) 将图片转换成张量数组的代码和运行效果 将图片的标注转换成张量数据(tenso ...

  3. python:tflearn训练的猫狗识别模型及其使用

    需要下载:pip install tflearn 一些理论知识在前一篇文章中:可以一起阅读学习 https://blog.csdn.net/m0_64596200/article/details/12 ...

  4. 利用yolov实现目标检测——利用yolov5训练自己的猫狗识别模型

    作者有话说:我是个小白,这个是我的学习记录,以便以后回过头来看的时候能看懂;-),希望也可以帮助到大家

  5. 第十二章 卷积神经网络实战--猫狗识别

    1.介绍 我们已经学习了如何用传统的神经网络进行机器学习,在本章我们学习一下如何使用简单的神经网络进行图像分类.数据集用的是Kaggle的猫狗数据集.这里只有前100张,如果需要更多的可以去Kaggl ...

  6. 简单的识别猫狗的模型

    从Google下载猫狗训练集与验证集的zip压缩包,提取到项目目录下.这个文件夹里面包含训练(train)和验证(validation)数据集的子目录,而且每个子目录都包含猫和狗的子目录. 可以直接在 ...

  7. TensorFlow 卷积神经网络之猫狗识别(二)

    本文是TensorFlow 卷积神经网络之猫狗识别 的姊妹篇,是加载上一篇博客训练好的模型,进行猫狗识别 本文逻辑: 我从网上下载了十几张猫和狗的图片,用于检验我们训练好的模型. 处理我们下载的图片 ...

  8. Tensorflow实现kaggle猫狗识别(循序渐进进行网络设计)

    这篇是tensorflow版本,pytorch版本会在下一篇博客给出 友情提示:尽量上GPU,博主CPU上跑一个VGG16花了1.5h... Tensorflow实现kaggle猫狗识别 数据集获取 ...

  9. 猫狗大战——基于TensorFlow的猫狗识别(1)

    微信公众号:龙跃十二 我是小玉,一个平平无奇的小天才! 简介: 关于猫狗识别是机器学习和深度学习的一个经典实例,下来小玉把自己做的基于CNN卷积神经网络利用Tensorflow框架进行猫狗的识别的程序 ...

最新文章

  1. h5在线浏览word_怎样将PDF在线转换成Word?教你成为一个高手的方法
  2. 使用ArcGIS API for Silverlight实现地形坡度在线分析
  3. SpringBoot集成WebSocket,实现后台向前端推送信息
  4. php编程用空格,shell 编程中空格的使用方法
  5. rds本地库到rds恢复_华为云RDS备份导入到本地
  6. Android简易实战教程--第四十七话《使用OKhttp回调方式获取网络信息》
  7. php动态+trait,详解PHP神奇又有用的Trait
  8. python svg转png_Python实现批量把SVG格式转成png、pdf格式的代码分
  9. InstallSield更新包快速入门文档----感谢原作者ㄣ齊¨彡仯乄的无私提供
  10. linux和windows和鸿蒙,linux很好,但为何大家都用Win,鸿蒙系统站错阵营了吗?
  11. 第六节:又一种新的数据类型:元组Tuple
  12. 自检代码中trustmanager漏洞_Windows内核漏洞利用教程
  13. 理解Python装饰器(Decorator)
  14. 耗时162天,从华为外包5k转岗正式员工15k,经历的心酸只有自己知道
  15. 第三章 高频谐振功率放大器(关键点:功率、效率)
  16. python 正则匹配指定号段手机号
  17. python将多张图片合并成一张图片
  18. cmake find_package 原理简介以及使用说明
  19. error: option --single-version-externally-managed not recognized
  20. pubwinol免刷_Pubwin万象OL实名一键自动处理程序

热门文章

  1. python 日期计算各种方式
  2. vue获取手机验证码60秒倒计时,不能点击按钮
  3. 关于锁相环(PLL)必须要知道的事
  4. 微信小程序和微信商城的对比,看看你的企业适合做微信小程序还是微商城
  5. MSI(微星)GP62mvr WIN10+ubuntu16.04双系统安装教程
  6. 鹰眼智客大数据带来的商业改变!
  7. FPGA画时序软件-可在线可下载
  8. c++编程题 求数列的和
  9. wordpress 后台卡_如何在您的WordPress网站上轻松接受信用卡付款
  10. 《转载》iTOP-4412开发板如何配置可以支持 AVIN 的摄像头