|
from fastapi import FastAPI |
|
from pydantic import BaseModel, HttpUrl |
|
import requests |
|
import face_recognition |
|
import pickle |
|
import cv2 |
|
import pyrebase |
|
import os |
|
|
|
|
|
|
|
config = { |
|
"apiKey": "AIzaSyClnRJAnrJgAgkYjuYnlvu-CJ6Cxyklebo", |
|
"databaseURL": "https://console.firebase.google.com/project/socioverse-2025/database/socioverse-2025-default-rtdb/data/~2F", |
|
"authDomain": "socioverse-2025.firebaseapp.com", |
|
"projectId": "socioverse-2025", |
|
"storageBucket": "socioverse-2025.appspot.com", |
|
"messagingSenderId": "689574504641", |
|
"appId": "1:689574504641:web:a22f6a2fa343e4221acc40", |
|
"serviceAccount":"socioverse-2025-firebase-adminsdk-gcc6m-6bfb53e6d9.json" |
|
} |
|
|
|
firebase = pyrebase.initialize_app(config) |
|
storage = firebase.storage() |
|
|
|
|
|
storage.child().download("Faces/pkl/face_encodings.pkl","face_encodings.pkl") |
|
|
|
|
|
app = FastAPI() |
|
|
|
class ImgInput(BaseModel): |
|
image_url: HttpUrl |
|
|
|
class ImgOutput(BaseModel): |
|
label: str |
|
|
|
def recognize_face(image_url: HttpUrl) -> ImgOutput: |
|
|
|
response = requests.get(image_url) |
|
with open("examp.jpg", 'wb') as file: |
|
file.write(response.content) |
|
|
|
|
|
with open("face_encodings.pkl", "rb") as file: |
|
data = pickle.load(file) |
|
face_encodings = data["encodings"] |
|
labels = data["labels"] |
|
|
|
|
|
new_image = cv2.imread("examp.jpg") |
|
|
|
new_face_encoding = face_recognition.face_encodings(new_image) |
|
|
|
if len(new_face_encoding) == 0: |
|
print("No faces found in the new image.") |
|
else: |
|
|
|
results = face_recognition.compare_faces(face_encodings, new_face_encoding[0]) |
|
|
|
os.remove("examp.jpg") |
|
|
|
for i, result in enumerate(results): |
|
if result: |
|
return ImgOutput(label=labels[i]) |
|
|
|
return ImgOutput(label="unable to detect") |
|
|
|
|
|
|
|
@app.post('/') |
|
async def scoring_endpoint(item:ImgInput): |
|
result = recognize_face(item.image_url) |
|
return result |