LogicGoInfotechSpaces commited on
Commit
71692ad
·
1 Parent(s): 0e17006

Fix Docker build: Add build tools for insightface compilation and improve API endpoints

Browse files
Files changed (2) hide show
  1. Dockerfile +4 -1
  2. fastapi_app.py +40 -2
Dockerfile CHANGED
@@ -3,10 +3,13 @@ FROM python:3.10-slim
3
  ENV PYTHONDONTWRITEBYTECODE=1 \
4
  PYTHONUNBUFFERED=1
5
 
6
- # System deps for OpenCV/ffmpeg
7
  RUN apt-get update && apt-get install -y --no-install-recommends \
8
  ffmpeg \
9
  libgl1 \
 
 
 
10
  && rm -rf /var/lib/apt/lists/*
11
 
12
  WORKDIR /app
 
3
  ENV PYTHONDONTWRITEBYTECODE=1 \
4
  PYTHONUNBUFFERED=1
5
 
6
+ # System deps for OpenCV/ffmpeg and build tools for insightface
7
  RUN apt-get update && apt-get install -y --no-install-recommends \
8
  ffmpeg \
9
  libgl1 \
10
+ build-essential \
11
+ g++ \
12
+ make \
13
  && rm -rf /var/lib/apt/lists/*
14
 
15
  WORKDIR /app
fastapi_app.py CHANGED
@@ -9,6 +9,7 @@ from io import BytesIO
9
  import cv2
10
  import numpy as np
11
  from fastapi import BackgroundTasks, Depends, FastAPI, File, Form, Header, HTTPException, UploadFile
 
12
  from fastapi.responses import JSONResponse, StreamingResponse
13
 
14
  from SinglePhoto import FaceSwapper
@@ -18,7 +19,16 @@ logger = logging.getLogger(__name__)
18
 
19
  API_KEY = os.getenv("FACE_SWAP_API_KEY")
20
  face_swapper = FaceSwapper()
21
- app = FastAPI(title="FaceSwapAll API", version="1.0.0")
 
 
 
 
 
 
 
 
 
22
 
23
 
24
  def verify_api_key(x_api_key: str | None = Header(default=None)) -> None:
@@ -118,9 +128,37 @@ def swap_video_file(
118
  return output_video_path, workdir
119
 
120
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
121
  @app.get("/health")
122
  def health() -> JSONResponse:
123
- return JSONResponse({"status": "ok"})
 
 
 
 
 
124
 
125
 
126
  @app.post("/swap/photo")
 
9
  import cv2
10
  import numpy as np
11
  from fastapi import BackgroundTasks, Depends, FastAPI, File, Form, Header, HTTPException, UploadFile
12
+ from fastapi.middleware.cors import CORSMiddleware
13
  from fastapi.responses import JSONResponse, StreamingResponse
14
 
15
  from SinglePhoto import FaceSwapper
 
19
 
20
  API_KEY = os.getenv("FACE_SWAP_API_KEY")
21
  face_swapper = FaceSwapper()
22
+ app = FastAPI(title="FaceSwapAll API", version="1.0.0", docs_url="/docs", redoc_url="/redoc")
23
+
24
+ # Add CORS middleware
25
+ app.add_middleware(
26
+ CORSMiddleware,
27
+ allow_origins=["*"],
28
+ allow_credentials=True,
29
+ allow_methods=["*"],
30
+ allow_headers=["*"],
31
+ )
32
 
33
 
34
  def verify_api_key(x_api_key: str | None = Header(default=None)) -> None:
 
128
  return output_video_path, workdir
129
 
130
 
131
+ @app.get("/")
132
+ def root() -> JSONResponse:
133
+ """Root endpoint with API information."""
134
+ return JSONResponse({
135
+ "name": "FaceSwapAll API",
136
+ "version": "1.0.0",
137
+ "status": "running",
138
+ "endpoints": {
139
+ "health": "/health",
140
+ "docs": "/docs",
141
+ "photo_swap": "/swap/photo",
142
+ "video_swap": "/swap/video",
143
+ "photo_single_src_multi_dst": "/swap/photo/single-src-multi-dst",
144
+ "photo_multi_src_single_dst": "/swap/photo/multi-src-single-dst",
145
+ "photo_multi_src_multi_dst": "/swap/photo/multi-src-multi-dst",
146
+ "photo_custom_mapping": "/swap/photo/custom-mapping",
147
+ "video_all_faces": "/swap/video/all-faces",
148
+ "video_custom_mapping": "/swap/video/custom-mapping",
149
+ "video_single_src_multi_video": "/swap/video/single-src-multi-video"
150
+ }
151
+ })
152
+
153
+
154
  @app.get("/health")
155
  def health() -> JSONResponse:
156
+ """Health check endpoint."""
157
+ return JSONResponse({
158
+ "status": "ok",
159
+ "service": "FaceSwapAll API",
160
+ "version": "1.0.0"
161
+ })
162
 
163
 
164
  @app.post("/swap/photo")