基于openCV和PythonSMTP的天眼系统
来源:互联网 发布:保存文件安全数据 编辑:程序博客网 时间:2024/04/28 04:14
这个小系统是把两个简单功能组合到了一起。
先讲一下算法大致的思路:
首先是openCV不断检测,当检测到有像素变化且大于一定阈值时,更新状态队列,如果该队列list的最近5次有3次检测到异常,就捕捉照片,再使用Python SMTP发送邮件到指定邮箱。
几个注意的地方:
1、程序名 不能为 email.py
2、发送文字内容不能为 test、测试等
3、时间触发、照片限制、阈值设置在程序里面改
4、运行环境: win10 64 +python 2.7+ openCV 2.4.13
代码 开源 如下:
#coding=utf8#!/usr/bin/pythonimport smtplibfrom email.MIMEText import MIMETextfrom email.MIMEImage import MIMEImagefrom email. MIMEMultipart import MIMEMultipartfrom email.header import Headerimport sysimport cv2cap1=cv2.VideoCapture(0)value1=0value2=[]t=1BUF=0time=0qq=0mail_user = "XXXXXXXX@qq.com"mail_pass = "~~~~~~~~~"# 这个密码不是qq密码,而是在qq激活SMTP服务的授权码sender = "XXXXXXXX@qq.com"firstframe=Nones=1time=0receivers = ['XXXXXX@qq.com'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱def sendEmail(fileName):#创建一个带附件的实例 message = MIMEMultipart() message['From'] = Header("当前情况监视实时监控", 'utf-8') message['To'] = Header("当前情况监控", 'utf-8') subject = '当前情况监控' message['Subject'] = Header(subject, 'utf-8') #邮件正文内容 message.attach(MIMEText('当前情况监视实时监控', 'plain', 'utf-8')) att3= MIMEImage(open(fileName, 'rb').read()) att3["Content-Type"] = 'application/octet-stream' att3["Content-Disposition"] = 'attachment; filename="faces.jpg"' message.attach(att3) try: smtpObj = smtplib.SMTP_SSL("smtp.qq.com", 465) smtpObj .login(mail_user,mail_pass) smtpObj.sendmail(sender, receivers, message.as_string()) smtpObj.quit() print "邮件发送成功" #time= except smtplib.SMTPException: print "Error: 无法发送邮件"while(1): ret1,frame=cap1.read() #imagepath='C:\Users\sx\Desktop\FBB.png' if t-(t/30)*30==0: BUF=1 t=t+1 s=s+1 #image = cv2.imread('test.jpg') gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) gray=cv2.GaussianBlur(gray,(21,21),0) if firstframe is None: firstframe=gray continue frameDelta = cv2.absdiff(firstframe,gray) thresh = cv2.threshold(frameDelta, 25, 255, cv2.THRESH_BINARY)[1] thresh = cv2.dilate(thresh, None, iterations=2) (cnts,_)= cv2.findContours(thresh.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE) wh=-1000 xx=-1000 yy=-1000 ww=0 hh=0 print len(cnts) if(len(cnts)>1): for c in cnts: if 100<cv2.contourArea(c)<100000: qq+=1 x,y,w,h=cv2.boundingRect(c) if w*h>wh: wh=w*h ww=w hh=h xx=x yy=y try: if wh!=-1000: print 'qqqqqqqqqqqq',s cv2.rectangle(frame,(xx,yy),(xx+ww,yy+hh),(0,255,0),3) except: print 'ff' if len(cnts)>=2: value2.append(1) else: value2.append(0) if t>8 : print len(value2),t if (value2[t-3]+value2[t-4]+value2[t-5]+value2[t-6]+value2[t-7]>=3) and s>200 and s<2000: if BUF==1: time+=1 if time<4: print "I will send email" cv2.imwrite('faces.jpg',frame) sendEmail('faces.jpg') if time>4: time=4 BUF=0 else : if BUF==1: print "NO PEOPLE" BUF=0 if t==1000 : t=0 value2=value2[len(value2)-999:len(value2)] cv2.imshow("Find res Faces!",frame) firstframe=gray if cv2.waitKey(2) & 0xFF == ord('q'): print "break"
下面是运行结果图:
图片:
当然还可以添加,人脸识别,主要是基于HOG特征的人脸识别,加入openCV人脸识别代码如下:
while(1): ret1,img1=cap1.read() if(ret1): #imagepath='C:\Users\sx\Desktop\FBB.png' if t-(t/10)*10==0: BUF=1 t=t+1 image = img1 #image = cv2.imread('test.jpg') gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY) #cv2.imshow("Findaces!",gray) face_cascade = cv2.CascadeClassifier(r'haarcascade_frontalface_default.xml') #face_cascade = cv2.CascadeClassifier(r'hogcascade_pedestrians.xml') #haarcascade_profileface.xml,haarcascade_mcs_upperbody, faces = face_cascade.detectMultiScale( gray, scaleFactor = 1.15, minNeighbors = 2, minSize = (2,2), flags = cv2.cv.CV_HAAR_SCALE_IMAGE ) for(x,y,w,h) in faces: cv2.rectangle(image,(x,y),(x+w,y+w),(0,255,0),2) if len(faces)>=1: value2.append(1) else: value2.append(0) if t>6 : #print len(value2),t if (value2[t-2]+value2[t-3]+value2[t-4]+value2[t-5]+value2[t-6]==5): if BUF==1: print "I will send email" cv2.imwrite('faces.jpg',image) sendEmail('faces.jpg') BUF=0 else : if BUF==1: print "NO PEOPLE" BUF=0 if t==1000 : t=0 value2=value2[len(value2)-999:len(value2)] cv2.imshow("Find res Faces!",image) if cv2.waitKey(2) & 0xFF == ord('q'): print "break"
结果如图:
阅读全文
1 0
- 基于openCV和PythonSMTP的天眼系统
- 天眼系统 地图缩放
- 基于QT和OpenCV的人脸识别系统
- 基于QT和OpenCV的人脸识别系统
- 基于QT和OpenCV的人脸识别系统
- 基于OpenCV和Android的运动目标检测系统
- “天眼”系统在视频智能分析方面的实战应用
- 基于Opencv的车辆识别系统研究
- 基于opencv的身份证识别系统
- 基于OpenCV的双目测距系统实现
- 基于Opencv的键盘鼠标锁定系统
- 基于opencv的身份证识别系统
- 基于OpenCV的人脸检测系统
- 基于QT和OpenCV的人脸检测识别系统(1)
- 基于QT和OpenCV的人脸检测识别系统(2)
- 您的爱车有“天眼”吗?
- 基于OPenCV和MFC的读图程序
- 基于OPenCV和MFC的读图程序
- 关于linux中的死锁
- 82 C语言宏定义
- iOS-OC-设置UITableViewCell之间的间距
- 【《Real-Time Rendering 3rd》 提炼总结】(四) 第五章 · 图形渲染与视觉外观
- 基于位置的服务之如何找到自己的位置
- 基于openCV和PythonSMTP的天眼系统
- Python自然语言分析(第四期):第2课书面作业
- 进程、线程与协程
- 179. Largest Number
- SharedPreferences实现数据存储
- c语言中,关于延迟函数的理解
- 83 C语言带参数宏定义
- Android资源
- 红黑树的模拟实现