兄弟们,不知道你们有没有过查监控的经历,虽然现在监控摄像头是越来越多,硬盘越塞越满,但真出了事儿,回放查录像堪比大海捞针!纯人工一帧帧的去找,能把眼睛盯瞎还是人影都找不到。不过我最近搞了个骚操作:用AiPy搓了个脚本,让监控视频自己监察,有人经过自动截图存档,并打上时间戳,关键是简单、免费、可复用,换个视频文件也能跑!


一、为什么要做这个脚本

前段时间下班跑得太急,直接把打卡这事抛到了九霄云外。等想起来时,已经是三天后的事,只模糊记得个大概时间(下班果然应该按时就走!)。眼瞅着工时结算逼近,没办法,只能硬着头皮去翻监控提交补卡申诉。屏幕前的我,神经紧绷地盯了半小时显示屏,好在赶在截止时间前完成了申诉。

之后我就萌生了做个智能监控脚本的想法。人工查监控方式,不仅效率低,还容易遗漏关键信息,要是能让机器自动帮我们“盯梢”,岂不是美滋滋?于是,我决定试试用 AiPy,看看能不能解决这个难题。

二、说干就干

2.1、准备工作

第一步当然是更新 AiPy 啦!这玩意儿更新速度简直离谱,之前我在本地装的版本,只能在黑乎乎的命令行里用,操作起来特别费劲。现在好了,直接去官网(https://www.aipyaipy.com/)就能下载带图形界面的新版,方便多了!

2.2、提示词准备

用大语言模型(LLM)搭配 Python 真的超方便!咱们只要把需求捋清楚告诉 AiPy 就行,比如:把某个文件夹里的所有监控视频都翻一遍,找到有人出现的画面截个图,再把这些截图存到另一个指定文件夹里。

搞明白这个需求后,就写出提示词如下:

当前目录有一个daka文件夹,需要你帮忙写一个脚本名称为daka(1).py,可以识别daka文件夹内部的视频,每当有人经过的时候就能截图保存到dakajietu文件夹中,识别过程要避免重复。

2.3、AiPy启动!

基于我们的提示词,AiPy首先对任务进行了拆解

[步骤1] 检查并创建必要的文件夹结构

[步骤2] 遍历daka文件夹获取视频文件列表

[步骤3] 初始化人体检测器

[步骤4] 处理每个视频文件,检测人体并截图

[步骤5] 实现截图间隔控制

制定完成计划后,AiPy就开始编写代码了,部分代码展示如下:

import os

import cv2

import time

from datetime import datetime



# 支持的视频格式

SUPPORTED_VIDEO_FORMATS = ('.mp4', '.avi', '.mov', '.mkv', '.flv', '.wmv')



def init_folders():

    # 确保daka文件夹存在

    if not os.path.exists('daka'):

        os.makedirs('daka')

        print("已创建daka文件夹,请将视频文件放入其中")

    

    # 确保截图文件夹存在

    if not os.path.exists('dakajietu'):

        os.makedirs('dakajietu')

        print("已创建dakajietu文件夹用于保存截图")



def get_video_files():

    """获取daka文件夹中的所有视频文件"""

    video_files = []

    for file in os.listdir('daka'):

        if file.lower().endswith(SUPPORTED_VIDEO_FORMATS):

            video_files.append(os.path.join('daka', file))

    return video_files



def process_video(video_path, last_capture_time):

    """处理单个视频文件,检测人体并截图"""

    # 初始化人体检测器

    hog = cv2.HOGDescriptor()

    hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())

    

    cap = cv2.VideoCapture(video_path)

    if not cap.isOpened():

        print(f"无法打开视频文件: {video_path}")

        return last_capture_time

    

    print(f"开始处理视频: {os.path.basename(video_path)}")

    

    while cap.isOpened():

        ret, frame = cap.read()

        if not ret:

            break

        

        # 调整帧大小以提高处理速度

        frame = cv2.resize(frame, (640, 360))

        

        # 检测人体

        boxes, _ = hog.detectMultiScale(frame, winStride=(4, 4), padding=(8, 8), scale=1.05)

        

        # 如果检测到人体且满足时间间隔

        current_time = time.time()

        if len(boxes) > 0 and (current_time - last_capture_time) >= 5:

            # 保存截图

            timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")

            filename = f"dakajietu/{timestamp}.jpg"

            cv2.imwrite(filename, frame)

            print(f"检测到人体,已保存截图: {filename}")

            last_capture_time = current_time

        

        # 按q键可提前退出

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

            break

    

    cap.release()

    return last_capture_time



def main():

    init_folders()

    video_files = get_video_files()

    

    if not video_files:

        print("daka文件夹中没有找到视频文件,请添加视频文件后再运行")

        return

    

    print(f"找到 {len(video_files)} 个视频文件:")

    for video in video_files:

        print(f"- {os.path.basename(video)}")

    

    # 初始化最后截图时间

    last_capture_time = 0

    

    # 处理每个视频文件

    for video_file in video_files:

        last_capture_time = process_video(video_file, last_capture_time)



if __name__ == "__main__":

    main()

2.4、计划赶不上变化?

由于当前环境不支持GUI操作,所以进行到步骤4的时候出现bug。

但对于AiPy来说完全不是问题,基于错误反馈,AiPy移除了对cv2.waitKey()的依赖,同时,我将优化代码结构,提高检测准确性并添加更多错误处理。

主要改进点:

  1. 移除了cv2.waitKey()调用,解决了GUI错误
  2. 添加了异常处理,提高程序健壮性
  3. 优化了人体检测参数,平衡性能与准确性
  4. 添加了帧跳过机制,提高处理速度
  5. 增加了更详细的处理日志

2.5、最终版本

实际效果完全超出预期!我们在提示词里提到的功能全都稳稳实现,连那些没细讲的部分,AiPy 都能靠智能算法自动优化配置,像搭积木一样把功能模块完美拼在一起!

下面是首次运行提取的视频人物截图,以及生成的识别脚本。

三、一劳永逸的可反复执行脚本

3.1、确定脚本的保存路径

如果没有特别指定,所以生成的文件都是保存在AiPy的工作目录,比如:C:\Users\Administrator\.aipyapp\work。

3.2、再次执行

我们先把文件内的视频换成你所需要识别的其他视频。

然后在终端打开工作文件夹,点击python daka(1).py运行即可。

通过使用 AiPy 编写的这个简单脚本,我们成功实现了监控视频的自动监察功能,让查找关键画面变得轻松又高效。希望这个方法能帮到经常和监控视频打交道的朋友们,如果你在使用过程中遇到任何问题,或者有更好的优化建议,欢迎在评论区交流讨论!

四、写在最后:AI不是颠覆,而是让简单的事情落地

有人可能会问:「用AI做这个,是不是有点杀鸡用牛刀?」但这不本就是科技发展意义吗,试想一下作为一个监控室的保安、视频档案室的职员或者剪辑工作室的员工,不需要代码基础也能做出一些提高的工作效率的工具,让AI帮你打工。

从来就不是什么"黑科技",而是AI落地的常态:用成熟的技术解决具体的问题,让工具适配人,而不是让人适应工具。

Logo

全面兼容主流 AI 模型,支持本地及云端双模式

更多推荐