
昨晚蹲在茶几旁边调接电视的旧笔记本时,突然嫌每次坐回沙发还要伸手拿鼠标点短剧播放太麻烦,干脆花了俩小时搓了个小脚本,亲测能用,记下来免得下次换设备忘了步骤。
准备的东西不用太复杂
- 一个普通USB摄像头就行,不用买高清款,能拍到人影就够
- 运行设备没要求,电脑、树莓派都能跑,我这边用的是攒了五六年的旧笔记本,没装独显也不卡
- Python版本别太老,3.8以上就行,之前试过3.7装依赖容易报版本冲突
搭环境的步骤我顺手抄下来了
- 先建个虚拟环境,省得把全局Python包搞乱,命令直接贴:
python -m venv shortdrama_env # Windows系统激活跑 shortdrama_env\Scripts\activate # Linux/macOS/树莓派激活跑 source shortdrama_env/bin/activate - 装需要的依赖,就三个包,不用装几个G的大模型框架:
要是树莓派之类的ARM设备装mediapipe报错,直接去官方仓库找对应系统版本的whl包本地装就行,我之前试过pip直接装有时候源里缺对应架构的安装包,折腾好半天。对了mediapipe的人体检测模型是第一次运行时自动下载的,也就几M大小,不用提前到处找资源。pip install opencv-python mediapipe pyautogui - 核心代码没几行,逻辑特别简单,说白了就是摄像头循环读帧,检测到镜头前有人体轮廓,且距离上次触发超过设定的冷却时间,就模拟按一下空格。我平时离开沙发都会顺手暂停,所以没加复杂的播放状态判断,嫌麻烦,反正误触了大不了再按一下的事。注意改对摄像头索引,一般笔记本自带摄像头是0,外接USB的是1,不对的话自己换个数字试就行。
import cv2 import mediapipe as mp import pyautogui import time mp_pose = mp.solutions.pose # 选最轻量的模型,跑着不费资源 pose = mp_pose.Pose(model_complexity=0) cap = cv2.VideoCapture(0) last_trigger_time = 0 # 触发后冷却时间,避免反复触发 cooldown = 15 while cap.isOpened(): ret, frame = cap.read() if not ret: break frame.flags.writeable = False results = pose.process(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)) if results.pose_landmarks: now = time.time() if now - last_trigger_time > cooldown: pyautogui.press('space') last_trigger_time = now # 按q键退出,平时可以把预览窗口关了后台跑 if cv2.waitKey(5) & 0xFF == ord('q'): break cap.release()
提醒下,脚本我没加任何画面上传、本地存储的逻辑,所有识别计算全在本地完成,不会传任何画面数据出去,这点我特意查过进程的网络连接,放心用。这个我还没细测多人同时经过、宠物乱入的识别准确率,反正自己一个人在家用完全够。
自己改的时候能调的几个参数
- model_complexity:填0就是最省资源的模式,老设备填1也能跑,2就没必要了,就是识别人影而已
- cooldown:触发冷却时间,我设的15秒,怕路过的时候误触,你要是嫌久可以自己改短
- 要是你家用的播放器播放快捷键不是空格,就把pyautogui.press里的键位换成对应的就行,比如有些播放器是回车,改个参数的事
我现在把这个脚本加到系统开机启动项里了,下班推开门走到沙发前,上次看到一半的短剧自动就接着播,连遥控器都不用摸。哦对了,要是家里养了猫总在电视柜上晃的话,记得把摄像头架高点,别被猫触发了白放一下午剧。
评论一下?