基于计算机视觉的智慧养老系统

news2024/10/7 6:41:01

CV
基于计算机视觉的智慧养老系统

Intelligent elderly care system based on computer vision

Organization Webpage Poster Github Github

基于计算机视觉的智慧养老系统通过(模拟)多组摄像头实时拍摄到的画面,用计算机视觉技术实时分析老人的情感、是否有人摔倒、是否有人闯入禁止区域、老人是否有和义工互动、是否有陌生人出现并追踪陌生人。一旦上述事件发生,该事件会立即插入到数据库中。这些事件数据被实时地更新在报表中,管理人员因此可以迅速做出反应,从而可以提高管理人员的服务水平和管理能力。

01

本系统分为2部分,分别是 Web 用户界面 和基于计算机视觉的摄像头(群组)。其中,系统 Web 用户界面仅供系统管理员使用。系统管理员使用该系统不仅可以管理老人、工作人员和义工的信息,包括录入、查看等,还可以查看实时监控以及得到实时的事件报警,如陌生人入侵、陌生人追踪等。Web 用户界面的功能结构图如下图所示:

02

本文重点介绍该项目中摄像头(群组)负载的计算机视觉任务及其算法实现。根据项目需求,设计了如图所示的系统安装环境。办公室的摄像头用于收集人脸数据;房间的摄像头检测陌生人和老人微笑,走廊的摄像头检测是否有人摔倒,活动室的摄像头放在桌子上,当有义工访问才拿出来使用,同时在活动室安装标定板(用于获得世界坐标系与像素坐标系的映射关系),院子的摄像头监控是否有人闯入禁止区域。

01
  • Nginx-RTMP与直播推流

在实时监控方面,搭建 Nginx-RTMP 直播推流服务器。Nginx 是一个非常出色的 HTTP 服务器, FFMPeg 是非常好的音视频解决方案。这两个东西通过一个 Nginx 的模块 nginx-rtmp-module, 组合在一起即可以搭建一个功能相对比较完善的流媒体服务器。这个流媒体服务器可以支持RTMP和HLS(Live Http Stream)。

RTMP 在互联网 TCP/IP 五层体系结构中应用层,RTMP 协议是基于TCP协议的,是面向连接的协议,能够为数据的传输提供可靠保障,因此数据在网络上传输不会出现丢包的情况。不过这种可靠的保障也会造成一些问题,也就是说前面的数据包没有交付到目的地,后面的数据也无法进行传输。系统的视频流传输结构如图所示。

01
  • 单样本学习与人脸识别

在人脸识别的情况下,模型或系统可能只有一个或几个给定人脸的样本,并且必须从新照片中正确识别出该人,包括在表情、发型、光照和首饰等都有所变化的情况下。因此,人脸识别是单样本学习的常见例子之一

现代人脸识别系统通过学习丰富的低维特征表示方法(称为人脸嵌入)来解决通过人脸识别进行单样本学习的问题。这种低维特征表示可以很容易地计算出人脸,并在验证和识别任务中进行比较。

从历史上来看,嵌入是通过使用孪生网络(Siamese network)来解决单样本学习问题的。通过对具有对比损失(Comparative Loss)函数的孪生网络进行训练,获得了更好的性能,后来导致了 Google 在 FaceNet 系统中使用三重损失(Triplet Loss)函数,这个函数在基准人脸识别任务取得了当时最先进的结果。

如图所示,传统 CNN 包含卷积层、全连接层等组件,并采用 softmax 多类别分类器和多类交叉熵损失函数。

01

孪生神经网络是单样本学习中最具代表性的模型。孪生网络是由两个并行神经网络构成的架构,每个神经网络采用不同的输入,其输出被组合起来以提供一些预测。这个网络的两个子网络相同(不同则为伪孪生神经网络),两个子网络有相同的参数和权重。其目标是寻找两个可比较对象的相似程度(例如,签名验证、人脸识别等)。

01

学习像图像这样的复杂输入的向量表示就是降维的一个例子。有效降维的目标是学习一种新的低维表示,它保留了输入的结构,使得输出向量之间的距离能够有意义地捕捉到输入中的差异。然而,向量必须捕获到输入中的不变特征。降维是孪生网络用于解决单样本学习的方法。

Raia Hadsell 等人在 2006 年发表的一篇题为《学习不变映射的降维》(《Dimensionality Reduction by Learning an Invariant Mapping》)论文中,探讨了利用具有图像数据的卷积神经网络进行孪生网络降维,并提出了通过对比损失对模型进行训练的方法。与在训练数据集中的所有输入样本中评估模型性能的其他损失函数不同,对比损失是在成对的输入之间计算的,例如提供给孪生网络的两个输入之间。对比损失是在成对的输入之间计算的,例如提供给孪生网络的两个输入之间。

成对的样本被提供给网络,损失函数根据样本的类别是相同的还是不同对模型进行不同的惩罚。具体来说,如果类是相同的,损失函数就鼓励模型输出更为相似的特征向量,而如果类不同的话,那么损失函数就会鼓励模型输出不太相似的特征向量。因此,对比损失可用来训练人脸识别系统,特别是用于人脸认证的任务。

对比损失的概念可以进一步扩展,从两个样本扩展到三个样本,称为三重损失。Google 的 Florian Schroff 等人在 2015 年发表的论文《FaceNet:人脸识别和聚类的统一嵌入》(《FaceNet: A Unified Embedding for Face Recognition and Clustering》)中介绍了三重损失。

Triplet 是一个三元组,这个三元组是这样构成的:从训练数据集中随机选一个样本,该样本称为 Anchor,然后再随机选取一个和 Anchor 属于同一类的样本和不同类的样本,这两个样本对应的称为 Positive 和 Negative,由此构成一个(Anchor,Positive,Negative)三元组。损失函数对模型进行惩罚,减小匹配样本之间的距离,增加了非匹配样本之间的距离。

01

这种方法是 FaceNet 系统的基础。FaceNet 是一个通用的系统,可以用于人脸验证,识别和聚类,它直接学习图像到欧式空间上点的映射,两张图像所对应的特征的欧式空间上的点的距离直接对应着两个图像的相似程度。

01

在本系统中,人脸验证的思路是通过人脸检测器将人脸从图像中提取出来,通过Facenet 进行验证。如下图所示:

01

对比了不同的人脸检测器,发现OpenCV中提供的DNN运行速度快,对遮挡等情况适用。

检测器第三方库CPU非正面和遮挡
Haar
OpenCV实时
不起作用
DNN
OpenCV
实时
适用
HoG
Dlib
最快
轻微遮挡和稍不正面
CNN
Dlib
很慢
适用

不同人脸检测器的效果如下图所示

01

此外,从用户角度出发,在建立人脸数据库时,通过 OpenCV 和 win32com 从文字和语音方面进行操作提示。

01
  • Mini-Xception 与微笑检测

在微笑检测上,我们使用了基于fer2013数据集的Mini-Xecption模型,该模型移除了全连接层,结合了残差模块和深度可分离卷积减少参数,达到实时检测的目的。

01

😀 移除全连接层:VGG16 中90%的参数位于全连接层,与 AlexNet 相比,Mini-Xception 参数从 60M 减少到了 600,000

😀 结合了 residual modules 和 depth-wise separated convolutions

  • residual modules enable the gradients better back-propagate to lower layers
  • depth-wise separated convolutions spatial cross-correlations are separable convolutions channel cross-correlations. Therefore the number of parameters is further reduced in convolutional layers
  • 人脸识别综合算法

综上,我们首先建立人脸数据库,通过人脸检测器提取出图片中的人脸进行处理,利用 Facenet 计算新图片中人脸与数据库中人脸的欧式距离 ,若最小值大于选定的阈值(基于 KNN 和 SVM),则发出陌生人警告,反之,若新图片中的人脸为老人,则通过 Mini-Xception 选择置信度最大的情绪识别结果。算法结构如下图所示。

01
  • 物体运动特征与摔倒检测

摔倒检测方面,从单幅图像上来看,我们可以提取出人的高度、宽度和夹角信息。

01

从时间序列上来看,除了上述特征,我们还可以提取出速度和加速度,摔倒行为的特征表现如图所示。

01

中使用的背景差分法,由于易受到摄像头摆动等因素干扰而影响测量准确度。

01

故在本项目中使用 OpenPose 提取人体关键点从而提取人体运动特征。OpenPose 是由 C++ 开发的开源库,可用于实时人体姿态估计等,为了在python 中使用,需要对其进行编译。(在 提供了基于 Windows 10 + Python 3.7.4 + vs2017 +cmake 3.18.0 + OpenPose 1.6 + CUDA 10.0 +cudnn -10.0-windows10-x64-v7.6.5.32 的编译结果,自行编译请参考

01

但 OpenPose 在人体姿势极端的情况下,识别准确度下降,为识别摔倒的老人通过挥手臂等方式求救,我们实现了基于人体关键点和背景差分的摔打检测算法,利用人力关键点提取出速度、高度、宽度等描述特征,当发生异常通过背景差分提取出角度特征,当特征连续多次满足摔倒检测阈值时,则发出摔倒报警。算法结构如图所示。

01
01

该摔倒检测算法的效果如下

ScreenShot

  • 系统标定与互动检测

在互动检测上,我们假定老人与义工的距离小于50cm即发生互动。因此需要建立像素坐标系与世界坐标系的映射关系。伪随机序列具有良好的窗口特性,即通过一个较小的窗口在编码图案上面移动时,每个窗口内的编码组合是唯一的,根据窗口的这个特性可以唯一地辨识编码图案上的特征点。

作为本原多项式生成伪随机序列,通过伽罗华域下的四则运算,生成 的伪随机矩阵,窗口大小为

01 02 02

编码图案以菱形作为基本图案,菱形的角点作为特征点,以红、蓝、绿、黑四种颜色作为菱形的颜色。分别对应矩阵中的不同数值,通过颜色及位置对特征点进行编码,从而可以唯一确定图案中某一角点的位置,进而确定不同角点在世界坐标系下的相对位置。

通过设计的解码算法,可以将角点位置精确到亚像素,在Lab演色空间下进行颜色分类,完成解码。

  • 确定候选特征点:
  • 确定特征点:
  • 8邻域广度优先搜索将特征点位置精确到亚像素
  • 色彩校正、Lab 颜色空间对菱形颜色分类并解码

标定部分算法结构可参考下面伪代码:

01

如图分别为拍摄原图,角点位置和颜色分类结果。

01 02 02
  • 移动物体监测与跟踪

在禁止区域入侵监测方面,包括物体监测和物体追踪两部分。在本项目中,物体检测的目的是识别出人这个物体,而物体追踪则是追踪画面中检测到的人。在对比了不同物体检测方法(如 R-CNN、YOLO等)后,出于实时性和准确性的考虑,选择了质心跟踪算法。其算法步骤如图所示。

01

Features

  • OpenCV 人脸检测器识别人脸,拍照录入人脸信息
  • win32com.client 语音提示
  • FaceNet 单样本人脸识别
  • Mini-Xception 基于 fer2013 数据集的表情识别
  • 综合 Face Detector+FaceNet+Mini-Xception 的老人微笑检测+陌生人检测(Happy-Elder-Care-Net)
  • 提供基于 Python 3.7.4 + vs2017 +cmake 3.18.0 + OpenPose 1.6 + CUDA 10.0 +cudnn -10.0-windows10-x64-v7.6.5.32 的编译结果
  • 基于 Windows 10 + OpenPose + Background Subtraction 计算人体高度、宽度、角度、速度等指标的摔倒检测
  • 基于 GF(4) 标定的交互检测
  • 基于质心跟踪的入侵检测和追踪
  • 基于 Nginx-RTMP 的直播推流

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/362969.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

我的 System Verilog 学习记录(2)

引言 从本文开始,就开始系统学习 System Verilog ,不只是语法,还有结合 Questa Sim 的实际编程练习、Debug。 本文简单介绍 System Verilog 语言的用途以及学习的必要性。 前文链接: 我的 System Verilog 学习记录&#xff08…

C#从值类型、引用类型到装箱和拆箱

上一篇文章讲了C#的值类型和引用类型,这里再来看看值类型和引用类型最直接的使用场景:装箱和拆箱。 一、基本概念 装箱:值类型转化为引用类型的过程。从托管堆中为新生成的引用类型对象分配内存,再把值类型的实例字段拷贝到托管堆上新对象的…

面向对象的三大特征

面向对象(OOP)的三大特征:继承、封装、多态 一、封装性 为什么需要封装?封装的作用和含义? 我要用洗衣机,只需要按一下开关和洗涤模式就可以了。有必要了解洗衣机内 部的结构吗?有必要碰电动机…

C语言【atoi函数】

C语言【atoi函数】🫅系统atoi函数🫅 模拟实现atoi函数看到atoi函数,有人又会问有这个函数,我怎么没用过。那就说明:不是你刷题太少,就是atoi函数存在感太低。 这篇函数就带你领略atoi函数的魅力 &#x1fa…

APP测试中ios和androis的区别,有哪些注意点

目录 一、运行机制不同 二、对app内存消耗处理方式不同 三、后台制度不同 四、最高权限指令不同 五、推送机制不同 六、抓取方式不同 七、灰度发版机制不同 八、审核机制不同 总结感谢每一个认真阅读我文章的人!!! 重点:…

Arduino-流水灯

LED流水灯实验产品介绍:电阻:电阻器通常分为三类:固定电阻器、可调电阻器及特殊电阻器。普通电阻器的识别电阻器阻值和允许误差常用的标志方法有下列3种。1、直接标志法将电阻器的阻值和误差等级直接用数字印在电阻器上。对小于1000W的阻值只…

C语言进阶(五)—— 多维数组

1. 一维数组 元素类型角度:数组是相同类型的变量的有序集合内存角度:连续的一大片内存空间在讨论多维数组之前,我们还需要学习很多关于一维数组的知识。首先让我们学习一个概念。1.1 数组名考虑下面这些声明:int a; int b[10];我们…

6、Fatfs系统移植

注意:挂载Fatfs笔记 Fatfs系统读写文件的时间是不固定的,随机性 搭载Fatfs的外设通信方式建议开启DMA方式,否则应避免中断打断时序,导致Fatfs出现FR_DISK_ERR(A hard error occurred in the low level disk I/O layer&…

金三银四丨黑蛋老师带你剖析-安全开发岗

作者丨黑蛋在之前呢,我们聊了二进制这块的病毒岗位,漏洞岗位,逆向岗位以及CTF这块的岗位。今天我们就来聊一聊安全开发类的工作岗位。首先网络安全方向中安全开发岗位都有哪些,安全开发主要指安全研发工程师或安全开发工程师&…

手写线程池实例并测试

前言:在之前的文章中介绍过线程池的核心原理,在一次面试中面试官让手写线程池,这块知识忘记的差不多了,因此本篇文章做一个回顾。 希望能够加深自己的印象以及帮助到其他的小伙伴儿们😉😉。 如果文章有什么…

运动戴耳机哪种款式比较好、最好用的运动耳机

很多人喜欢运动时听音乐,因为在运动场景中,听歌的节奏与步频匹配的时候,的确是可以起到很好的激励和缓解情绪的作用。认认真真地选择一副适合自己跑步的运动耳机,成了很多跑步爱好者的实际需求,专门为运动打造的耳机也不少!那么,如何挑选一款…

macm1安装qt6

macm1安装qt6 本文目录macm1安装qt6前提下载在线安装包使用安装包进行安装QT creator测试运行环境前提 需要安装xcode以及command line tools 需要先注册账号密码 根据官方提示,5.15版本以上就不支持离线安装了,需要下载在线安装包 OFFLINE_README.txt…

Anaconda和PyCharm的一些安装问题和命令

今天更新了Windows上的Anaconda到2.3.2,PyCharm到2022.3。 ——发现是纯纯的犯贱orz。出了一堆问题。在这里记录一下供后来者参考。 Anaconda安装 将.\anaconda3\Scripts 和.\anaconda3\Library\bin添加到系统环境变量中。 新建环境的目录在.\anaconda3\envs下 N…

Retrofit源码分析

文章目录一、简介二、源码分析2.1Retrofit的本质流程2.2源码分析2.2.1 创建Retrofit实例步骤1步骤2步骤3步骤4步骤5总结2.2.2创建网络请求接口的实例外观模式 & 代理模式1.外观模式2. 代理模式步骤3步骤4总结2.2.3执行网络请求同步请求OkHttpCall.execute()1.发送请求过程2…

解决 NestHost requires ASM7 (shrink、kotlin metadata)

① 场景 Caused by: java.lang.RuntimeException: NestHost requires ASM7Failed to resolve class org/vigame/demo/CrashHandler$1.class[transform input:not foundproject input:not foundaar input:not found]Caused by: java.lang.UnsupportedOperationException: NestH…

flstudio21中文版下载安装图文教程

fl studio21中文版是一款免费的音乐编曲制作软件,有了它你可以制作出色的音乐。它为您提供了一个集成的开发环境,使用起来非常简单有效,您的工作会变得更有条理。同时FL Studio为用户提供了更先进和原创的音乐制作理念,用户可以轻…

简单学生管理系统

文章目录1. 学生类2. 学生管理类3. 运行结果1. 学生类 包含四个属性,学号、姓名、年龄及地址。类中包含一个无参构造、一个有参构造以及各属性的 get、set 方法。 package com.zxe;public class Student {private String id;private String name;private String a…

Vue+element ui遇到的一些疑难问题总结(一)

element ui 疑难总结1. el-date-picker时间区间控制2. el-cascader 获取name3. el-tree 搜索判断是否匹配到值1. el-date-picker时间区间控制 控制只能选区间(7天,一个月,两个月等等)重点为 :picker-options"pickerOptions&…

Python爬虫(10)selenium爬虫后数据,存入csv、txt并将存入数据并对数据进行查询

之前的文章有关于更多操作方式详细解答,本篇基于前面的知识点进行操作,如果不了解可以先看之前的文章 Python爬虫(1)一次性搞定Selenium(新版)8种find_element元素定位方式 Python爬虫(2)-Selenium控制浏览…

【原创】java+swing+mysql大学生竞赛管理系统设计与实现

上一篇文章我们介绍了使用swingtxt进行系统设计和数据存储,今天我们还是回归现实,使用javaswingmysql去设计开发一个大学生竞赛管理系统,以方便管理员对大学竞赛的一些信息进行管理。 功能分析: 大学生竞赛管理系统主要是提供给…