Init commit
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
import os, cv2, face_recognition
|
||||
from pathlib import Path
|
||||
from dotenv import load_dotenv
|
||||
from mcp.server.fastmcp import FastMCP
|
||||
load_dotenv();mcp=FastMCP("Alfred Face Recognition");DB=Path(os.getenv('FACE_DB','/home/hermes/faces'));T=float(os.getenv('FACE_TOLERANCE','0.48'))
|
||||
def encodings():
|
||||
known=[]
|
||||
for person in DB.iterdir() if DB.exists() else []:
|
||||
if not person.is_dir():continue
|
||||
for f in person.glob('*'):
|
||||
try:
|
||||
im=face_recognition.load_image_file(str(f)); es=face_recognition.face_encodings(im)
|
||||
if es:known.append((person.name,es[0]))
|
||||
except Exception:pass
|
||||
return known
|
||||
@mcp.tool()
|
||||
def identify_people(camera_index:int=0):
|
||||
cap=cv2.VideoCapture(camera_index);ok,frame=cap.read();cap.release()
|
||||
if not ok:raise RuntimeError('Caméra indisponible')
|
||||
rgb=cv2.cvtColor(frame,cv2.COLOR_BGR2RGB); locs=face_recognition.face_locations(rgb); es=face_recognition.face_encodings(rgb,locs); known=encodings();out=[]
|
||||
for e in es:
|
||||
name='inconnu';best=T
|
||||
for n,k in known:
|
||||
d=face_recognition.face_distance([k],e)[0]
|
||||
if d<best:name,best=n,d
|
||||
out.append({'name':name,'distance':float(best)})
|
||||
return {'count':len(out),'people':out,'unknown_count':sum(x['name']=='inconnu' for x in out)}
|
||||
if __name__=='__main__':mcp.run()
|
||||
Reference in New Issue
Block a user