first commit

This commit is contained in:
编码猿
2024-09-27 01:20:28 +08:00
commit ddc91bf4e2
137 changed files with 4017 additions and 0 deletions

131
app/__init__.py Executable file
View File

@@ -0,0 +1,131 @@
import multiprocessing
import cv2 as cv
from multiprocessing import Process, Queue
from app.lib.face.facepp import API, File
from app.util.system_api import ge_device_info, lock_screen, unlock, sudo
from app.config import Config
from os import path, remove
class Application:
def __init__(self):
# 保存当前锁屏状态
Config.is_locked = ge_device_info().get('CGSSessionScreenIsLocked', False)
def run(self):
try:
mydict = multiprocessing.Manager().dict()
mydict['get_pic'] = 'true'
frame = Queue()
# 启动摄像头
camera_frame = Process(
target=self.OpenCamera,
args=("摄像头", frame, mydict)
)
# 实时图片处理
img_frame = Process(
target=self.ProcessingPictures,
args=("处理图片", frame, mydict)
)
camera_frame.start()
img_frame.start()
camera_frame.join()
img_frame.join()
except KeyboardInterrupt:
print("任务被终止了")
# 打开摄像头捕捉图片
def OpenCamera(self, task_name, queue, mydict):
# 初始化状态,不进行图像传输
mydict["get_pic"] = "true"
capture = cv.VideoCapture(0)
print(task_name + "任务启动..")
try:
while True:
# 一帧一帧读取视频
ret, frame = capture.read()
if mydict["get_pic"] == "true":
mydict["get_pic"] = "false"
queue.put(frame)
# cv.imshow('capture', frame)
# cv.namedWindow("摄像头", 0)
# cv.resizeWindow("capture", 0, 0)
# cv.imshow('capture', frame)
cv.waitKey(1)
except KeyboardInterrupt:
capture.release()
print(task_name + "任务关闭...")
# 处理图片face++人脸对比
def ProcessingPictures(self, task_name, queue, mydict):
print(task_name + "任务启动")
try:
while True:
# 从队列中获取图片,显示图像质量
mydict["get_pic"] = "true"
frame = queue.get()
cv.imwrite(self.PicPath("current_user.jpg"), frame)
compare_res = Config.faceApi.compare(
image_file1=File(self.PicPath("administrators.jpg")),
image_file2=File(self.PicPath("current_user.jpg"))
)
if ('confidence' in compare_res):
print("捕捉的摄像头人物相似度:", compare_res['confidence'])
# 如果是锁屏状态
if Config.is_locked:
# 如果是管理员
if compare_res['confidence'] > 50.0:
print("锁屏状态下,是管理员,所以需要进行解锁....")
Config.is_locked = False
# sudo("say '欢迎,正在自动解锁中!'")
unlock()
else:
sudo("say '不是管理员,无法解锁!'")
else:
if compare_res['confidence'] > 50.0:
print("非锁屏状态下,是管理员,无需操作....")
else:
sudo("say '不是管理员,即将锁屏!'")
Config.is_locked = True
lock_screen()
# 摄像头前没有检测到人的时候,进行锁屏
else:
if Config.is_first_count == 1:
print("是第一次运行,什么都不操作")
Config.is_first_count+=1
else:
print("不是第一次运行,屏幕前还没有人,进行锁屏")
# remove(self.PicPath("current_user.jpg"))
Config.is_locked = True
lock_screen()
except KeyboardInterrupt:
# remove(self.PicPath("current_user.jpg"))
print(task_name + "任务被终止")
def PicPath(self, fileName):
parent = path.abspath(path.dirname(path.realpath(__file__)) + path.sep + 'res/img/'+fileName);
return parent