小工具知识网

当前位置: 首页 > 行业知识 > 实战 | 用Python 和 OpenCV搭建老人跌倒智能监测系统 (步骤 + 源码)

行业知识

实战 | 用Python 和 OpenCV搭建老人跌倒智能监测系统 (步骤 + 源码)

2026-11-03 11:46:52 来源:互联网转载

一个不���名大学生,江湖人称菜狗

original author: jacky Li

Email : 3435673055@qq.com

 Time of completion:2023.2.4

Last edited: 2023.2.4

导读

本文将使用Python、OpenCV和MediaPipe搭建一个老人跌倒智能监测系统。为了防止以后安静摔倒没人照看。

目录

背景介绍

实现步骤

【1】导入必要的模块:

【2】定义一个计算角度的函数:

【3】查找坐标:

【4】如何知道主体(老人)是安全的还是跌倒的?

【5】如何区分床和地板?

【6】让我们在屏幕上打印结果:

【7】添加图形用户界面:

作者有言


背景介绍

    老人监测系统是一种智能检测系统,可以检测老人是否躺在床上或是否跌倒在地。这是一个解决实际问题的程序,可用于在您外出工作或外出时监控家中的老人,以便在出现任何问题时通知您。

实现步骤

【1】导入必要的模块:

    在 python 中导入 Numpy、MediaPipe 和 opencv

import cv2import mediapipe as mpimport numpy as np

【2】定义一个计算角度的函数:

    由于我们将根据我们使用 OpenCV 获得的角度和坐标来假设一个人是在行走还是跌倒在地上,因此,我们必须计算角度,最简单的方法是定义一个函数,然后调用它在程序中。

def calculate_angle(a,b,c):    a = np.array(a) # First    b = np.array(b) # Mid    c = np.array(c) # End        radians = np.arctan2(c[1]-b[1], c[0]-b[0]) - np.arctan2(a[1]-b[1], a[0]-b[0])    angle = np.abs(radians*180.0/np.pi)        if angle >180.0:        angle = 360-angle            return angle 

【3】查找坐标:

    我们还必须找到坐标,以便我们可以在条件下使用它们,也可以将它们与calculate_angle函数一起使用。

            left_eye = [landmarks[mp_pose.PoseLandmark.LEFT_EYE.value].x,landmarks[mp_pose.PoseLandmark.LEFT_EYE.value].y]            left_hip= [landmarks[mp_pose.PoseLandmark.LEFT_HIP.value].x,landmarks[mp_pose.PoseLandmark.LEFT_HIP.value].y]            left_heel = [landmarks[mp_pose.PoseLandmark.LEFT_HEEL.value].x,landmarks[mp_pose.PoseLandmark.LEFT_HEEL.value].y]            right_eye = [landmarks[mp_pose.PoseLandmark.RIGHT_EYE.value].x,landmarks[mp_pose.PoseLandmark.RIGHT_EYE.value].y]            right_hip = [landmarks[mp_pose.PoseLandmark.RIGHT_HIP.value].x,landmarks[mp_pose.PoseLandmark.RIGHT_HIP.value].y]            right_heel = [landmarks[mp_pose.PoseLandmark.RIGHT_HEEL.value].x,landmarks[mp_pose.PoseLandmark.RIGHT_HEEL.value].y]            right_index = [landmarks[mp_pose.PoseLandmark.RIGHT_INDEX.value].x,landmarks[mp_pose.PoseLandmark.RIGHT_INDEX.value].y]             left_index = [landmarks[mp_pose.PoseLandmark.LEFT_INDEX.value].x,landmarks[mp_pose.PoseLandmark.LEFT_INDEX.value].y]            # Calculate angle

【4】如何知道主体(老人)是安全的还是跌倒的?

    我们将借助从 cv2 和 mediapipe 获得的坐标以及使用上述定义的函数获得的角度来找到这一点。

    由于我们正在获取眼睛臀部和脚踝的坐标,因此我们知道当一个人平躺(倒下)时,他的眼睛、臀部和脚踝之间的角度在 170 到 180 度的范围内。因此,我们可以简单地提出一个条件,当角度在 170 -180 度之间时,我们可以说一个人摔倒了。

                if angle1 != angle2 and (angle1>170 and angle2>170):                    if (((right_index[0]0.20) and (right_index[1]0.15)) or ((left_index[0]0.18) and (left_index[1]0.15))):                        stage="Hanging on !!"                    else:                        stage = "fallen :("                    elif angle1 != angle2 and (angle1

上一篇:给服务器喷液体怎么喷?

下一篇:北字五笔打字法详解,轻松掌握高效打字技巧