AiPy 监控视频智能监察:人像一键抽取+可反复执行程序落地
不过我最近搞了个骚操作:用AiPy搓了个脚本,让监控视频自己监察,有人经过自动截图存档,并打上时间戳,关键是简单、免费、可复用,换个视频文件也能跑!当前目录有一个daka文件夹,需要你帮忙写一个脚本名称为daka(1).py,可以识别daka文件夹内部的视频,每当有人经过的时候就能截图保存到dakajietu文件夹中,识别过程要避免重复。但对于AiPy来说完全不是问题,基于错误反馈,AiPy移除了
兄弟们,不知道你们有没有过查监控的经历,虽然现在监控摄像头是越来越多,硬盘越塞越满,但真出了事儿,回放查录像堪比大海捞针!纯人工一帧帧的去找,能把眼睛盯瞎还是人影都找不到。不过我最近搞了个骚操作:用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()的依赖,同时,我将优化代码结构,提高检测准确性并添加更多错误处理。
主要改进点:
- 移除了cv2.waitKey()调用,解决了GUI错误
- 添加了异常处理,提高程序健壮性
- 优化了人体检测参数,平衡性能与准确性
- 添加了帧跳过机制,提高处理速度
- 增加了更详细的处理日志
2.5、最终版本
实际效果完全超出预期!我们在提示词里提到的功能全都稳稳实现,连那些没细讲的部分,AiPy 都能靠智能算法自动优化配置,像搭积木一样把功能模块完美拼在一起!
下面是首次运行提取的视频人物截图,以及生成的识别脚本。
三、一劳永逸的可反复执行脚本
3.1、确定脚本的保存路径
如果没有特别指定,所以生成的文件都是保存在AiPy的工作目录,比如:C:\Users\Administrator\.aipyapp\work。
3.2、再次执行
我们先把文件内的视频换成你所需要识别的其他视频。
然后在终端打开工作文件夹,点击python daka(1).py运行即可。
通过使用 AiPy 编写的这个简单脚本,我们成功实现了监控视频的自动监察功能,让查找关键画面变得轻松又高效。希望这个方法能帮到经常和监控视频打交道的朋友们,如果你在使用过程中遇到任何问题,或者有更好的优化建议,欢迎在评论区交流讨论!
四、写在最后:AI不是颠覆,而是让简单的事情落地
有人可能会问:「用AI就做这个,是不是有点杀鸡用牛刀?」但这不本就是科技发展意义吗,试想一下作为一个监控室的保安、视频档案室的职员或者剪辑工作室的员工,不需要代码基础也能做出一些提高的工作效率的工具,让AI帮你打工。
这从来就不是什么"黑科技",而是AI落地的常态:用成熟的技术解决具体的问题,让工具适配人,而不是让人适应工具。
更多推荐
所有评论(0)