Spaces:
Running
Running
import sys | |
from pathlib import Path | |
sys.path.append(str(Path(__file__).resolve().parent.parent)) | |
#print(sys.path) | |
from typing import Any | |
from fastapi import FastAPI, Request, APIRouter, File, UploadFile | |
from fastapi.staticfiles import StaticFiles | |
from fastapi.templating import Jinja2Templates | |
from fastapi.middleware.cors import CORSMiddleware | |
from app.config import settings | |
from app import __version__ | |
from app.Hackathon_setup import face_recognition, exp_recognition | |
import numpy as np | |
from PIL import Image | |
app = FastAPI( | |
title=settings.PROJECT_NAME, openapi_url=f"{settings.API_V1_STR}/openapi.json" | |
) | |
# To store files uploaded by users | |
app.mount("/static", StaticFiles(directory="app/static"), name="static") | |
# To access Templates directory | |
templates = Jinja2Templates(directory="app/templates") | |
simi_filename1 = None | |
simi_filename2 = None | |
face_rec_filename = None | |
expr_rec_filename = None | |
#################################### Home Page endpoints ################################################# | |
async def root(request: Request): | |
return templates.TemplateResponse("index.html", {'request': request,}) | |
#################################### Face Similarity endpoints ################################################# | |
async def similarity_root(request: Request): | |
return templates.TemplateResponse("similarity.html", {'request': request,}) | |
async def create_upload_files(request: Request, file1: UploadFile = File(...), file2: UploadFile = File(...)): | |
global simi_filename1 | |
global simi_filename2 | |
if 'image' in file1.content_type: | |
contents = await file1.read() | |
simi_filename1 = 'app/static/' + file1.filename | |
with open(simi_filename1, 'wb') as f: | |
f.write(contents) | |
if 'image' in file2.content_type: | |
contents = await file2.read() | |
simi_filename2 = 'app/static/' + file2.filename | |
with open(simi_filename2, 'wb') as f: | |
f.write(contents) | |
img1 = Image.open(simi_filename1) | |
img1 = np.array(img1).reshape(img1.size[1], img1.size[0], 3).astype(np.uint8) | |
img2 = Image.open(simi_filename2) | |
img2 = np.array(img2).reshape(img2.size[1], img2.size[0], 3).astype(np.uint8) | |
result = face_recognition.get_similarity(img1, img2) | |
#print(result) | |
return templates.TemplateResponse("predict_similarity.html", {"request": request, | |
"result": np.round(result, 3), | |
"simi_filename1": '../static/'+file1.filename, | |
"simi_filename2": '../static/'+file2.filename,}) | |
#################################### Face Recognition endpoints ################################################# | |
async def face_recognition_root(request: Request): | |
return templates.TemplateResponse("face_recognition.html", {'request': request,}) | |
async def create_upload_files(request: Request, file3: UploadFile = File(...)): | |
global face_rec_filename | |
if 'image' in file3.content_type: | |
contents = await file3.read() | |
face_rec_filename = 'app/static/' + file3.filename | |
with open(face_rec_filename, 'wb') as f: | |
f.write(contents) | |
img1 = Image.open(face_rec_filename) | |
img1 = np.array(img1).reshape(img1.size[1], img1.size[0], 3).astype(np.uint8) | |
result = face_recognition.get_face_class(img1) | |
print(result) | |
return templates.TemplateResponse("predict_face_recognition.html", {"request": request, | |
"result": result, | |
"face_rec_filename": '../static/'+file3.filename,}) | |
#################################### Expresion Recognition endpoints ################################################# | |
async def expr_recognition_root(request: Request): | |
return templates.TemplateResponse("expr_recognition.html", {'request': request,}) | |
async def create_upload_files(request: Request, file4: UploadFile = File(...)): | |
global expr_rec_filename | |
if 'image' in file4.content_type: | |
contents = await file4.read() | |
expr_rec_filename = 'app/static/' + file4.filename | |
with open(expr_rec_filename, 'wb') as f: | |
f.write(contents) | |
img1 = Image.open(expr_rec_filename) | |
img1 = np.array(img1).reshape(img1.size[1], img1.size[0], 3).astype(np.uint8) | |
result = exp_recognition.get_expression(img1) | |
print(result) | |
return templates.TemplateResponse("predict_expr_recognition.html", {"request": request, | |
"result": result, | |
"expr_rec_filename": '../static/'+file4.filename,}) | |
# Set all CORS enabled origins | |
if settings.BACKEND_CORS_ORIGINS: | |
app.add_middleware( | |
CORSMiddleware, | |
allow_origins=[str(origin) for origin in settings.BACKEND_CORS_ORIGINS], | |
allow_credentials=True, | |
allow_methods=["*"], | |
allow_headers=["*"], | |
) | |
# Start app | |
if __name__ == "__main__": | |
import uvicorn | |
uvicorn.run(app, host="0.0.0.0", port=8001) | |