Tensorflowlite图像识别模型--安卓端部署教程

这篇具有很好参考价值的文章主要介绍了Tensorflowlite图像识别模型--安卓端部署教程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:

(1)如果文章对大家有帮助的话,可以关注公众号 AI知识物语 来获取第一手文章信息资料,以及相应资源项目地址
(2)本文章后续将在 B站 出门吃三碗饭 账号下更新讲解视频,可以同时观看食用

Abstract:

本文将通过介绍使用TensorflowLite框架,利用AndroidStudio工具来实现识别模型的移动端部署(获取方式在文末)。

1.Introduction:

因为最近有粉丝有反应的一个需求,训练好了一个模型如何迁移到移动端使用,于是我忙活了三四天,有了此文~

2.RelatedWorks:

TensorflowLite官网,很好的学习文档
AndroidStudio工具安装教程
TensorflowLite相关案例项目Github

3.Method:

3.1

本文以tensorflow代码为例子(pytorch代码同理,格式为pt),粉丝提供的代码是使用keras代码在Kaggle写的一个猫狗识别python脚本。
首先要做的是通过保存训练好的模型,并将其转换为tflite 格式。

import tensorflow as tf

#加载模型 tensorflow训练好保存的h5模型
model = tf.keras.models.load_model('M:\Edit\pythonProject1\cat_and_dog\model_design.h5')

#使用 convert()  from_keras_model(model) 方法进行转换
converter = tf.lite.TFLiteConverter.from_keras_model(model)
tflite_model = converter.convert()

#保存新的模型,下面是地址
open('M:\Edit\pythonProject1\cat_and_dog\detect3.tflite', 'wb').write(tflite_model)

代码注释如上,补充下:
小编在第一次运行的时候会报错,表示from_keras_model这个函数找不到。

我这里给出的答案是试着调一下tensorflow的版本,我这里的版本是2.11.0.

3.2

打开Android,新建一个项目EmptyActivity

android tensorflow lite,android,深度学习,tensorflow

然后按照下图,设置好目录,下面这几个是比较重要的文件。

android tensorflow lite,android,深度学习,tensorflow

下面我一个一个来分析

assets文件,在新建的时候,其右下角是没有标志的,我们需要右键按照下图操作,把其设为Resources Root.

这个文件用来存放模型的标签,lable

android tensorflow lite,android,深度学习,tensorflow

同理,ml文件,也需要设置为ResourcesRoot,用来存放训练好的模型文件

android tensorflow lite,android,深度学习,tensorflow

重点

创建两个Activity(创建一个也可以),MainActivity用来执行识别的活动,SplashActivity是页面加载的活动(可以忽略)

对应两个Activity创建它们的布局文件,就是layout下面的两个文件,这里主要介绍MainAcitivity和activity_main.xml

android tensorflow lite,android,深度学习,tensorflow

根据下面页面的需求,我们开始编程

android tensorflow lite,android,深度学习,tensorflow

1代表的ImageView组件,2代表的是TextView组件,34代表是Button组件

Talk is cheap.Show me your code

<ImageView
        android:id="@+id/imgPredict"
        android:layout_width="373dp"
        android:layout_height="400dp"
        android:layout_marginTop="20dp"
        android:scaleType="fitXY"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:src="@drawable/logo1" />

    <TextView
        android:id="@+id/textResultPredict"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="1:选择照片2:点击识别"
        android:textColor="#100F0F"
        android:textSize="20sp"
        app:layout_constraintBottom_toTopOf="@+id/buttonPredict"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/imgPredict" />

    <Button
        android:id="@+id/buttonPredict"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="识别"
        android:background="#EFB9B9"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/buttonSelect"
        app:layout_constraintTop_toBottomOf="@+id/textResultPredict" />

    <Button
        android:id="@+id/buttonSelect"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="选择"
        android:background="#EFB9B9"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/buttonPredict"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/textResultPredict" />

效果图如下

android tensorflow lite,android,深度学习,tensorflow

现在页面已经设计完成了,我们需要去使用Kotlin完成各个组件的业务逻辑。

首先我们需要绑定四个组件,分别代表2个按钮button,图片imagview和textView

 selectImage = findViewById(R.id.buttonSelect)
 letsPredict = findViewById(R.id.buttonPredict)
 imageToPredict = findViewById(R.id.imgPredict)
 resultPredict = findViewById(R.id.textResultPredict)

我们给两个按钮写上相应点击的业务逻辑。通俗来说就是用户只要点击了按钮,就能触发哪些业。

下面的一个是选择图片按钮,点击后通过intent跳转到手机本地相册,并返回图片;一个是识别图片按钮,先加载再调用模型对返回的图片进行实时的识别。

selectImage.setOnClickListener(View.OnClickListener {
            Log.d("mssg", "button pressed")
            var intent: Intent = Intent(Intent.ACTION_GET_CONTENT)
            intent.type = "image/*"

            startActivityForResult(intent, 100)
        })

letsPredict.setOnClickListener(View.OnClickListener {
            var resized = Bitmap.createScaledBitmap(bitmap, 224, 224, true)
            val model = com.example.iclassify.ml.MobilenetV110224Quant.newInstance(this)

            var tbuffer = TensorImage.fromBitmap(resized)
            var byteBuffer = tbuffer.buffer

加载标签文件labels.txt

Care!这里的标签文件需要与训练的模型的标签相互对应,顺序不能随意改变!

val labels =
            application.assets.open("labels.txt").bufferedReader().use { it.readText() }.split("\n")

下面这段代码分别用来处理输入以及输出流数据,以及最后模型资源的释放

// Creates inputs for reference.
            val inputFeature0 =
                TensorBuffer.createFixedSize(intArrayOf(1, 224, 224, 3), DataType.UINT8)
            inputFeature0.loadBuffer(byteBuffer)

// Runs model inference and gets result.
            val outputs = model.process(inputFeature0)
            val outputFeature0 = outputs.outputFeature0AsTensorBuffer

            var max = getMax(outputFeature0.floatArray)

            resultPredict.setText(labels[max])

// Releases model resources if no longer used.
            model.close()

4.Experiments:

android tensorflow lite,android,深度学习,tensorflow

5.Conclusion:

android tensorflow lite,android,深度学习,tensorflow

android tensorflow lite,android,深度学习,tensorflow

识别结果还不错!就先到这里了。

6.References:

TensorflowLite官网,很好的学习文档
AndroidStudio工具安装教程
TensorflowLite相关案例项目Github

额外知识补充

如何在AndroidStudio中向虚拟机传照片?

View–>ToolWindow–>Device File Explorer

android tensorflow lite,android,深度学习,tensorflow

找到sdcard文件,并在其目录下传照片

android tensorflow lite,android,深度学习,tensorflow

上传完照片后,记得重新启动虚拟机才会有效果!!!

android tensorflow lite,android,深度学习,tensorflow

重新启动后,在首页输入 File,点击File文件并进入相册,Image,即可看到自己上传的文件

android tensorflow lite,android,深度学习,tensorflow

最后如果想要完整项目的话可以在公众号AI知识物语 输入关键字:图像识别项目 来获取项目地址

我的项目模型可以识别1001个物种或者物品,包括动物,以及生活用品,下面是部分标签。

android tensorflow lite,android,深度学习,tensorflow

android tensorflow lite,android,深度学习,tensorflow

另外关于上面的这些东西前前后后忙了三天多,查阅了很多资料,感谢开源社区Github,CSDN,B站上各位朋友的开源贡献。

在教室写完这篇文章的时候,隔壁教室应该是给一个同学过SurpriseBirthdayParty,哈哈,也祝那个同学生日快乐()文章来源地址https://www.toymoban.com/news/detail-819486.html

到了这里,关于Tensorflowlite图像识别模型--安卓端部署教程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • yolov5-6.0项目部署+自用Pytorch模型转换rknn模型并在RK3568 linux(Debian)平台上使用qt部署使用NPU推理加速摄像头目标识别详细新手教程

    1 我们打开yolov的官网,Tags选择6.0版本 2. 下载该压缩包并解压到工程目录下 3. 我们这里使用pycharm,专门针对python的IDE,用起来非常方便,下载方式就是官网直接下载,用的是社区版 4. 我们需要安装环境,这里我推荐安装Anaconda在电脑上,这是一个非常方便的包管理工具,可

    2024年02月05日
    浏览(58)
  • 安卓手机部署分割模型

    模型来自:https://github.com/PaddlePaddle/PaddleSeg/blob/release/2.6/contrib/PP-HumanSeg/README_cn.md中的 PP-HumanSegV2-Lite。 部署到手机上用的是MNN。 安卓手机。 高亮的就是分割的人像结果 若要自己转模型,请自行安装https://github.com/PaddlePaddle/PaddleSeg,(本文代码提供了onnx模型和mnn模型)。具体流

    2024年02月09日
    浏览(23)
  • [Android Studio] 导入安卓Android项目教程

    A项目指:要导入的项目;B项目指自己电脑上可以运行的项目 根据步骤一步一步来,别急。 将要导入的项目(简称为A)根目录下的这些文件删掉:.gradle、.idea 、.iml后缀的文件、 local.properties 进入app文件夹,将这些文件删掉:build、.iml后缀的文件 打开一个你在自己电脑上可

    2024年02月04日
    浏览(38)
  • PyTorch模型安卓部署流程(NCNN)

            上一篇介绍了PyTorch模型部署流程(Onnx Runtime)的相关部署流程,再来简单的回顾一下~         模型部署指让训练好的深度学习模型在特定环境中运行的过程。模型部署会面临的难题: 运行模型所需的环境难以配置。深度学习模型通常是由一些框架编写,比如

    2024年02月12日
    浏览(31)
  • 从计算机视觉(Computer Vision)的角度出发,从传统机器学习的特征工程、分类器设计和优化,到深度学习的CNN架构设计、训练优化、模型压缩与推理部署,详细阐述了图像识别领域最新的技术发展方向

    作者:禅与计算机程序设计艺术 在现代信息技术的快速发展过程中,图像识别技术越来越重要。早期的人工智能算法主要侧重于特征提取、分类或回归任务。近几年,随着神经网络(Neural Networks)在图像识别领域的不断突破,很多研究人员将目光投向了深度学习(Deep Learni

    2024年02月10日
    浏览(36)
  • 【Android Studio】【NCNN】YOLOV5安卓部署

    坑非常多,兄弟们,我已经踩了三天的坑了,我这里部署了官方的yolov5s和我自己训练的yolov5n的模型 下载Android Studio,配置安卓开发环境,这个过程比较漫长。 安装cmake,注意安装的是cmake3.10版本。 根据手机安卓版本选择相应的安卓版本,我的是红米K30Pro,安卓12。 使用腾讯

    2024年02月20日
    浏览(88)
  • Android开发—基于OpenCV实现相机实时图像识别跟踪

    xmlns:opencv=“http://schemas.android.com/apk/res-auto” xmlns:tools=“http://schemas.android.com/tools” android:id=“@+id/activity_img_recognition” android:layout_width=“match_parent” android:layout_height=“match_parent” tools:context=“com.sueed.imagerecognition.CameraActivity” org.opencv.android.JavaCameraView android:id=“@+id/jcv”

    2024年04月17日
    浏览(30)
  • 轻量化的yolov8部署到安卓Android手机端

    一、pytorch环境配置和yolov8源码安装 首先在电脑上需要配置好pytorch环境,和yolov8源码的下载 然后针对yolov8做自己的轻量化改进 二、下载Android Studio和ncnn-android-yolov8 1. Android Studio官网链接: 下载 Android Studio 和应用工具 - Android 开发者  |  Android Developers 自行配置AS环境和JDK 我

    2024年01月19日
    浏览(38)
  • android原生开发教程,安卓开发入门到精通

    建造者模式: 观察者模式: 代理模式: 门面模式: 单例模式: 生产者消费者模式: 这个通过对比来描述,比如面向对象和面向过程的对比,针对这两种思想的对比,还可以举个开发中的例子,比如播放器的实现,面向过程的实现方式就是将播放视频的这个功能分解成多个过

    2024年04月11日
    浏览(54)
  • android studio 连接安卓手机/鸿蒙手机教程

    一、配置SDK 1.点击SDK Manager ​编辑 2.选择SDK平台与SDK工具 1.SDK平台: 2.SDK工具: 二、连接手机 1.开发者模式 2.连接数据线 三、运行android studio 1.SDK平台: 安卓手机 选择手机的安卓版本, 鸿蒙手机选择10.0即可 2.SDK工具: 第一步:点击 Google USB Driver 第二步:点击 OK 如果电脑

    2024年02月05日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包