Python实现人脸识别+手机推送:老板来了立刻通知你

背景介绍

学生时代,老师站在窗外的阴影挥之不去。大家在玩手机,看漫画,看小说的时候,总是会找同桌帮忙看着班主任有没有来。

teacher.jpeg

一转眼,曾经的翩翩少年毕业了,新的烦恼来了,在你刷知乎,看视频,玩手机的时候,老板来了! 不用担心,不用着急,基于最新的人脸识别+手机推送做出的 BossComing 。老板站起来的时候, BossComing 会通过人脸识别发现老板已经站起来,然后通过手机推送发送通知 “ BossComing ”,并且震动告诉你有情况。

效果展示

不明真相吃瓜群众和身后领导

领导工作繁忙,埋头敲代码

低头工作的领导

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

扭头过来的领导

手机收到推送,并震动。

notification.jpg

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

conf0.png

  • 配置文件 修改 bosscoming 文件中的 load_image_file 参数 conf1.png

  • JPush 配置,这样你的手机才可以收到推送。 conf2.png

  • 可以直接使用 JPush 官方提供的 Demo 用来接收通知。 JPush 文档: https://docs.jiguang.cn/jpush/guideline/intro/

  • 运行命令

python bosscoming.py

体验人脸识别部分命令:

python bosswatching.py

打开电脑上摄像头,开始捕捉画面。然后调整角度,对准需要观察的位置。

blank.png

项目说明

受 《在你上司靠近你座位时,用人脸识别技术及时屏幕切换》启发,文章地址: https://zhuanlan.zhihu.com/p/24809159 ,所介绍的项目是 BossSensor : https://github.com/Hironsan/BossSensor 。因为这个项目所需要的依赖比较多,而且我运行有问题,所以换了另外一个库来实现。 BossComing 项目地址: https://github.com/fendouai/BossComing/tree/dev 代码还不完善,仅供娱乐( Just for fun!)。

参考引用

https://github.com/ageitgey/face_recognition

https://github.com/jpush/jpush-api-python-client

https://github.com/Hironsan/BossSensor


Python实现人脸识别+手机推送:老板来了立刻通知你

33 回复

这个需求很实用,我来给你一个完整的方案。核心思路是用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("程序已停止")

推送服务配置建议:

  1. Bark(推荐):iOS专用,配置简单,即时推送
  2. PushDeer:跨平台,自建服务器
  3. 企业微信/钉钉机器人:适合办公环境

优化方向:

  • 使用Dlib或Face Recognition库提高识别准确率
  • 添加特定人脸识别(只识别老板)
  • 设置检测区域和灵敏度

一句话总结: 用OpenCV做人脸检测,搭配推送服务实现老板预警。

哈哈,你也可以玩一下,很有意思。

真是牛逼啊哈哈。。。

我以后会戴面具巡视的~你继续玩~

正是受这个项目启发,只是这个项目没有跑通。
受 《在你上司靠近你座位时,用人脸识别技术及时屏幕切换》启发,文章地址: https://zhuanlan.zhihu.com/p/24809159 ,所介绍的项目是 BossSensor : https://github.com/Hironsan/BossSensor

其实感觉显示屏幕桌面更有用 有空看手机 不如老板键自动触发

new project:Boss coming with mask

“老板,你过来,我给你照张相~”

再下次,我女妆视察。

厉害啊,卖套装可以开淘宝店了。

戴口罩呢?

捂脸巡查……

是时候开个淘宝店了。

晚点试一下,让 boss 戴口罩。

那就把戴口罩也的情况也记下来

。。。可以开始研究虹膜识别了

这个项目不是利用了机器学习么,第一次戴口罩可能会坑,但是第二次就没事了

得自动触发老板键!

然而现在老板都是看监控 根本不用过来 摄像头还能控制角度 无解啊

哈哈 以后机器 不配置摄像头了

没有办法跑在 windows 上吧

想法很美好,老板该出动无人机监测员工状态了

蛮有意思的,不过收到短信已经晚了吧, hh

如果是电脑的摄像头的话有点晚了吧 得放在走廊上

识别会不会延迟导致悲剧.

老板的肚子真大

老板像个小弟。。

不太确定,我是 MAC 。

厉害了 我的哥

回到顶部