|
|
@@ -4,26 +4,33 @@ import subprocess |
|
|
|
import threading |
|
|
|
import getpass |
|
|
|
import os |
|
|
|
import sys |
|
|
|
import signal |
|
|
|
import time |
|
|
|
import glob |
|
|
|
|
|
|
|
class I3Locker: |
|
|
|
def __init__(self): |
|
|
|
def __init__(self, lockpid): |
|
|
|
self.killed = False |
|
|
|
self.proc = None |
|
|
|
self.lockpid = lockpid |
|
|
|
|
|
|
|
def run(self): |
|
|
|
self.proc = subprocess.Popen([ "mlock" ]) |
|
|
|
code = self.proc.wait() |
|
|
|
if code == 0 or self.killed: |
|
|
|
return 0 |
|
|
|
died = False |
|
|
|
while not died and not self.killed: |
|
|
|
try: |
|
|
|
os.kill(self.lockpid, 0) |
|
|
|
time.sleep(0.5) |
|
|
|
except: |
|
|
|
died = True |
|
|
|
|
|
|
|
if self.killed: |
|
|
|
return 1 |
|
|
|
else: |
|
|
|
print("mlock exited with code "+str(code)) |
|
|
|
return -1 |
|
|
|
return 0 |
|
|
|
|
|
|
|
def kill(self): |
|
|
|
self.killed = True |
|
|
|
self.proc.terminate() |
|
|
|
os.kill(self.lockpid, signal.SIGTERM) |
|
|
|
|
|
|
|
class FaceLocker: |
|
|
|
def __init__(self): |
|
|
@@ -68,7 +75,9 @@ class FaceLocker: |
|
|
|
# Match faces, blocks until a match is found or we're killed |
|
|
|
self.runFaces(faceencs, paths, np, face_recognition, cv2) |
|
|
|
|
|
|
|
if self.matching or self.killed: |
|
|
|
if self.killed: |
|
|
|
return 1 |
|
|
|
elif self.matching: |
|
|
|
return 0 |
|
|
|
else: |
|
|
|
return -1 |
|
|
@@ -110,7 +119,6 @@ class FaceLocker: |
|
|
|
dist = dists[0] |
|
|
|
distidx = 0 |
|
|
|
for i, d in enumerate(dists): |
|
|
|
print(i, d) |
|
|
|
if d < dist: |
|
|
|
dist = d |
|
|
|
distidx = i |
|
|
@@ -144,7 +152,7 @@ class FaceLocker: |
|
|
|
self.waitingProc.terminate() |
|
|
|
|
|
|
|
lockers = [ |
|
|
|
I3Locker(), |
|
|
|
I3Locker(int(sys.argv[1])), |
|
|
|
FaceLocker(), |
|
|
|
] |
|
|
|
|
|
|
@@ -157,7 +165,7 @@ def runLocker(locker): |
|
|
|
if l == locker: |
|
|
|
continue |
|
|
|
l.kill() |
|
|
|
else: |
|
|
|
elif ret != 1: |
|
|
|
print(locker.__class__.__name__+" failed.") |
|
|
|
|
|
|
|
|