基于opencv的家居智能安防机器视觉系统

发布时间:2024-11-28 01:14

智能家居安防系统的基本安装步骤 #生活技巧# #居家生活技巧# #家居保养技巧# #智能家居操作指南#

基于opencv的家居智能安防机器视觉系统(关键词:Windows、树莓派、python、opencv)

1.写在前面的话

大学4年很快过去了,因为疫情原因我们从大四上学期结束之后直接跳到了大学的尾声:毕业设计、毕业答辩、毕业的环境。回顾整个大学生活中最难忘的就是在光电创新实验室从事机器视觉课题研究的那段时间,感谢学院各位老师对我的帮助。这套系统为我的毕业设计内容,自认为有诸多不足,但是还是斗胆发布出来让各位从事视觉方面的同学查看。

2.opencv3和opencv4的区别

在我毕业设计项目进行的时候我选择了当时现行的opencv3版本,但是到了编写这篇文章的时候opencv发布了4.0版本。3和4版本基本一样,只是会有一点点的区别,注意即可。本篇文章将会从opencv4出发,使用opencv3版本的同学要注意一下,在获取轮廓的时候findContours函数返回结果由3.x的三个参数变为两个参数,不过我在后面也会标出不同的地方。

3.系统的整体结构设计

本文所开发的基于机器视觉的家居智能安防系统结构如图 1 所示。该系统采
用红外夜视摄像头作为采集家庭信息的传感器,在有异常现象的情况时会自动报
警,系统会通过 SMTP 协议将会采集当前视频帧发送到用户指定邮箱,同时发出
警报声,让业主及时查看即时报警画面采取行动。系统由树莓派、红外夜视摄像
头、物联网模块和电源模块组成。 树莓派上部署嵌入式 Linux 对采集到的图像进
行机器视觉处理、并利用树莓派上搭载的网卡模块进行联网通信;再把信息通过
SMTP 协议发往用户邮箱。 用户可以通过手机电脑等平台来查看采集到的图像信
息从而采取行动。

4.主要工作

1.硬件平台:包括摄像头(配套的图像采集卡或者集成)、镜头、嵌入式处理器
(树莓派或者其他平台)以及其他配件;
2.在嵌入式 Linux 系统上构建 python 以及 opencv 机器视觉环境;
3.建立视觉注意与运动视觉的关键算法,包括运动检测、实现动作捕捉、抓拍并
存储照片,同时可以在夜间使用;
4.当有运动物体进入超过一定阈值时可以实现自动报警,启动蜂鸣器;并将报警
通知通过邮件发送到邮箱;

5.代码部分

import argparse

import datetime

import imutils

import time

import cv2

import threading

import yagmail

ap = argparse.ArgumentParser()

ap.add_argument("-v", "--video", help="path to the video file")

ap.add_argument("-a", "--min-area", type=int, default=500, help="minimum area size")

args = vars(ap.parse_args())

shot_idx = 0

if args.get("video", None) is None:

camera = cv2.VideoCapture(0)

else:

camera = cv2.VideoCapture(args["video"])

def shijue() :

shot_idx = 0

firstFrame = None

while True:

(grabbed, frame) = camera.read()

text = "Stop"

flat = 0

if not grabbed:

break

cv2.imshow('frame',frame)

frame = imutils.resize(frame, width=500)

gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

gray = cv2.GaussianBlur(gray, (21, 21), 0)

cv2.imshow('gray', gray)

if firstFrame is None:

firstFrame = gray

continue

frameDelta = cv2.absdiff(firstFrame, gray)

thresh = cv2.threshold(frameDelta, 25, 255, cv2.THRESH_BINARY)[1]

firstFrame = gray

thresh = cv2.dilate(thresh, None, iterations=2)

contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL,

cv2.CHAIN_APPROX_SIMPLE)

"""

cv.findContours()

参数:

1 要寻找轮廓的图像 只能传入二值图像,不是灰度图像

2 轮廓的检索模式,有四种:

cv2.RETR_EXTERNAL表示只检测外轮廓

cv2.RETR_LIST检测的轮廓不建立等级关系

cv2.RETR_CCOMP建立两个等级的轮廓,上面的一层为外边界,

里面的一层为内孔的边界信息。

如果内孔内还有一个连通物体,这个物体的边界也在顶层

cv2.RETR_TREE建立一个等级树结构的轮廓

3 轮廓的近似办法

cv2.CHAIN_APPROX_NONE存储所有的轮廓点,

相邻的两个点的像素位置差不超过1,

即max(abs(x1-x2),abs(y2-y1))==1

cv2.CHAIN_APPROX_SIMPLE压缩水平方向,垂直方向,对角线方向的元素,

只保留该方向的终点坐标,例如一个矩形轮廓只需4个点来保存轮廓信息

返回值:

contours:一个列表,每一项都是一个轮廓, 不会存储轮廓所有的点,只存储能描述轮廓的点

hierarchy:一个ndarray, 元素数量和轮廓数量一样,

每个轮廓contours[i]对应4个hierarchy元素hierarchy[i][0] ~hierarchy[i][3],

分别表示后一个轮廓、前一个轮廓、父轮廓、内嵌轮廓的索引编号,如果没有对应项,则该值为负数

"""

for c in contours:

if cv2.contourArea(c) < 5000:

continue

flat = 1

(x, y, w, h) = cv2.boundingRect(c)

cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)

text = "Moving"

cv2.putText(frame, "Movement State: {}".format(text), (10, 20),

cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 2)

cv2.putText(frame, datetime.datetime.now().strftime("%A %d %B %Y %I:%M:%S%p"),

(10, frame.shape[0] - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.35, (0, 0, 255), 1)

cv2.imshow("Thresh", thresh)

cv2.imshow("Frame Delta", frameDelta)

cv2.imshow("Security Feed", frame)

if cv2.waitKey(1) & 0xFF == ord('q'):

break

camera.release()

cv2.destroyAllWindows()

def qqyouxian(num):

yag = yagmail.SMTP(user="*****@qq.com", password="****你的密码", host="smtp.exmail.qq.com")

contents = ["检测到运动问物体", "/home/pi/Desktop/movement_detection/image.jpg"]

yag.send("usg1024@qq.com", "检测到运动问物体", contents)

yag.close()

time.sleep(50)

def main():

"""创建启动线程"""

t_sing = threading.Thread(target=shijue)

t_dance = threading.Thread(target=qqyouxian, args=(6, ))

t_sing.start()

t_dance.start()

if __name__ == '__main__':

main()

6.演示效果

视频演示:

https://www.bilibili.com/video/BV1e541147dR/

移动端演示:

7.总结

时间过得飞快,转眼就到了毕业的时候了,希望这篇文章可以帮到你。

网址:基于opencv的家居智能安防机器视觉系统 https://www.yuejiaxmz.com/news/view/294339

相关内容

基于OpenCV和ROS节点的智能家居服务机器人设计流程
基于STM32的智能家居安防AI系统:OpenCV、TCP/HTTP、RFID、UART技术设计思路
【计算机视觉】基于Python—OpenCV的手势识别详解(一)
基于单片机的智能家居安防监控系统
智能家居系统的研究背景
智能安防系统的信息安全保障:防护措施1.背景介绍 智能安防系统是现代社会中不可或缺的一部分,它为我们的生活带来了更多的安
基于物联网智能家居安全防护系统设计.doc
【家居智能安防系统】
智能家居安防系统
「智能家居安防系统」智能家居安防系统公司黄页

随便看看