Testys commited on
Commit
6766f00
·
1 Parent(s): 7ffac05

Made changes for face login

Browse files
Files changed (1) hide show
  1. users/routes.py +33 -15
users/routes.py CHANGED
@@ -8,6 +8,7 @@ from users.services import create_user_account, create_user_embeddings, update_u
8
  from services.facial_processing import FacialProcessing
9
  from services.face_match import FaceMatch
10
  import os
 
11
  from datetime import timedelta
12
  from dotenv import load_dotenv
13
  from auth.services import get_token
@@ -25,76 +26,93 @@ async def create_user(data: UserCreate, db: Session = Depends(get_db)):
25
  new_user = await create_user_account(data, db)
26
  return new_user
27
 
28
- @router.get("/me", response_model=UserBase)
29
  async def read_users_me(current_user: User = Depends(get_current_user)):
30
  return current_user
31
 
32
- @router.put("/me", response_model=UserBase)
33
  async def update_user_me(user: UserUpdate, current_user: User = Depends(get_current_user), db: Session = Depends(get_db)):
34
  updated_user = update_user(db, current_user.id, user)
35
  return updated_user
36
 
37
- @router.post("/me/face", status_code=status.HTTP_200_OK)
38
  async def create_face_embeddings(file: UploadFile = File(...), user: User = Depends(get_current_user), db: Session = Depends(get_db)):
39
  face_processor = FacialProcessing()
40
 
41
- image_path = f"faces/{user.id}.jpg"
42
- with open(image_path, "wb") as buffer:
43
- buffer.write(await file.read())
 
 
44
 
45
  embeddings = face_processor.extract_embeddings_vgg(image_path)
46
  if embeddings:
47
  user_embeddings = UserEmbeddingsBase(embeddings=embeddings)
48
  await create_user_embeddings(user.id, user_embeddings, db)
 
 
 
49
  return {"message": "Face embeddings created successfully"}
50
 
 
 
51
  raise HTTPException(status_code=400, detail="Failed to process face")
52
 
53
- @router.get("/me/face", status_code=status.HTTP_200_OK)
54
  async def get_face_embeddings(user: User = Depends(get_current_user), db: Session = Depends(get_db)):
55
  face = db.query(UserEmbeddingsBase).filter(UserEmbeddingsBase.user_id == user.id).first()
56
  if not face:
57
  raise HTTPException(status_code=404, detail="Face embeddings not found")
58
  return JSONResponse(content={"embeddings": face.embeddings}, status_code=status.HTTP_200_OK)
59
 
60
- @router.put("/me/face", status_code=status.HTTP_200_OK)
61
  async def update_face_embeddings(file: UploadFile = File(...), user: User = Depends(get_current_user), db: Session = Depends(get_db)):
62
  face_processor = FacialProcessing()
63
 
64
- image_path = f"faces/{user.id}.jpg"
65
- with open(image_path, "wb") as buffer:
66
- buffer.write(await file.read())
 
67
 
68
  embeddings = face_processor.extract_embeddings_vgg(image_path)
69
  if embeddings:
70
  user_embeddings = UserEmbeddingsBase(embeddings=embeddings)
71
  await update_user_embeddings(user.id, user_embeddings, db)
 
 
72
  return {"message": "Face embeddings updated successfully"}
73
 
 
74
  raise HTTPException(status_code=400, detail="Failed to process face")
75
 
76
- @router.post("/login/face")
77
  async def face_login(file: UploadFile = File(...), db: Session = Depends(get_db)):
78
  face_processor = FacialProcessing()
79
  face_matcher = FaceMatch(db)
80
 
81
- image_path = f"temp_{file.filename}"
82
- with open(image_path, "wb") as buffer:
83
- buffer.write(await file.read())
 
84
 
85
  embeddings = await face_processor.extract_embeddings(image_path)
86
  if not embeddings:
 
87
  raise HTTPException(status_code=400, detail="Failed to process face")
88
 
89
  match_result = face_matcher.new_face_matching(embeddings)
90
  if match_result['status'] == 'Success':
91
  user = get_user_by_id(match_result['user_id'], db)
92
  if not user:
 
93
  raise HTTPException(status_code=404, detail="User not found")
94
 
95
  access_token_expires = timedelta(minutes=int(os.getenv("ACCESS_TOKEN_EXPIRE_MINUTES", "30")))
96
  payload = {"id": user.id, "sub": user.email}
97
  token = get_token(payload, db)
 
 
98
  return JSONResponse(content=token.dict(), status_code=status.HTTP_200_OK)
99
 
 
100
  raise HTTPException(status_code=401, detail="Face not recognized")
 
8
  from services.facial_processing import FacialProcessing
9
  from services.face_match import FaceMatch
10
  import os
11
+ import tempfile
12
  from datetime import timedelta
13
  from dotenv import load_dotenv
14
  from auth.services import get_token
 
26
  new_user = await create_user_account(data, db)
27
  return new_user
28
 
29
+ @router.get("/me/", response_model=UserBase)
30
  async def read_users_me(current_user: User = Depends(get_current_user)):
31
  return current_user
32
 
33
+ @router.put("/me/", response_model=UserBase)
34
  async def update_user_me(user: UserUpdate, current_user: User = Depends(get_current_user), db: Session = Depends(get_db)):
35
  updated_user = update_user(db, current_user.id, user)
36
  return updated_user
37
 
38
+ @router.post("/me/face/", status_code=status.HTTP_200_OK)
39
  async def create_face_embeddings(file: UploadFile = File(...), user: User = Depends(get_current_user), db: Session = Depends(get_db)):
40
  face_processor = FacialProcessing()
41
 
42
+ with tempfile.NamedTemporaryFile(delete=False) as temp_file:
43
+ temp_file.write(await file.read())
44
+ temp_file.flush()
45
+ image_path = temp_file.name
46
+
47
 
48
  embeddings = face_processor.extract_embeddings_vgg(image_path)
49
  if embeddings:
50
  user_embeddings = UserEmbeddingsBase(embeddings=embeddings)
51
  await create_user_embeddings(user.id, user_embeddings, db)
52
+
53
+ os.remove(image_path)
54
+
55
  return {"message": "Face embeddings created successfully"}
56
 
57
+ os.remove(image_path)
58
+
59
  raise HTTPException(status_code=400, detail="Failed to process face")
60
 
61
+ @router.get("/me/face/", status_code=status.HTTP_200_OK)
62
  async def get_face_embeddings(user: User = Depends(get_current_user), db: Session = Depends(get_db)):
63
  face = db.query(UserEmbeddingsBase).filter(UserEmbeddingsBase.user_id == user.id).first()
64
  if not face:
65
  raise HTTPException(status_code=404, detail="Face embeddings not found")
66
  return JSONResponse(content={"embeddings": face.embeddings}, status_code=status.HTTP_200_OK)
67
 
68
+ @router.put("/me/face/", status_code=status.HTTP_200_OK)
69
  async def update_face_embeddings(file: UploadFile = File(...), user: User = Depends(get_current_user), db: Session = Depends(get_db)):
70
  face_processor = FacialProcessing()
71
 
72
+ with tempfile.NamedTemporaryFile(delete=False) as temp_file:
73
+ temp_file.write(await file.read())
74
+ temp_file.flush()
75
+ image_path = temp_file.name
76
 
77
  embeddings = face_processor.extract_embeddings_vgg(image_path)
78
  if embeddings:
79
  user_embeddings = UserEmbeddingsBase(embeddings=embeddings)
80
  await update_user_embeddings(user.id, user_embeddings, db)
81
+
82
+ os.remove(image_path)
83
  return {"message": "Face embeddings updated successfully"}
84
 
85
+ os.remove(image_path)
86
  raise HTTPException(status_code=400, detail="Failed to process face")
87
 
88
+ @router.post("/login/face/")
89
  async def face_login(file: UploadFile = File(...), db: Session = Depends(get_db)):
90
  face_processor = FacialProcessing()
91
  face_matcher = FaceMatch(db)
92
 
93
+ with tempfile.NamedTemporaryFile(delete=False) as temp_file:
94
+ temp_file.write(await file.read())
95
+ temp_file.flush()
96
+ image_path = temp_file.name
97
 
98
  embeddings = await face_processor.extract_embeddings(image_path)
99
  if not embeddings:
100
+ os.remove(image_path)
101
  raise HTTPException(status_code=400, detail="Failed to process face")
102
 
103
  match_result = face_matcher.new_face_matching(embeddings)
104
  if match_result['status'] == 'Success':
105
  user = get_user_by_id(match_result['user_id'], db)
106
  if not user:
107
+ os.remove(image_path)
108
  raise HTTPException(status_code=404, detail="User not found")
109
 
110
  access_token_expires = timedelta(minutes=int(os.getenv("ACCESS_TOKEN_EXPIRE_MINUTES", "30")))
111
  payload = {"id": user.id, "sub": user.email}
112
  token = get_token(payload, db)
113
+
114
+ os.remove(image_path)
115
  return JSONResponse(content=token.dict(), status_code=status.HTTP_200_OK)
116
 
117
+ os.remove(image_path)
118
  raise HTTPException(status_code=401, detail="Face not recognized")