File size: 2,454 Bytes
6d73052
fef8a16
 
928495f
f15562f
 
 
7468932
 
5e0990b
7468932
 
 
 
 
 
 
fef8a16
 
bb3359e
 
928495f
 
 
 
 
 
 
 
7468932
743fc77
f15562f
 
 
 
 
 
 
bb3359e
 
 
 
 
 
 
928495f
f15562f
 
 
7468932
 
 
928495f
 
 
f15562f
5e0990b
7468932
 
 
 
5e0990b
 
 
 
 
 
 
 
 
 
 
7468932
5e0990b
7468932
5e0990b
928495f
bb3359e
 
 
7468932
 
 
 
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
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)