摸鱼必备,BossSensor

摸鱼必备,BossSensor

原始代码写于2017年,时间过于久远,对代码进行了重新实现。

整体配置流程不变,在环境中可能会用到pyqt5、opencv3.4.2、keras2.2.4这些组件

实现功能做了简化,有兴趣可以补全。判断屏幕前方是否有人面向你走来,并进行切屏。

距离你三到五米就可以判断出来并切屏了,如果对特定人物有要求,可以加入一些人脸识别模型至test文件注释位置即可。

直接上代码

import cv2
#from My_model import Model
from image_show import show_image
import PyQt5

if __name__ == '__main__':
    cap = cv2.VideoCapture(0)
    cascade_path = "haarcascade_frontalface_default.xml"
    result = 0
    #--------------加载人脸识别模型-------------#
    # model = Model()
    # model.load()
    continue_nums = 0 #防止误判
    while(True):
        # 获取每帧图像
        ret, frame = cap.read()
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        
        # 人脸检测
        cascade = cv2.CascadeClassifier(cascade_path)
        facerect = cascade.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=3, minSize=(10, 10))
        print(len(facerect)) # 打印前方人脸数量

        # 判断逻辑
        if len(facerect) > 0:
            print('face detected')
            color = (255, 255, 255)  # 白
            for rect in facerect:
                cv2.rectangle(frame, tuple(rect[0:2]), tuple(rect[0:2] + rect[2:4]), color, thickness=2)
                x, y = rect[0:2]
                width, height = rect[2:4]
                image = frame[y - 10: y + height, x: x + width]
                #--------------接入其他推理模型-------------#
                result = 1#model.predict(image)

        #--------------识别灵敏度,防误触-------------#
        if len(facerect)>0:#result==1:
            continue_nums += 1
        else:
            continue_nums = 0
        
        #--------------图片覆盖(伪切屏)-------------#
        if continue_nums>5:
            show_image()
            continue_nums = 0
          
        # if cv2.waitKey(25) & 0xFF == ord('q'):
        #     break

        #--------------显示图像-------------#
        #cv2.imshow('frame',frame)
        #cv2.waitKey(25)


    cap.release()
    cv2.destroyAllWindows()

用pyqt实现伪切屏

实际上就是做个全屏前置页面,覆盖掉你当前的屏幕,并不是真正的切屏

def show_image(image_path='test.png'):
    app = QtWidgets.QApplication(sys.argv)
    pixmap = QtGui.QPixmap(image_path)
    screen = QtWidgets.QLabel()
    screen.setWindowFlags(PyQt5.QtCore.Qt.WindowMinimizeButtonHint |  # 使能最小化按钮
                    PyQt5.QtCore.Qt.WindowCloseButtonHint |  # 使能关闭按钮
                    PyQt5.QtCore.Qt.WindowStaysOnTopHint)  # 窗体总在最前端
    screen.setPixmap(pixmap)
    screen.showFullScreen()
    
    #sys.exit(app.exec_())
    app.exec_()

你可能感兴趣的:(其他,python)