first commit
This commit is contained in:
131
app/__init__.py
Executable file
131
app/__init__.py
Executable 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
|
||||
Reference in New Issue
Block a user