前言

本计划是基于笔记本电脑,通过编程打造一个智能笔记本系统,使得我们使用笔记本起来更加智能。 整个计划包括但不限于:身份认证、手势控制、手指控制鼠标、 防盗监控系统、语音识别。


编程改造世界!

对于本栏,我们要实现的正是智能防盗监控系统,想要实时监测电脑屏幕与摄像头前的人,我们必须满足以下几个条件:

   ——1、我们需要获取当前屏幕的分辨率,以方便之后调整电脑屏幕截图的尺寸。

——2、我们需要间隔的获取:(1)屏幕画面的截图(2)开启摄像头捕捉到的一帧图像

——3、我们需要将我们获得的截图发送到我们的邮箱。

是不是超级简单呢?接下来,我们将一一实现它们,并将他们整合为一个打包好的类。


【笔记本智能计划】使用OpenCv搭建一个简便实用的智能防盗监控系统

前言

编程改造世界!

最终效果最先展示:

屏幕截屏:

摄像头捕捉:

编程实现他们

一步一步来

1、我们需要获取当前屏幕的分辨率,以方便之后调整电脑屏幕截图的尺寸。

2、我们需要间隔的获取,屏幕画面的截图和开启摄像头捕捉到的一帧图像。

3、我们需要将我们获得的截图发送到我们的邮箱。

打包好的类——可设置每隔多久发送一次:

补充想法:


最终效果最先展示:

屏幕截屏:

摄像头捕捉:


编程实现他们

一步一步来


1、我们需要获取当前屏幕的分辨率,以方便之后调整电脑屏幕截图的尺寸。


def grab_screen(region=None):hwin = win32gui.GetDesktopWindow()if region:left, top, x2, y2 = regionwidth = x2 - left + 1height = y2 - top + 1else:width = win32api.GetSystemMetrics(win32con.SM_CXVIRTUALSCREEN)height = win32api.GetSystemMetrics(win32con.SM_CYVIRTUALSCREEN)left = win32api.GetSystemMetrics(win32con.SM_XVIRTUALSCREEN)top = win32api.GetSystemMetrics(win32con.SM_YVIRTUALSCREEN)hwindc = win32gui.GetWindowDC(hwin)srcdc = win32ui.CreateDCFromHandle(hwindc)memdc = srcdc.CreateCompatibleDC()bmp = win32ui.CreateBitmap()bmp.CreateCompatibleBitmap(srcdc, width, height)memdc.SelectObject(bmp)memdc.BitBlt((0, 0), (width, height), srcdc, (left, top), win32con.SRCCOPY)signedIntsArray = bmp.GetBitmapBits(True)img = np.frombuffer(signedIntsArray, dtype='uint8')img.shape = (height, width, 4)srcdc.DeleteDC()memdc.DeleteDC()win32gui.ReleaseDC(hwin, hwindc)win32gui.DeleteObject(bmp.GetHandle())return cv2.cvtColor(img, cv2.COLOR_BGRA2RGB)

2、我们需要间隔的获取,屏幕画面的截图开启摄像头捕捉到的一帧图像


def get_screen_size():import tkinterscreen = tkinter.Tk()w = screen.winfo_screenwidth()      # 获取当前屏幕的宽h = screen.winfo_screenheight()     # 获取当前屏幕的高return w, h

3、我们需要将我们获得的截图发送到我们的邮箱。

#! /usr/bin/env python
# coding=utf-8
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplicationdef send_img_to_email(rec_qq, sen_qq, pwd, img_path):receiver = rec_qq + "@qq.com"  # 发送邮件的邮箱sender = sen_qq + "@qq.com"    # 接受邮件的邮箱(可以和上面的一样pwd = pwd  # @qq.com邮箱SMTP的授权码# wquuvpbunfqoeahemsg = MIMEMultipart()msg["Subject"] = "有陌生人来访!"  # 邮件的主题msg["From"] = sendermsg["To"] = receiverpart = MIMEText("请查收陌生人照片!")  # 邮件的正文msg.attach(part)# 图片part = MIMEApplication(open(img_path, 'rb').read())  part.add_header('Content-Disposition', 'attachment', filename=img_path)msg.attach(part)try:s = smtplib.SMTP("smtp.qq.com", timeout=30)  # 连接smtp邮件服务器,端口默认是25s.ehlo()s.starttls()s.login(sender, pwd)  # 登陆服务器s.sendmail(sender, receiver, msg.as_string())  # 发送邮件s.close()print('邮件发送成功!')except smtplib.SMTPException:print('邮件发送失败!')# 使用案例 
if __name__ == '__main__':qq = '2642898145'send_img_to_email(qq, qq, 'wquuvpbunfqoeahe', '2.png')

打包好的类——可设置每隔多久发送一次:

import timeimport cv2
import numpy as np
import win32gui
import win32ui
import win32con
import win32api# coding=utf-8
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplicationclass computerScreenDetecter(object):def __init__(self, qq, pwd, img_path, time_cell):self.qq = qqself.pwd = pwdself.img_path = img_pathself.time_cell = time_celldef get_screen_size(self):import tkinterscreen = tkinter.Tk()w = screen.winfo_screenwidth()  # 获取当前屏幕的宽h = screen.winfo_screenheight()  # 获取当前屏幕的高return int(w*1.3), int(h*1.3)def grab_screen(self, region=None):hwin = win32gui.GetDesktopWindow()if region:left, top, x2, y2 = regionwidth = x2 - left + 1height = y2 - top + 1else:width = win32api.GetSystemMetrics(win32con.SM_CXVIRTUALSCREEN)height = win32api.GetSystemMetrics(win32con.SM_CYVIRTUALSCREEN)left = win32api.GetSystemMetrics(win32con.SM_XVIRTUALSCREEN)top = win32api.GetSystemMetrics(win32con.SM_YVIRTUALSCREEN)hwindc = win32gui.GetWindowDC(hwin)srcdc = win32ui.CreateDCFromHandle(hwindc)memdc = srcdc.CreateCompatibleDC()bmp = win32ui.CreateBitmap()bmp.CreateCompatibleBitmap(srcdc, width, height)memdc.SelectObject(bmp)memdc.BitBlt((0, 0), (width, height), srcdc, (left, top), win32con.SRCCOPY)signedIntsArray = bmp.GetBitmapBits(True)img = np.frombuffer(signedIntsArray, dtype='uint8')img.shape = (height, width, 4)srcdc.DeleteDC()memdc.DeleteDC()win32gui.ReleaseDC(hwin, hwindc)win32gui.DeleteObject(bmp.GetHandle())return cv2.cvtColor(img, cv2.COLOR_BGRA2RGB)def pritn_time(self):import timetime_tuple = time.localtime(time.time())print("当前时间为: {}年{}月{}日 - {}:{}:{}".format(time_tuple[0], time_tuple[1], time_tuple[2], time_tuple[3],time_tuple[4],time_tuple[5]))def send_img_to_email(self):sender = self.qq + "@qq.com"  # 发送邮件的邮箱(receiver = self.qq + "@qq.com"  # 接受邮件的邮箱    可以和sender的一样pwd = self.pwd  # @qq.com邮箱SMTP的授权码# wquuvpbunfqoeahemsg = MIMEMultipart()msg["Subject"] = "有陌生人来访!"  # 邮件的主题msg["From"] = sendermsg["To"] = receiverpart = MIMEText("请查收陌生人照片!")  # 邮件的正文msg.attach(part)# 图片part = MIMEApplication(open(self.img_path, 'rb').read())  # ''和该.py文件在同一个文件夹下part.add_header('Content-Disposition', 'attachment', filename=self.img_path)msg.attach(part)try:s = smtplib.SMTP("smtp.qq.com", timeout=30)  # 连接smtp邮件服务器,端口默认是25s.ehlo()s.starttls()s.login(sender, pwd)  # 登陆服务器s.sendmail(sender, receiver, msg.as_string())  # 发送邮件s.close()print('邮件发送成功!')except smtplib.SMTPException:print('邮件发送失败!')def get_creamerImg(self):cap = cv2.VideoCapture(0)time_cell = 1while time_cell:success, img = cap.read()cv2.imwrite('screen_img.png', img)time_cell -= 1cap.release()cv2.destroyAllWindows()def demo(self):w, h = self.get_screen_size()start_time = time.time()while True:img = self.grab_screen(region=(0, 0, w, h))end_time = int(time.time() - start_time)# 间隔60s发送一次if end_time % self.time_cell == 0:self.pritn_time()cv2.imwrite('screen_img.png', img)print('电脑屏幕检测准备开始!')self.send_img_to_email()print('电脑摄像头检测准备开始!')self.get_creamerImg()self.send_img_to_email()# 使用案例
if __name__ == "__main__":qq = '2642898145'           # 发送者和接受者的QQ都用同一个kwd = 'wquuvpbunfqoeahe'    # QQ邮箱SMTP授权码img_path = 'screen_img.png'        # 写入本地图片路径time_cell = 60              # 时间间隔多久发送一次截屏 单位:秒(s)sd = computerScreenDetecter(qq, kwd, img_path, time_cell)sd.demo()

补充想法:

  我们是不是可以添加一个人脸识别,捕捉到摄像头前人的图片之后识别是否是自己或者自己认识的人,如果不是,那么才发送图片警醒自己,如果是,那么告知是谁?


完毕! 

制作不易,望点赞+关注+收藏(

【笔记本智能计划】使用OpenCv搭建一个简便实用的智能防盗监控系统相关推荐

  1. 如何搭建一个高效、可靠的积分商城系统?

    互联网购物的普及,积分商城系统已经成为商家和消费者之间互动的一种常见方式.它不仅可以帮助商家增加品牌影响力,还可以提高顾客体验,从而增加销售额.下面就如何搭建一个高效.可靠的积分商城系统作一些简单介绍 ...

  2. 如何搭建一个靠谱的电商商城系统?

    在当今互联网时代,电商已成为一种普及化的购物方式,许多商家都希望能够打造一个自己的电商平台.然而,搭建一个靠谱的电商商城系统并不是一件容易的事情,需要考虑很多方面的因素.下面我将结合自己的经验,为大家 ...

  3. 搭建一个独立网站用什么软件或系统?

    这个资讯爆炸的时代,网络的普及下,连日记也被搬到网络上,称为Blog(博客.网络日志).相信人人都有一个属于自己的Blog,但你了解Blog吗?我们在现实中,常常会听到这么一句话:「你有没有新浪?」新 ...

  4. 搭建亿级时间线数据的监控系统,我有绝招!

    本文分享自华为云社区<HDC.Cloud2021|如何使用华为云GaussDB(for Influx) + Grafana搭建亿级时间线数据的监控系统>,原文作者:心机胖 . 随着云计算规 ...

  5. 亚马逊、虾皮、来赞达、速卖通、ebay等跨境电商平台如何搭建一个稳定的自养号补单系统?

    补单关键的一环是什么:账号 账号一共有两种获取方式: 市场上购买 自己养出来的账号 而账号权重的高低,安全性和稳定性,账户的存活率,存活时间的长短,全都看注册和养号的环境,ip的纯净度还有支付卡的成功 ...

  6. 【智能家居 DIY 活动】基于 RT-Thread 的分布式无线温度监控系统 DIY 活动正式上线啦!!!

    基于 RT-Thread 的分布式无线温度监控系统 1. 项目简介 Hi~ 各位小伙伴们,还在为初学 RT-Thread 不知从何下手而感到烦恼吗?有没有想过利用 RT-Thread 来打造属于自己的 ...

  7. 【解决方案】基于国标GB28181协议视频平台EasyGBS搭建的安监行业应急视频监控系统解决方案

    一.方案背景 随着社会经济的不断发展,国内的安全生产事故也时有发生.在我国近年来接连发生的危险品爆炸.煤矿爆炸.天然气井喷及氯气泄漏事故中,事故的原因尽管不同,但都对国家及人民的生命财产造成了巨大损失 ...

  8. 快速搭建一个基于知识图谱的智能问答系统

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要15分钟 Follow小博主,每天更新前沿干货 作者:张墨一 知乎链接:https://zhuanlan.zhihu.com/p/582486 ...

  9. 用PyQt5+Caffe+Opencv搭建一个人脸识别登录界面

    最近开始学习Qt,结合之前学习过的caffe一起搭建了一个人脸识别登录系统的程序,新手可能有理解不到位的情况,还请大家多多指教. 我的想法是用opencv自带的人脸检测算法检测出面部,利用caffe训 ...

最新文章

  1. what's the 回撤
  2. Linux的目录结构和头文件相关;哪里找- sys/types.h, sys/stat.h
  3. 009 自动打怪功能的设计和实现
  4. [music]Canon and Gigue in D major
  5. 前后端分手大师——MVVM 模式
  6. [转载]建立团队沟通协作工作方式
  7. 查看,添加和删除GIT配置的正确姿势
  8. x264 编码器选项分析 (x264 Codec Strong and Weak Points) 2
  9. 数字化转型案例:美的集团
  10. 未来计算机职业规划怎么写,计算机大学生职业生涯规划书范文
  11. 如何将WebRoot部署到tomcat中
  12. 双机热备 ip地址_双机热备软件哪个好?双机热备软件推荐
  13. 我国正式实施不安全食品召回制度(转)
  14. 百度定位 Android 经纬度出现4.9E-324 问题解决
  15. 前端将后端返回的文件流转为excel并下载
  16. 第十六章:垃圾回收相关概念
  17. 浙江省计算机专业专科院校排名,浙江省高职院校“五强”
  18. 高中历史教师资格证考试成功通过前辈备考经验分享
  19. 侠客行:一技压身,天下行走
  20. 用electron做一个浏览器

热门文章

  1. 【XA.DAY.5】物理与环境安全
  2. 李开复:给女儿的一封信
  3. noip2012提高组模拟题樱桃庄园
  4. 7-1 迷宫问题 (10 分)
  5. Learn OpenGL Anti Aliasing
  6. 操作系统实验--进程间通信
  7. 9. PKI - 三种密钥交换算法详解(RSA DHE ECDHE)及他们在SSL/TLS协议中的应用
  8. [NOI2010] 超级钢琴
  9. Linux学习笔记(3)基本命令Part3——用户和组管理
  10. 实时系统vxWorks - 虚拟机环境搭建