PoCInnovation / main.py
pierrelissope
feat: c'est carré on a fini
5e0990b
raw
history blame
2.45 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 os
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)
with open("id_card_image.png", "wb") as id_card_file:
id_card_file.write(binary_data1) # Save as PNG (or use correct extension based on header)
with open("profile_image.png", "wb") as profile_file:
profile_file.write(binary_data2) # Save as PNG (or use correct extension based on header)
id_card_abs_path = os.path.abspath("id_card_image.png")
profile_image_abs_path = os.path.abspath("profile_image.png")
output = face_compare.compare_faces(id_card_abs_path, profile_image_abs_path)
if output > 0.6:
return {"message": "Valid"}
else:
return {"message": "Not Valid"}
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)