Python实现人脸识别+手机推送:老板来了立刻通知你
背景介绍
学生时代,老师站在窗外的阴影挥之不去。大家在玩手机,看漫画,看小说的时候,总是会找同桌帮忙看着班主任有没有来。

一转眼,曾经的翩翩少年毕业了,新的烦恼来了,在你刷知乎,看视频,玩手机的时候,老板来了! 不用担心,不用着急,基于最新的人脸识别+手机推送做出的 BossComing 。老板站起来的时候, BossComing 会通过人脸识别发现老板已经站起来,然后通过手机推送发送通知 “ BossComing ”,并且震动告诉你有情况。
效果展示
不明真相吃瓜群众和身后领导
领导工作繁忙,埋头敲代码

身后领导扭头过来,马上被人脸识别程序发现,并标记为 boss

手机收到推送,并震动。

BossComing

是不是就像“同桌的他”,用胳膊肘不停地戳你,并且小声的说:老师来啦,来时来啦。
技术介绍
人脸识别技术
face_recognition The world's simplest facial recognition api for Python and the command line
https://github.com/ageitgey/face_recognition
手机推送技术
jpush-api-python-client JPush's officially supported Python client library for accessing JPush APIs.
https://github.com/jpush/jpush-api-python-client
依赖安装
pip install face_recognition
pip install jpush
使用教程
- 添加 boss image

-
配置文件 修改 bosscoming 文件中的 load_image_file 参数

-
JPush 配置,这样你的手机才可以收到推送。

-
可以直接使用 JPush 官方提供的 Demo 用来接收通知。 JPush 文档: https://docs.jiguang.cn/jpush/guideline/intro/
-
运行命令
python bosscoming.py
体验人脸识别部分命令:
python bosswatching.py
打开电脑上摄像头,开始捕捉画面。然后调整角度,对准需要观察的位置。

项目说明
受 《在你上司靠近你座位时,用人脸识别技术及时屏幕切换》启发,文章地址: https://zhuanlan.zhihu.com/p/24809159 ,所介绍的项目是 BossSensor : https://github.com/Hironsan/BossSensor 。因为这个项目所需要的依赖比较多,而且我运行有问题,所以换了另外一个库来实现。 BossComing 项目地址: https://github.com/fendouai/BossComing/tree/dev 代码还不完善,仅供娱乐( Just for fun!)。
参考引用
Python实现人脸识别+手机推送:老板来了立刻通知你
厉害!
这个需求很实用,我来给你一个完整的方案。核心思路是用OpenCV做人脸检测,用Bark或PushDeer这类工具推送到手机。
首先,安装必要的库:
pip install opencv-python requests pillow
下面是完整的实现代码:
import cv2
import time
import requests
import json
from datetime import datetime
import threading
class BossDetector:
def __init__(self, boss_face_cascade_path, push_url, cooldown_time=30):
"""
初始化检测器
boss_face_cascade_path: 人脸识别分类器文件路径
push_url: 推送服务的URL
cooldown_time: 防重复推送的冷却时间(秒)
"""
# 加载人脸检测器
self.face_cascade = cv2.CascadeClassifier(boss_face_cascade_path)
# 推送配置
self.push_url = push_url
self.last_push_time = 0
self.cooldown_time = cooldown_time
# 状态标志
self.is_running = False
self.boss_detected = False
def send_push_notification(self, message="老板来了!"):
"""发送推送通知"""
current_time = time.time()
# 检查冷却时间
if current_time - self.last_push_time < self.cooldown_time:
print(f"冷却中,{int(self.cooldown_time - (current_time - self.last_push_time))}秒后可再次推送")
return False
try:
# 这里以Bark为例,你可以替换成其他推送服务
payload = {
"title": "⚠️ 老板检测系统",
"body": message,
"sound": "alarm.caf",
"icon": "https://example.com/boss.png",
"level": "timeSensitive" # iOS即时通知
}
response = requests.post(
self.push_url,
json=payload,
headers={'Content-Type': 'application/json'},
timeout=5
)
if response.status_code == 200:
print(f"[{datetime.now().strftime('%H:%M:%S')}] 推送成功: {message}")
self.last_push_time = current_time
return True
else:
print(f"推送失败: {response.status_code}")
return False
except Exception as e:
print(f"推送异常: {e}")
return False
def detect_boss(self, frame):
"""检测画面中是否有人脸"""
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = self.face_cascade.detectMultiScale(
gray,
scaleFactor=1.1,
minNeighbors=5,
minSize=(30, 30)
)
return len(faces) > 0
def run_detection(self, camera_index=0):
"""启动检测主循环"""
cap = cv2.VideoCapture(camera_index)
self.is_running = True
print("开始检测老板... (按'q'退出)")
while self.is_running:
ret, frame = cap.read()
if not ret:
print("摄像头读取失败")
break
# 检测人脸
if self.detect_boss(frame):
if not self.boss_detected:
print(f"[{datetime.now().strftime('%H:%M:%S')}] 检测到老板!")
self.boss_detected = True
# 在新线程中发送推送,避免阻塞检测
push_thread = threading.Thread(
target=self.send_push_notification,
args=("老板出现在摄像头前!",)
)
push_thread.daemon = True
push_thread.start()
else:
if self.boss_detected:
print(f"[{datetime.now().strftime('%H:%M:%S')}] 老板离开了")
self.boss_detected = False
# 显示画面(可选)
cv2.imshow('Boss Detector', frame)
# 按q退出
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
def stop(self):
"""停止检测"""
self.is_running = False
# 使用示例
if __name__ == "__main__":
# 1. 下载人脸识别分类器文件(haarcascade_frontalface_default.xml)
# 可以从OpenCV的GitHub仓库下载
# 2. 配置推送服务(以Bark为例)
# 在手机安装Bark App,获取推送URL
BARK_URL = "https://api.day.app/你的Bark密钥/老板检测"
# 3. 创建并运行检测器
detector = BossDetector(
boss_face_cascade_path="haarcascade_frontalface_default.xml",
push_url=BARK_URL,
cooldown_time=30 # 30秒内不重复推送
)
# 4. 开始检测(0表示默认摄像头)
try:
detector.run_detection(camera_index=0)
except KeyboardInterrupt:
detector.stop()
print("程序已停止")
推送服务配置建议:
- Bark(推荐):iOS专用,配置简单,即时推送
- PushDeer:跨平台,自建服务器
- 企业微信/钉钉机器人:适合办公环境
优化方向:
- 使用Dlib或Face Recognition库提高识别准确率
- 添加特定人脸识别(只识别老板)
- 设置检测区域和灵敏度
一句话总结: 用OpenCV做人脸检测,搭配推送服务实现老板预警。
哈哈,你也可以玩一下,很有意思。
…
真是牛逼啊哈哈。。。
我以后会戴面具巡视的~你继续玩~
正是受这个项目启发,只是这个项目没有跑通。
受 《在你上司靠近你座位时,用人脸识别技术及时屏幕切换》启发,文章地址: https://zhuanlan.zhihu.com/p/24809159 ,所介绍的项目是 BossSensor : https://github.com/Hironsan/BossSensor 。
其实感觉显示屏幕桌面更有用 有空看手机 不如老板键自动触发
new project:Boss coming with mask
“老板,你过来,我给你照张相~”
再下次,我女妆视察。
厉害啊,卖套装可以开淘宝店了。
戴口罩呢?
666
捂脸巡查……
是时候开个淘宝店了。
晚点试一下,让 boss 戴口罩。
那就把戴口罩也的情况也记下来
这个项目不是利用了机器学习么,第一次戴口罩可能会坑,但是第二次就没事了
得自动触发老板键!
然而现在老板都是看监控 根本不用过来 摄像头还能控制角度 无解啊
哈哈 以后机器 不配置摄像头了
没有办法跑在 windows 上吧
想法很美好,老板该出动无人机监测员工状态了 
蛮有意思的,不过收到短信已经晚了吧, hh
如果是电脑的摄像头的话有点晚了吧 得放在走廊上
识别会不会延迟导致悲剧.
老板的肚子真大
老板像个小弟。。
不太确定,我是 MAC 。
厉害了 我的哥


