ksumhs commited on
Commit
7204a8e
·
verified ·
1 Parent(s): d1549d9

Upload 2 files

Browse files
Files changed (2) hide show
  1. app.py +41 -0
  2. requirements.txt +8 -0
app.py ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from fastapi import FastAPI, File, UploadFile
2
+ from fastapi.responses import Response
3
+ from retinaface import RetinaFace
4
+ from insightface.app import FaceAnalysis
5
+ from rembg import remove
6
+ from PIL import Image
7
+ import numpy as np
8
+ import io
9
+
10
+ app = FastAPI()
11
+
12
+ face_app = FaceAnalysis(name="buffalo_l", providers=["CPUExecutionProvider"])
13
+ face_app.prepare(ctx_id=0)
14
+
15
+ def resize_to_4x6(img):
16
+ return img.resize((472, 709), Image.LANCZOS)
17
+
18
+ @app.post("/process")
19
+ async def process_image(file: UploadFile = File(...)):
20
+ img_bytes = await file.read()
21
+ img = Image.open(io.BytesIO(img_bytes)).convert("RGB")
22
+ np_img = np.array(img)
23
+
24
+ faces = face_app.get(np_img)
25
+ if not faces:
26
+ return {"error": "No face detected"}
27
+ face = faces[0]
28
+ aligned = Image.fromarray(face.normed)
29
+
30
+ no_bg = remove(aligned)
31
+
32
+ white_bg = Image.new("RGB", no_bg.size, (255, 255, 255))
33
+ white_bg.paste(no_bg, mask=no_bg.split()[3])
34
+
35
+ final_img = resize_to_4x6(white_bg)
36
+
37
+ buffer = io.BytesIO()
38
+ final_img.save(buffer, format="JPEG")
39
+ buffer.seek(0)
40
+
41
+ return Response(buffer.getvalue(), media_type="image/jpeg")
requirements.txt ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ fastapi
2
+ uvicorn
3
+ Pillow
4
+ insightface
5
+ retinaface
6
+ rembg
7
+ numpy
8
+ python-multipart