PoCInnovation / main.py
Valentin Peron
feat(face_compare): Add face comparison functionality (NO FHE)
7468932
raw
history blame
2.03 kB
from fastapi import FastAPI, APIRouter
from fastapi.staticfiles import StaticFiles
from starlette.responses import FileResponse
from fastapi.middleware.cors import CORSMiddleware
import base64
from pydantic import BaseModel
import time
from facenet_pytorch import InceptionResnetV1, MTCNN
import warnings
import face_compare
warnings.filterwarnings('ignore', category=FutureWarning, module='facenet_pytorch')
mtcnn = MTCNN(keep_all=False, device='cpu')
model = InceptionResnetV1(pretrained='vggface2').eval()
app = FastAPI()
router = APIRouter()
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
pdf = 0
class ImageData(BaseModel):
image: str
class ImagesData(BaseModel):
idCard: str
profileImage: str
@router.get("/")
async def index() -> FileResponse:
return FileResponse(path="front/dist/index.html", media_type="text/html")
@router.get("/verification")
async def verif() -> FileResponse:
return FileResponse(path="front/dist/index.html", media_type="text/html")
@router.post("/uploadpdf")
async def upload_pdf(data: ImageData):
header, encoded = data.image.split(',', 1)
binary_data = base64.b64decode(encoded)
# Save the pdf
pdf = binary_data
return {"message": "Image reçue et sauvegardée"}
@router.post("/uploadids")
async def upload_ids(data: ImagesData):
header, encoded1 = data.idCard.split(',', 1)
binary_data1 = base64.b64decode(encoded1)
header, encoded2 = data.profileImage.split(',', 1)
binary_data2 = base64.b64decode(encoded2)
output = face_compare.compare_faces(binary_data1, binary_data2)
if output > 0.6:
return {"message": "Les images correspondent"}
else:
return {"message": "Les images ne correspondent pas"}
app.include_router(router)
app.mount("/", StaticFiles(directory="front/dist", html=True), name="static")
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)