• 体态识别算法在 Android 端部署实例


    背景介绍

      随着软硬件技术的发展,智能穿戴式设备逐渐从概念走向商用化。在过去几年内,Google、Apple以及Sony等科技公司在体积、功耗控制以及成本等方面做得越来越好,推出了一大批可穿戴产品,具有代表性的成果有:1. 智能手环:产品具备运动监测、睡眠监测、心率测量以及震动唤醒等功能;2. 智能眼镜:广泛应用于VR、AR领域。

      近来,在哔哩哔哩上看到一个很有趣的成果:项目中将陀螺仪集成到狗狗衣服内,后续通过无线的方式将关节数据传输给手机APP,在手机端通过人工智能算法识别狗的运动状态,并且通过three.js将结果进行可视化。整个项目主要包含硬件和软件两部分,其中硬件部分主要是对传感器的输出信号进行采集,前期文章中具有详细描述,具体可以参考:数据采集版以及血压信号采集等;近来,想要在软件方面做一些初期工作,将深度学习模型集成到Android 端,具体过程如下所示:

    在这里插入图片描述

    图1 体态识别算法的应用实例

      附1、不管是现阶段非常火的机器学习,还是研究生阶段从事的有限元模拟,其本质都是如何利用数据,让数据发挥应有的价值。

    系统框架

      前期推文中详细介绍了体态识别算法的原理、模型的训练过程以及算法的应用实例等,然而如何将模型部署到手机端是一个亟待解决的问题。调研发现,项目实施过程主要包含:1. 将现有的checkpoints模型文件转化为 .tflite文件;2. 在 Android 端加载 .tflite文件,具体过程如下所示:

    在这里插入图片描述

    图2 体态识别算法在Android 端部署实例

    深度学习模型格式转化

      预想中这部分应该没有任何难度,通过几行代码就能实现模型格式转化,奈何实际执行过程中一直报错,显示找不到相应的库函数,场面一度极为尴尬。因为环境问题折腾了大半天,最后将tensorflow升级到1-14版本,成功解决该问题(在此记录一波,希望大家能够少走弯路)~

    converter = tf.compat.v1.lite.TFLiteConverter.from_session(sess, [X], [y_pred_softmax])
    tflite_model = converter.convert()
    open("converted_model.tflite", "wb").write(tflite_model)
    
    • 1
    • 2
    • 3

    程序运行后能够自动输出 .tflite文件,具体如图3所示:

    图3 模型转换结果文件

    深度学习模型在Android 端的部署

      近来在同学小A的帮组下,将深度学习模型部署在Android studio 内,我们通过调用 'org.tensorflow : tensorflow - lite- support:0.1.0’实现 .tflite 模型的加载,后续编写数据接口函数,对硬件端传输的数据进行解算,并作为输入参数传递给深度学习模型,图4展示了模型的预测结果(与Linux端部署完全一致)。

    在这里插入图片描述

    图4 深度学习在Linux端部署时的预测结果

    项目中用到的程序代码为:

    val outputs = model.process(inputFeature0)
                val resultByteBuffer = outputs.outputFeature0AsTensorBuffer.buffer
                val arr = ByteArray(resultByteBuffer.limit())
                resultByteBuffer.position(0)
                resultByteBuffer.get(arr, 0, arr.size)
                findViewById<TextView>(R.id.tv_result).apply {
                    text = "原始数据: ${arr.contentToString()}\n解析数据: ${Utils.byteArrayToFloatArray(arr).contentToString()}"
                }
                model.close()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
  • 相关阅读:
    tomcat启动报错
    UI设计师面试时如何自我介绍优漫动游
    10年软件测试工程师经验,很茫然....
    cpu与指令集
    前端学习案例-有哪些是你成为一名开发之后才知道的事情2021
    Win10安装DBeaver连接MySQL8、导入和导出数据库详细教程
    Spring(五)- Bean 实例化的基本流程
    Java毕业设计项目源码Java基于springboot的高校专业实习管理系统的设计和开发
    Web 前端基础操作小结
    MySQL中USER()和CURRENT_USER()的区别
  • 原文地址:https://blog.csdn.net/qq_41137829/article/details/127991717