Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >有贼出没?看我用python来捉"贼"

有贼出没?看我用python来捉"贼"

作者头像
赵云龙龙
发布于 2019-11-03 13:06:46
发布于 2019-11-03 13:06:46
64000
代码可运行
举报
文章被收录于专栏:python爱好部落python爱好部落
运行总次数:0
代码可运行

最近丢东西了,接二连三丢东西,很是糟心。是谁干的?真想把他给揪出来。 自己用python捣鼓了个程序,看看效果。

最近自己的工位老是丢东西,关键只丢一样东西,而且每天早上来,桌子上都是乱七八糟的。像是遭了贼。

本来上班心情就不是那么愉快,这下心情更不爽了。 也没丢啥值钱的东西,就是苹果手机充电的线。本来测试的时候也要用,就插在电脑上没拔,结果总是丢。

为这点破事跟人事说,也犯不着。也许谁拿去用用,说不定就还回来了。结果几个星期过去了,没有还的,只有丢的,接二连三,感觉是盯上我了。

丢到第四根的时候,扛不住了,害我自己的手机天天没地方充电。测试机也没法充电。

我得想办法把他找出来,找他要回来。 我自己的电脑是一个macpro, 很大的屏,平时也不关机,它不有个摄像头么?我得从这上面下功夫。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import cv2

def make_photo():
    """使用opencv拍照"""
    cap = cv2.VideoCapture(0)  # 默认的摄像头
    while True:
        ret, frame = cap.read()
        if ret:
            cv2.imshow("capture", frame)  # 弹窗口
            # 等待按键q操作关闭摄像头
            if cv2.waitKey(1) & 0xFF == ord('q'):
                file_name = "theif.jpeg"
                cv2.imwrite(file_name, frame)
                break
        else:
            break

    cap.release()
    cv2.destroyAllWindows()


def make_video():
    """使用opencv录像"""
    cap = cv2.VideoCapture(0)  # 默认的摄像头
    # 指定视频代码
    fourcc = cv2.VideoWriter_fourcc(*"DIVX")
    out = cv2.VideoWriter('thief.mp4', fourcc, 20.0, (640, 480))
    while (cap.isOpened()):
        ret, frame = cap.read()
        if ret:
            out.write(frame)
            #
            cv2.imshow('frame', frame)
            # 等待按键q操作关闭摄像头
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break
        else:
            break
    cap.release()
    out.release()
    cv2.destroyAllWindows()


if __name__ == '__main__':
    make_video()
    make_photo()

运行起来似乎还可以。

但是有个问题,如果我一直开机,一直拍照或者录制视频。感觉存储空间会抗不住。如果镜头有变化,才录制,这样会减少很多无用的录制,而且回放也简单很多。 改进一下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import cv2
import numpy, os, sys


def isPicChanged(dividePar, pointDelta, judgeTh):
    '''
    通过前后帧对比,判断画面是否改变
    :param dividePar = 40 # 对比间隔点,减少计算量
    :param pointDelta = 500 # 像素点的差异大于该值认为是差异点
    :param judgeTh = 640 # 判断变化画面大小的阈值:画面(1/judgeTh)
    '''

    capIdx = 0  # 截图命名
    camIdx = -1
    while (int(camIdx) < 0 or int(camIdx) > 10):
        print("enter camera index in 0 and 10:")
        camIdx = int(input())

    if not (os.path.isdir('cap')):  # 创建存放截图的文件夹
        os.system('mkdir -p {}'.format("cap"))

    cap = cv2.VideoCapture(camIdx)  # 调整参数实现读取视频或调用摄像头
    ret, frameBak = cap.read()
    for i in range(10):  # 刚打开相机时,曝光不稳定,清理10张
        ret, frameBak = cap.read()

    frameWidth = int(cap.get(cv2.WIDTH))
    frameHeight = int(cap.get(cv2.HEIGHT))
    print("frameWidth:{},frameHeight:{}".format(frameWidth, frameHeight))
    if frameWidth == 0:
        exit("camera is not available.")

    while True:
        frameBak = frame
        ret, frame = cap.read()
    cap.release()
    cv2.destroyAllWindows()

if __name__ == "__main__":
    isPicChanged(4, 50, 64)

测试一下,效果还真有。镜头变化了,才录制。 后面想想,还有个问题,如果镜头变化很久,存储也会吃紧。 于是又写个程序,隔段时间,来检测图片的变化,如果相似度太高的,可以删除一部分。 ssim对比:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from skimage.measure import compare_ssim
import cv2

class CompareImage():

    def compare_image(self, path_image1, path_image2):

        imageA = cv2.imread(path_image1)
        imageB = cv2.imread(path_image2)

        grayA = cv2.cvtColor(imageA, cv2.COLOR_BGR2GRAY)
        grayB = cv2.cvtColor(imageB, cv2.COLOR_BGR2GRAY)

        (score, diff) = compare_ssim(grayA, grayB, full=True)
        print("SSIM: {}".format(score))
        return score


compare_image = CompareImage()
compare_image.compare_image("1.jpg", "2.jpg")

直方图对比:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import cv2
import numpy as py
 
img = cv2.imread("../image-030.png")
img1 = cv2.imread("../image-002.jpg")
# 计算图img的直方图
H1 = cv2.calcHist([img], [1], None, [256],[0,256])
H1 = cv2.normalize(H1, H1, 0, 1, cv2.NORM_MINMAX, -1) # 对图片进行归一化处理
 
# 计算图img2的直方图
H2 = cv2.calcHist([img1], [1], None, [256],[0,256])
H2 = cv2.normalize(H2, H2, 0, 1, cv2.NORM_MINMAX, -1)
 
# 利用compareHist()进行比较相似度
similarity = cv2.compareHist(H1, H2,0)
print(similarity)

还有哈希对比等。 这样有可以节约一些空间。

后面还想深入一点,人脸识别。可是我没那么厚的功底,就没费那大的劲。而且我的代码似乎也够用了。 这种监控,还可以应用到家用摄像头。 当然,涉及到隐私问题。所以这也是一个很敏感的问题,所以上面的代码也不全,防止有人干坏事。

最后我抓到“贼”了没?请听下回分解。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python爱好部落 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
死磕YOLO系列,不会 AI没关系,用OpenCV 调用YOLO 做目标检测
对于视觉工程师而言,这当然是个小问题。可术业有专攻,不一定每个程序员都懂 AI 算法,那肯定就有一种方法把算法当成一个黑盒子,处理好输入输出就好了。
Frank909
2020/07/14
6.2K0
死磕YOLO系列,不会 AI没关系,用OpenCV 调用YOLO 做目标检测
使用OpenCV调用摄像头,显示图片,获取视频并保存
友情链接:https://blog.csdn.net/u012348774/article/details/78255130
种花家的奋斗兔
2020/11/13
4.2K0
视频人脸检测——OpenCV版(三)
视频人脸检测是图片人脸检测的高级版本,图片检测详情点击查看我的上一篇《图片人脸检测——OpenCV版(二)》 实现思路: 调用电脑的摄像头,把摄像的信息逐帧分解成图片,基于图片检测标识出人脸的位置,
磊哥
2018/05/08
1.3K0
视频人脸检测——OpenCV版(三)
opencv︱图片与视频的读入、显示、写出、放缩与基本绘图函数介绍
opencv中读入、显示、写出图片:cv2.imread(), cv2.imshow(), cv2.imwrite()
悟乙己
2019/05/26
5.8K0
OpenCV与图像处理(一)
以下代码均在python3.6,opencv4.2.0环境下试了跑一遍,可直接运行。
Must
2020/07/28
7060
OpenCV与图像处理(一)
记录一下人脸识别
需要将 haarcascade_frontalface_default.xml haarcascade_eye_tree_eyeglasses.xml 放入当前文件夹 或者你使用绝对路径也可以 这两个文件在\python\Lib\site-packages\cv2\data\ 里面 电脑没有摄像头的话可以使用手机当摄像头 在手机(安卓\IOS都可以)和电脑上面下载iVcam 并用数据线连接起来 下载地址:https://www.e2esoft.cn/ivcam/ 然后我发现我的台式电脑 使用上面那个软件 是0才可以运行 也就是选择笔记本摄像头才可以 如果你选的1 USB摄像头没有反应 不妨试试0 笔记本摄像头
残浔
2023/05/11
4650
记录一下人脸识别
opencv之打开摄像头、边缘检测
许多工业相机或某些视频I / O设备不为操作系统提供标准的驱动程序接口。因此,您不能在这些设备上使用VideoCapture或VideoWriter。
全栈程序员站长
2022/07/23
3.5K0
opencv之打开摄像头、边缘检测
python识别车牌号
JaneYork
2023/10/11
3720
Python生成字符视频
在之前也写过生成字符视频的文章,但是使用的是命令行窗口输出,效果不是很好,而且存在卡顿的情况。于是我打算直接生成一个mp4的字符视频。大致思路和之前一样:Python20行代码实现视频字符化。
ZackSock
2021/05/18
5920
Python生成字符视频
python进阶——人工智能视觉识别
python在人工智能方面可以毫不客气的说,比其他的所有语言都要有优势,因为python的背后有一个非常强大的资源库来支撑着python运作。
淼学派对
2023/10/14
3830
python进阶——人工智能视觉识别
OpenCV计算机视觉整理图像、视频加载与显示OpenCV的色彩空间OpenCV图形绘制
每一个像素有三种颜色——红色、绿色和蓝色。通过不同光源的组合,形成真彩色,有暗的,有明亮的。
算法之名
2021/11/15
9570
OpenCV计算机视觉整理图像、视频加载与显示OpenCV的色彩空间OpenCV图形绘制
opencv调取摄像头录制
淼学派对
2023/10/14
2900
opencv调取摄像头录制
cv2.VideoWriter_fourcc()
#环境:opencv 3.4.0 python 3.5.2#读取视频import cv2cap = cv2.VideoCapture('video.avi')#读取摄像头,0为摄像头索引,当有多个摄像头时,从0开始编号cap = cv2.VideoCapture(0)#从视频或摄像头中读取一帧(即一张图像),返回是否成功标识ret(True代表成功,False代表失败),img为读取的视频帧ret,frame = cap.read()----#完整的读取视频流并播放视频流代码 # -*- coding
狼啸风云
2019/09/19
15.5K0
opencv 操作计算机摄像头
文章目录 opencv 操作计算机摄像头 opencv 操作计算机摄像头 # -*- coding:utf-8 -*- # /usr/bin/python ''' @Describe: @Evn : @Date : 2019-08-14 09:25 ''' import cv2 import numpy as np # 创建相机 def camera_video(time): cap = cv2.VideoCapture(0) fourcc = cv2.Vide
AI拉呱
2021/01/14
4130
Python-OpenCV,基于标准文档的实例(一)
OpenCV是一个C++库,用于实时处理计算机视觉方面的问题,涵盖了很多计算机视觉领域的模块。
王也518
2022/10/26
7780
Python-OpenCV,基于标准文档的实例(一)
opencv读取摄像头和视频数据
淼学派对
2023/10/14
5890
Python实现扫码工具
二维码作为一种信息传递的工具,在当今社会发挥了重要作用。从手机用户登录到手机支付,生活的各个角落都能看到二维码的存在。那你知道二维码是怎么解析的吗?有想过自己实现一个扫码工具吗?如果想的话就继续看下去吧!
ZackSock
2020/10/10
2.5K0
python版的openCV使用及下载
截止目前:现在OpenCV使用环境还是python3.8的版本所以咱们下载时记得用3.8版本的
用户10922923
2024/04/22
1.5K0
python版的openCV使用及下载
Python Opencv捕获视频
这一句表示调用计算机内置摄像头来获取视频,如果传入参数为1时,表示调用计算机外置摄像头,比如usb连接的摄像头等。VideoCapture对象也可以传入视频文件地址。
云深无际
2021/03/12
1.3K0
Python Opencv捕获视频
openCV 视频分解及合成
1. 视频分解 import cv2 # ************************** # 分解视频 cap=cv2.VideoCapture('1.mp4')#获取一个视频cap isOpen=cap.isOpened()#判断是否打开 fps=cap.get(cv2.CAP_PROP_FPS)#频率,一秒多少张图片 width=int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))#宽 height=int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT
py3study
2020/01/22
9750
相关推荐
死磕YOLO系列,不会 AI没关系,用OpenCV 调用YOLO 做目标检测
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验