跌倒检测和识别3:Android实现跌倒检测(含源码,可实时跌倒检测)

目录

跌倒检测和识别3:Android实现跌倒检测(含源码,可实时跌倒检测)

1. 前言

2. 跌倒检测数据集说明

3. 基于YOLOv5的跌倒检测模型训练

4.跌倒检测模型Android部署

(1) 将Pytorch模型转换ONNX模型

(2) 将ONNX模型转换为TNN模型

(3) Android端上部署模型

(4) 一些异常错误解决方法

5. Android跌倒检测效果

6.项目源码下载


1. 前言

这是项目《跌倒检测和识别》系列之《Android实现跌倒检测(含源码,可实时跌倒检测)》;本篇主要分享将Python训练后的YOLOv5的跌倒检测模型移植到Android平台。我们将开发一个简易的、可实时运行的跌倒检测Android Demo,可实现检测人体的up(站立),bending(弯腰,蹲下)和down(躺下,摔倒)三种状态。

考虑到原始YOLOv5的模型计算量比较大,鄙人在YOLOv5s基础上,开发了一个非常轻量级的的跌倒(摔倒)检测模型yolov5s05_320。从效果来看,Android跌倒(摔倒)检测模型的检测效果还是可以的,高精度版本YOLOv5s平均精度平均值mAP_0.5:0.95=0.73693,而轻量化版本yolov5s05_416平均精度平均值mAP_0.5:0.95=0.50567左右。APP在普通Android手机上可以达到实时的检测识别效果,CPU(4线程)约30ms左右,GPU约25ms左右 ,基本满足业务的性能需求。

先展示一下Android Demo跌倒检测和识别的效果:

     

【Android APP体验】https://download.csdn.net/download/guyuealian/87707747

【尊重原创,转载请注明出处】https://blog.csdn.net/guyuealian/article/details/130250824


 更多项目《跌倒检测和识别》系列文章请参考:

  1. 跌倒检测和识别1:跌倒检测数据集(含下载链接):https://blog.csdn.net/guyuealian/article/details/130184256
  2. 跌倒检测和识别2:YOLOv5实现跌倒检测(含跌倒检测数据集和训练代码):https://blog.csdn.net/guyuealian/article/details/130250738
  3. 跌倒检测和识别3:Android实现跌倒检测(含源码,可实时跌倒检测):https://blog.csdn.net/guyuealian/article/details/130250824

  4. 跌倒检测和识别4:C++实现跌倒检测(含源码,可实时跌倒检测):https://blog.csdn.net/guyuealian/article/details/130250838


2. 跌倒检测数据集说明

目前收集了约4000的跌倒检测数据集和26000+跌倒分类数据集,关于跌倒检测数据集说明,请参考:跌倒检测和识别1:跌倒检测数据集(含下载链接)


3. 基于YOLOv5的跌倒检测模型训练

官方YOLOv5给出了YOLOv5l,YOLOv5m,YOLOv5s等模型。考虑到手机端CPU/GPU性能比较弱鸡,直接部署yolov5s运行速度十分慢。所以本人在yolov5s基础上进行模型轻量化处理,即将yolov5s的模型的channels通道数全部都减少一半,并且模型输入由原来的640×640降低到416×416或者320×320,该轻量化的模型我称之为yolov5s05。轻量化后的模型yolov5s05比yolov5s计算量减少了16倍,参数量减少了7倍。

下面是yolov5s05和yolov5s的参数量和计算量对比:

模型 input-size params(M) GFLOPs
yolov5s 640×640 7.2 16.5
yolov5s05 416×416 1.7 1.8
yolov5s05 320×320 1.7 1.1

yolov5s05和yolov5s训练过程完全一直,仅仅是配置文件不一样而已;碍于篇幅,本篇博客不在赘述,详细训练过程请参考: 《跌倒检测和识别2:YOLOv5实现跌倒检测(含跌倒检测数据集和训练代码) :https://blog.csdn.net/guyuealian/article/details/130250738


4.跌倒检测模型Android部署

(1) 将Pytorch模型转换ONNX模型

训练好yolov5s05或者yolov5s模型后,你需要将模型转换为ONNX模型,并使用onnx-simplifier简化网络结构

# 转换yolov5s05模型
python export.py --weights "data/model/yolov5s05_320/weights/best.pt" --img-size 320 320
# 转换yolov5s模型
python export.py --weights "data/model/yolov5s_640/weights/best.pt" --img-size 640 640

GitHub: https://github.com/daquexian/onnx-simplifier
Install:  pip3 install onnx-simplifier

(2) 将ONNX模型转换为TNN模型

目前CNN模型有多种部署方式,可以采用TNN,MNN,NCNN,以及TensorRT等部署工具,鄙人采用TNN进行Android端上部署:

TNN转换工具:

  • (1)将ONNX模型转换为TNN模型,请参考TNN官方说明:TNN/onnx2tnn.md at master · Tencent/TNN · GitHub
  • (2)一键转换,懒人必备:一键转换 Caffe, ONNX, TensorFlow 到 NCNN, MNN, Tengine   (可能存在版本问题,这个工具转换的TNN模型可能不兼容,建议还是自己build源码进行转换,2022年9约25日测试可用)

​​

(3) Android端上部署模型

项目实现了Android版本的跌倒(摔倒)检测Demo,部署框架采用TNN,支持多线程CPU和GPU加速推理,在普通手机上可以实时处理。Android源码核心算法YOLOv5部分均采用C++实现,上层通过JNI接口调用

package com.cv.tnn.model;import android.graphics.Bitmap;public class Detector {static {System.loadLibrary("tnn_wrapper");}/**** 初始化模型* @param model: TNN *.tnnmodel文件文件名(含后缀名)* @param root:模型文件的根目录,放在assets文件夹下* @param model_type:模型类型* @param num_thread:开启线程数* @param useGPU:关键点的置信度,小于值的坐标会置-1*/public static native void init(String model, String root, int model_type, int num_thread, boolean useGPU);/**** 检测* @param bitmap 图像(bitmap),ARGB_8888格式* @param score_thresh:置信度阈值* @param iou_thresh:  IOU阈值* @return*/public static native FrameInfo[] detect(Bitmap bitmap, float score_thresh, float iou_thresh);
}

如果你想在这个Android Demo部署你自己训练的YOLOv5模型,你可将训练好的Pytorch模型转换ONNX ,再转换成TNN模型,然后把TNN模型代替你模型即可。

(4) 一些异常错误解决方法

  • TNN推理时出现:Permute param got wrong size

官方YOLOv5:  GitHub - ultralytics/yolov5: YOLOv5

跌倒检测和识别3:Android实现跌倒检测(含源码,可实时跌倒检测)相关推荐

  1. 体验Android:个人所得税计算器 含源码

    体验Android 个人所得税计算器 含源码 http://files.cnblogs.com/mobile/ptc.rar 转载于:https://www.cnblogs.com/mobile/ar ...

  2. 用Linux / C实现基于自动扩/减容线程池+epoll反应堆检测沉寂用户模型的服务器框架(含源码)

    用Linux/ C实现基于自动扩/减容线程池+epoll反应堆模型的服务器框架 前言 服务器端源码 客户端源码 自定义库 helper.c 和 helper.h helper.c helper.h M ...

  3. 面部表情识别3:Android实现表情识别(含源码,可实时检测)

    面部表情识别3:Android实现表情识别(含源码,可实时检测) 目录 面部表情识别3:Android实现表情识别(含源码,可实时检测) 1.面部表情识别方法 2.人脸检测方法 3.面部表情识别模型训 ...

  4. 戴眼镜检测和识别3:Android实现戴眼镜检测和识别(含源码,可实时检测)

    Android实现戴眼镜检测和识别(含源码,可实时检测) 目录 Android实现戴眼镜检测和识别(含源码,可实时检测) 1.戴眼镜检测和识别方法 2.戴眼镜人脸检测 3.戴眼镜识别模型训练 4.戴眼 ...

  5. android 活体识别人脸动作活体静默活体Demo源码实现讲解

    android 活体识别人脸动作活体静默活体Demo源码实现讲解 这里说活体是基于单目摄像头活体,适合所有普通安卓Android 单目摄像头的手机,双目的需要硬件支持,这里不讲述 . 百度网盘体验地址 ...

  6. 行人检测(人体检测)3:Android实现人体检测(含源码,可实时人体检测)

    行人检测(人体检测)3:Android实现人体检测(含源码,可实时人体检测) 目录 行人检测(人体检测)3:Android实现人体检测(含源码,可实时人体检测) 1. 前言 2. 人体检测数据集说明 ...

  7. Android实现红绿灯检测(含Android源码 可实时运行)

    Android实现红绿灯检测(含Android源码 可实时运行) 目录 Android实现红绿灯检测(含Android源码 可实时运行) 1. 前言 2. 红绿灯检测数据集说明 3. 基于YOLOv5 ...

  8. 人脸识别4:Android InsightFace实现人脸识别Face Recognition(含源码)

    人脸识别4:Android InsightFace实现人脸识别Face Recognition(含源码) 目录 人脸识别4:Android InsightFace实现人脸识别Face Recognit ...

  9. 【Android 事件分发】ItemTouchHelper 源码分析 ( OnItemTouchListener 事件监听器源码分析 )

    Android 事件分发 系列文章目录 [Android 事件分发]事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 ) [Andr ...

最新文章

  1. mysql 5.7笔记_关于MySql 5.7.29免安装版本的一个笔记
  2. iOS开发-照片选择
  3. sicily 1150. 简单魔板
  4. HADOOP学习笔记(一):HDFS
  5. android怎么打开wifi的组播功能
  6. 高等数学超入门学习笔记
  7. 机器学习之Adaboost (自适应增强)算法
  8. 华为P40系列国行版来了:价格成最大悬念!
  9. snowpack 快速开始
  10. 快速通过软件设计师考试方法
  11. 文档未记录的API之setContentToHTMLString
  12. dlna和miracast可以共存吗_同屏镜像功能哪家强?DLNA miracast等技术解读
  13. SPSS入门教程——方差齐性检验的方法有哪些
  14. java实训任务_java实训任务
  15. spring mvc 响应处理post请求和get请求 测试
  16. SpringMVC在web.xml中配置DispatcherServlet拦截了静态资源访问
  17. 可爱的树链剖分(染色)
  18. CentOS6.5搭建asterisk及配置软电话
  19. cu3er 3D幻灯切换效果 div被遮住的解决方法
  20. 远程服务器访问 JupyterLab

热门文章

  1. 序列模式挖掘——GSP算法实战
  2. 基于LabVIEW编程的虚拟函数信号发生器
  3. 没有网络可以使用信用卡吗?
  4. 即时通讯开发Android端消息推送总结
  5. windows10系统恢复到某个时间点。
  6. 抖音酒商如何实现转化变现;附带抖音最新酒类招商规则;丨国仁网络资讯
  7. 自动检测友情链接的在线工具
  8. DLO-SLAM代码阅读
  9. [深入研究4G/5G/6G专题-24]: 5G NR开机流程4.2 - 随机接入应答消息MSG2的调度过程与上行同步、时间提前量TA通过PDSCH信道下发
  10. 什么是Transparent HugePages