本文来自读者投稿

简介:利用python调用摄像头截图功能,在镜头发生变化时进行截图,并通过ichat远程发送,实现远程报警功能。

整体思路:先用cv2函数调用电脑的摄像头,开启截图功能,再通过cv2函数将前后2张图片分别转换为一维数组,依次循环比较的2个1维数组的相关系数,相关系数越大,代表两张图片越相似,越小代表图片越不相同,图片不相同就意味着摄像头前有物体在动,把发生变化的图片保存,并利用itchat函数通过微信将图片发给我,最终实现智能监控功能。

第一步:调用监控设备,循环截图

利用CV2函数,调用监控设备,0代表第一个摄像设备,就像列表取元素一样,从0开始,如何你是土豪可以多买几个外置摄像头,从而实现全方位监控。

开启截图保存功能,ret返回值为True或者False,表示截图成功与否,img返回值是图片的原始数据,这里直接将其保存为img1.png.

肯定会有人问,保存那么多图片岂不是很耗费内存?
那是自然不会的,这个我也想到了,我是这样解决的,把每次循环的截图进行覆盖式保存,即只用img1、img2命名,依次轮换为前后者。例如,第1次保存为img1.png,第2次保存为img2.png,比较两者是否相同,若相同则把img1.png舍弃,把第3次重新存为img1.png再与img2.png进行比较;如果有变化则把img2保存到另一个文件夹后再舍弃,把第3次重新存为img1.png再与img2.png进行比较。

第二步:详细对比前后2张截图

比较图片相似度的方法很多,这里采取以下方法

需要注意的是img1和img2为图片的保存地址,先将图片转换为浮点型数组,再将数组转换为1维,通过比较2个1维数组的相似系数来确定相似度,相似系数值越大,相似度越高,相似系数越小,相似度越低。

第三步:保存发生变化的截图

这里定义相似度小于0.95为发生变化,每次的变化都将后者图片保存到另一个文件夹备份,并以时间戳命名,必须取铁证。

第四步:通过微信发送发生变化的截图

主要利用itchat函数,它可以通过调用网页版微信来操控发送微信消息以及图片、视频等文件,但是第1次需要扫一下弹出来的二维码,后面就不需要了。
第二行代码表示要找到你想把图片发送给谁,在单引号内把你自己的昵称写上就妥,room为返回的json信息,内含你的资料信息。
第三行代码是找出你微信号的“身份证号”,由一段字符组成。
第四行代码是把图片发送出去,file表示想要发送图片的文件地址。

import cv2
import time
from PIL import Image
import math
import operator
from functools import reduce
import numpy as np
import smtplib
from email.mime.text import MIMEText
from email.header import Header
import itchat
def SendWeixin(file):itchat.auto_login(hotReload=True)  # 启动你的微信room = itchat.search_friends(name=r'')  # 这里输入你好友的名字或备注。userName = room[0]['UserName']print(userName)itchat.send_image(file, toUserName=userName)print("success")
def CompareImage(img1,img2): #比较2张图片是否相同stdimg = cv2.imread(str(img1), 0)#读入图片ocimg = cv2.imread(str(img2), 0)stdimg = np.float32(stdimg) #转换为浮点型数组ocimg = np.float32(ocimg)stdimg = np.ndarray.flatten(stdimg)#将数组折叠成一维ocimg = np.ndarray.flatten(ocimg)imgocr = np.corrcoef(stdimg, ocimg) #计算两组数据的相关系数return (imgocr[0, 1])
def SaveImage(img1,img2):PreciseTime = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time())) #时间result = CompareImage(img1, img2)print(result)if result < 0.9:  # 相似度小于0.95则报警file='写入你的文件名\{0}.png'.format(PreciseTime)#保存图片I = Image.open(img2)I.save(file)SendWeixin(file)
def main(): #主函数cap = cv2.VideoCapture(0) #启动第1个摄像头设备n=1 #用于区分截图保存名称,奇数保存为img1,偶数保存为img2while True:time.sleep(2) #间隔为0.5秒,可以更改# get a frameif n==1:ret, img1 = cap.read()print(img1)cv2.imwrite('img1.png', img1)img1 = '写入你的文件名\img1.png'elif n%2==1 and n!=1:ret, img1 = cap.read()cv2.imwrite('img1.png', img1)img1 = '写入你的文件名\img1.png'img2 = '写入你的文件名\img2.png'SaveImage(img2,img1)elif n%2==0:ret, img2 = cap.read()cv2.imwrite('img2.png', img2)img1 = '写入你的文件名\img1.png'img2 = '写入你的文件名\img2.png'SaveImage(img1, img2)n=n+1cap.release()cv2.destroyAllWindows()
if __name__=="__main__":main()

下载完整代码请关注下方公众号后回复“防盗”获取

▼点击成为社区注册会员      喜欢文章,点个

用 Python 制作家用防盗工具相关推荐

  1. 你还在为看电影发愁?Python制作全网视频播放工具!

    环境: python3.6.5 Windows 模块: re requests tkinter webbrowser 首先,我们可以随意在网络上找一个视频解析接口,我这里找的是: http://www ...

  2. python制作解压工具_使用python制作一个解压缩软件

    python实现解压缩的重要模块就是--zipfile,其次是os 安装zipfile模块 首先得安装zipfile模块,打开cmd输入一下命令即可安装 pip install zipfile os是 ...

  3. python制作小工具_利用Python制作翻译小工具

    话不多说,直接上代码. Component文件: # coding:utf-8 from tkinter import * from tkinter import ttk from tkinter i ...

  4. Python制作连连看脚本工具,全程自动,不需要你动,简直太爽了

    最近女朋友在玩连连看,玩了一个星期了还没通关,真的是菜. 我实在是看不过去了,直接用python写了个脚本代码,一分钟一把游戏. 快是快,就是联网玩容易被骂,嘿嘿~ 直接上代码 模块导入 import ...

  5. python制作软件excel,利用Python制作Excel对比工具

    目前功能还不完善,只能对比第一个sheet的内容,代码如下: # -*- coding: utf-8 -*- # 博客园 C丶小明 import xlrd,time from docx import ...

  6. python查火车票_使用python制作查询火车票工具

    使用python脚本实现查询火车票信息的效果图如下: 实现的代码: 1 # coding: utf-8 2 3 """命令行火车票查看器 4 5 Usage: 6 tic ...

  7. 使用python制作查询火车票工具

    使用python脚本实现查询火车票信息的效果图如下: 实现的代码: 1 # coding: utf-8 2 3 """命令行火车票查看器 4 5 Usage: 6 tic ...

  8. 用Python制作掷硬币工具

    import random import osa = input("请输入掷硬币次数:") try: #判断输入是否为整数a = int(a)if a > 0: #判断输入是 ...

  9. 求助:利用Python制作Excel对比工具

    需求:excel的内容是关于人员的项目成绩信息.每个excel中的项目成绩格式一致,人数可能不一致.选择任意两个excel文件,通过A列的姓名,匹配预设规则1或2,比较每个人在两个excel中各个项目 ...

最新文章

  1. Java split(“\\s+“) 和 split(“+“) 有什么区别
  2. 教 Chatbot 生成更有营养的对话
  3. 迅为linux下串口,迅为IMX6ULL开发板Linux RS232/485驱动实验(上)
  4. boost::mp11::mp_or相关用法的测试程序
  5. java 对 mongoDB 分组统计操作 以及一些常用操作
  6. ADS1.2开发环境创建与简要介绍
  7. ffmpeg实战教程(六)Android CMake实现解码(MP4转YUV)
  8. matlab 非线性动力系统 极限环,非线性动力系统混沌运动的Matlab数值模拟.doc
  9. 配置tracker服务
  10. 随机效应估算与固定效应估算_面板数据固定效应 vs. 随机效应
  11. C语言指针的正确打开方式!
  12. 关于protel 99 SE如何建立自己的元件库,导入Sch文件file is not recognized.
  13. 企业邮箱哪家好用,常见的企业邮箱品牌测评
  14. 记录Access deined: authorize failure的坑
  15. Fastqc使用说明
  16. 蜂鸣器干扰通讯_蜂鸣器常见错误电路分析
  17. MTK最新最全的智能机roadmap(珍藏版)
  18. imovie的快速入门
  19. 让div在页面中间显示
  20. ADS42LB69使用记录

热门文章

  1. 提高篇 第四部分 数据结构 第1章 树状树组
  2. 【智能制造】周宏仁:通俗易懂讲清楚制造业“数字化起步,网络化崛起,智能化发展”;任泽平:解码“德国制造”的七大基因
  3. Python版打字练习软件源代码,键盘练习软件源代码,含娱乐模式和训练模式
  4. SQL注入靶场 RedTiger通关教程(level1~level10)
  5. 在微信朋友圈常见的H5要如何制作?
  6. 计算机桌面输入法怎么恢复,电脑输入法图标不见了怎么办 电脑输入法图标消失找回【图文】...
  7. 版权和商标权有什么关系?版权和商标的区别在哪里?
  8. 平板如何下载鸿蒙系统,鸿蒙系统2.0
  9. turnserver 搭建
  10. MATLAB中regress函数用法(多元线性回归)