Files
2026-10-24 17:55:05 +02:00

29 lines
1.3 KiB
Python

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()