最近AiPy很火,我用了有一段时间了,感觉严重影响睡眠,感觉这东西容易上瘾,今天推荐给大家。
AiPy它是基于AI+Python,官方的说法是他们给大模型装上了手脚,也就是说,用大白话就能自动操作电脑、控制手机、甚至连家里的智能灯泡也能控制,听起来有点逆天。然后AiPy是个开源项目,有命令行版和客户端。
「开源地址」:https://github.com/knownsec/aipyapp
而今天,我来给大家分享一个我最近刚刚用AiPy跑过的案例。起因是,朋友是某个公司保安,平时经常有人来找他查公司监控,东西丢了要查监控,考勤迟到早退也要查,但是视频又很长,每次翻来翻去,很费时,简直烦死了,于是找我帮忙,然后我就要来视频,用AiPy来尝试帮他提高效率。
下面,我来分享一下思路、代码和实践经验,希望能帮到有需要的朋友们,有同样场景的可以拿去直接用。
一、工具和提示词准备
1. 下载安装
在AiPy官网(https://www.aipyaipy.com/)免费下载,为了方便大家快速上手,我用客户端版,支持 Windows 和 macOS,喜欢命令行的朋友也可以选 CLI版本,用
复制pip install aipyapp
安装,下载好后,界面长这样:
2. 写提示词
根据官方介绍,AiPy是一个融合了LLM能力与Python程序和生态的智能体,我只需要把需求讲清楚告诉 AiPy 就行。
根据自己的需求,我写出提示词如下:
当前目录有一个daka文件夹,需要你帮忙写一个脚本名称为daka.py,可以识别daka文件夹内部的视频,每当有人经过的时候就能截图保存到dakajietu文件夹中,识别过程要避免重复。
二、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文件夹存在 ifnot os.path.exists('daka'): os.makedirs('daka') print("已创建daka文件夹,请将视频文件放入其中") # 确保截图文件夹存在 ifnot 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) ifnot cap.isOpened(): print(f"无法打开视频文件: {video_path}") return last_capture_time print(f"开始处理视频: {os.path.basename(video_path)}") while cap.isOpened(): ret, frame = cap.read() ifnot 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) > 0and (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() ifnot 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()
三、自动优化及修复
跑第一次时,因为环境不支持GUI操作,所以进行到步骤4的时候出现bug。
基于错误反馈,AiPy自动移除了对cv2.waitKey()的依赖,同时还优化了代码结构,提高检测准确性并添加更多错误处理。
主要改进点:
- 移除了cv2.waitKey()调用,解决了GUI错误
- 添加了异常处理,提高程序健壮性
- 优化了人体检测参数,平衡性能与准确性
- 添加了帧跳过机制,提高处理速度
- 增加了更详细的处理日志
四、最终版本
实际效果完全超出预期!我在提示词里提到的功能全都稳稳实现,连那些没细讲的部分,AiPy都能靠智能算法自动优化配置,像搭积木一样把功能模块完美拼在一起!
五、效果展示
下面是首次运行提取的视频人物截图。
六、一劳永逸的可反复执行脚本
1. 确定脚本的保存路径
如果没有特别指定,所以生成的文件都是保存在AiPy的工作目录,比如:C:\Users\Administrator\.aipyapp\work
2. 再次执行
我先把文件内的视频换成所需要识别的其他视频。
然后在终端打开工作文件夹,点击python daka.py运行即可。
依靠AiPy编写的脚本,我成功搞定了监控视频的自动监察功能,让查找关键画面变得轻松又高效。
七、解锁更多使用体验
最近,我也看了不少AiPy官方和网友分享的案例,发现只要是能用Python自动调度完成的任务,基本都能交给AiPy搞定。
其实原理也很简单:AiPy 本质上就是把大模型的语言理解能力和Python的编程能力结合起来,通过生成、调试、执行Python代码,把任务跑通。借助Python强大的生态,AiPy能高效搞定本地文件处理、应用控制、数据分析、物联网联动等多种任务。