-
Notifications
You must be signed in to change notification settings - Fork 52
Expand file tree
/
Copy pathuser_service.py
More file actions
52 lines (38 loc) · 1.4 KB
/
user_service.py
File metadata and controls
52 lines (38 loc) · 1.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
from datetime import datetime
import cv2
import numpy as np
from app.face.face_db import load_db, save_db, save_user
from app.face.face_embedding import extract_embedding, verify_embedding
def register_user(user_id: str, image_bytes: bytes) -> dict:
"""이미지와 ID로 회원 등록"""
image_np = np.frombuffer(image_bytes, dtype=np.uint8)
image = cv2.imdecode(image_np, cv2.IMREAD_COLOR)
embedding = extract_embedding(image)
save_user(user_id, embedding)
return {"user_id": user_id, "registered_at": str(datetime.now())}
def authenticate_user(image_bytes: bytes):
"""이미지로 회원 인증"""
image_np = np.frombuffer(image_bytes, dtype=np.uint8)
image = cv2.imdecode(image_np, cv2.IMREAD_COLOR)
db = load_db()
embedding_to_check = extract_embedding(image)
for user_id, data in db.items():
if verify_embedding(data["embedding"], embedding_to_check):
return user_id
return None # 인증 실패
def get_user(user_id):
"""user_id로 회원 정보 조회"""
db = load_db()
user_data = db.get(user_id)
if user_data:
return {"user_id": user_id, "registered_at": user_data["registered_at"]}
else:
return None # 사용자 없음
def delete_user(user_id):
"""user_id로 회원 삭제"""
db = load_db()
if user_id in db:
del db[user_id]
save_db(db)
return True
return False