🐟 前言:科技是为了更好地生存
作为一名程序员,工作之余偶尔“带薪放松”一下是合情合理的。
但最尴尬的莫过于:当你正打开 Steam 或者 B 站时,老板悄无声息地出现在了你身后。
靠后视镜?太 low。靠听脚步声?太累。
我们要用技术解决问题!
今天,我将手把手教你用树莓派 (Raspberry Pi)加上YOLOv8视觉模型,打造一个全自动防摸鱼防御塔。
核心功能:摄像头 24 小时监控门口,一旦识别到“老板”或者“人脸”,立刻向你的电脑发送指令,瞬间切换回 VS Code 代码界面!
🛠️ 系统架构:它是怎么工作的?
我们不把算力浪费在工作电脑上(容易被发现进程),而是把识别任务全部交给树莓派。
硬件清单:
- 树莓派 4B / 5(推荐 4GB 内存以上)。
- USB 摄像头 / CSI 摄像头(广角镜头最佳)。
- 工作电脑(Windows/Mac)。
逻辑流程图 (Mermaid):
📸 Step 1: 数据集准备(最危险的一步)
要训练一个能识别“老板”的模型,你需要老板的照片。
- 方案 A (勇士版):直接拿着手机对着老板拍,积累 100 张素材。
- 方案 B (猥琐版):从公司大合照、监控录像、或者他路过时偷拍。
标注数据:
使用LabelImg或Roboflow进行标注。
- Label:
boss(老板) - Label:
human(普通同事,可选,用于二级预警)
🧠 Step 2: 训练 YOLOv8 模型
为了在树莓派上跑得动,我们选择最轻量级的YOLOv8n (Nano)版本。
本地电脑训练代码 (GPU):
fromultralyticsimportYOLO# 1. 加载预训练模型model=YOLO('yolov8n.pt')# 2. 训练 (指向你的数据集 yaml 文件)# epochs=50 差不多够了,imgsz=640results=model.train(data='boss_dataset.yaml',epochs=50,imgsz=640)# 3. 导出为 NCNN 或 ONNX 格式 (关键!树莓派跑不动 PyTorch 原生格式)model.export(format='ncnn')训练完成后,你会得到一个best.pt(或者导出后的best_ncnn_model),把它拷贝到树莓派上。
🍓 Step 3: 树莓派部署 (核心代码)
在树莓派上,我们需要安装ultralytics和opencv-python。
detector.py(运行在树莓派):
importcv2fromultralyticsimportYOLOimportsocketimporttime# 1. 加载模型model=YOLO("yolov8n.pt")# 建议使用导出后的 ncnn 模型以提速# 2. 初始化网络发送端 (发给电脑)PC_IP="192.168.1.100"# 你电脑的 IPPORT=8888client_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)# 3. 打开摄像头cap=cv2.VideoCapture(0)# 降低分辨率以提高 FPScap.set(3,640)cap.set(4,480)print("🛡️ 防摸鱼系统启动中...")whileTrue:ret,frame=cap.read()ifnotret:break# 4. 推理results=model(frame,stream=True,conf=0.6)# 置信度设高点,防止误判forrinresults:boxes=r.boxesforboxinboxes:cls=int(box.cls[0])label=model.names[cls]# 5. 核心判断逻辑iflabel=='person':# 如果你训练了专门的 boss 类,这里写 'boss'print("⚠️ 警报!检测到目标!")# 发送指令给电脑msg="BOSS_IS_COMING"client_socket.sendto(msg.encode(),(PC_IP,PORT))# 冷却时间,防止一直切屏闪瞎眼time.sleep(5)# 可选:显示监控画面 (会降低性能,建议无头运行)# cv2.imshow('Surveillance', frame)# if cv2.waitKey(1) & 0xFF == ord('q'): breakcap.release()💻 Step 4: 电脑端接收与自动切屏
在你的工作电脑上,运行一个微小的 Python 脚本,监听树莓派发来的信号。
receiver.py(运行在电脑后台):
importsocketimportpyautogui# 自动化控制库# 绑定监听端口server_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)server_socket.bind(("0.0.0.0",8888))print("👨💻 工作模式已就绪,等待指令...")whileTrue:data,addr=server_socket.recvfrom(1024)msg=data.decode()ifmsg=="BOSS_IS_COMING":print("💥 收到警报!执行紧急切屏!")# 方案 A: 最小化所有窗口,回到桌面pyautogui.hotkey('win','d')# 方案 B: 切换到上一个应用 (比如写好的代码页面)# pyautogui.hotkey('alt', 'tab')⚡ Step 5: 性能优化 (让树莓派跑得飞起)
树莓派 4B 直接跑 YOLOv8n 大概只有 1-3 FPS,这延迟太高了,等识别出来老板已经站你背后了。
优化方案:
- 模型量化:使用
Int8量化。 - 导出格式:不要直接用
.pt。
- NCNN:腾讯开源的框架,专门针对 ARM 优化,在树莓派上能跑到 10-15 FPS。
- ONNX Runtime:比 PyTorch 原生快不少。
- 超频:给树莓派加个风扇,超频到 2.0GHz。
优化后的流程图:
📝 总结与风险提示
通过这个项目,你不仅学会了YOLOv8的训练与部署,还掌握了Socket 网络编程和树莓派硬件控制。这可是实打实的“全栈”技能!
⚠️ 风险提示:
- 误判风险:如果把打扫卫生的阿姨识别成老板,你的屏幕会疯狂闪烁。
- 职场风险:如果被老板发现你在做这个东西… 呃,你最好解释说这是为了**“保护公司资产安全”**。
祝大家的摸鱼生涯,安全,且高效。