from fastapi import FastAPI ,Request ,Form, UploadFile, File from fastapi.responses import HTMLResponse, FileResponse,StreamingResponse,JSONResponse import os import io from PIL import ImageOps,Image ,ImageFilter #from transformers import pipeline import matplotlib.pyplot as plt import numpy as np import ast from server import * import cv2 from typing import Optional import base64 #http://localhost:8000 app = FastAPI() # Root route @app.get('/') def main(): return "Hello From Background remover !" @app.post('/imageStep1') async def image_step1(image_file: UploadFile = File(...),background_image: Optional [UploadFile] = File(None),type_of_filters: str = Form(...), blur_radius: str = Form(...)): #return {"type ":type_of_filters ,"radius":blur_radius,"image":image_file,"back":background_image} #type_of_filters : cam / ...remove / ...back input_to_type_of_filters = None if background_image and background_image.filename: contents__back = await background_image.read() image_back = Image.open(io.BytesIO(contents__back)) input_to_type_of_filters = image_back else: input_to_type_of_filters = type_of_filters contents_img = await image_file.read() image = Image.open(io.BytesIO(contents_img)) output_step1=SegmenterBackground().Back_step1(image,input_to_type_of_filters,int(blur_radius)) produced_image=output_step1[0] ''' # Save the processed image to a temporary file #output_file_path_tmp = "/tmp/tmp_processed_image.png" #produced_image.save(output_file_path_tmp) # return FileResponse(output_file_path_tmp, media_type='image/png', filename="/tmp/tmp_processed_image.png") ''' # Convert the image to base64 to return it in the response buffered = io.BytesIO() produced_image.save(buffered, format="PNG") encoded_img = base64.b64encode(buffered.getvalue()).decode("utf-8") # Returning both text and the base64 image return { "message": output_step1[1], "image_base64": encoded_img } @app.post('/imageStep2') async def image_step2(image_file: UploadFile = File(...),background_image: Optional [UploadFile] = File(None),type_of_filters: str = Form(...), things_replace: str = Form(...), blur_radius: str = Form(...)): #things_replace : from what detected. things_replace=ast.literal_eval(things_replace) blur_radius=int(blur_radius) input_to_type_of_filters=None if background_image and background_image.filename: contents__back = await background_image.read() image_back = Image.open(io.BytesIO(contents__back)) input_to_type_of_filters = image_back else: input_to_type_of_filters = type_of_filters contents = await image_file.read() image = Image.open(io.BytesIO(contents)) produced_image=SegmenterBackground().Back_step2(image,input_to_type_of_filters,things_replace,int(blur_radius)) # Save the processed image to a temporary file output_file_path_tmp = "/tmp/tmp_processed_image.png" produced_image.save(output_file_path_tmp) # Return the processed image for download return FileResponse(output_file_path_tmp, media_type='image/png', filename="/tmp/tmp_processed_image.png") @app.post('/Video') async def Video(video_file: UploadFile = File(...),background_image: Optional [UploadFile] = File(None),kind_back: str = Form(...) ,type_of_filters: str = Form(...),blur_radius: str = Form(...)):#--->,background_image: UploadFile = File(...)): #video_data = await video_file.read() #nparr = np.frombuffer(video_data, np.uint8) #video_path=cv2.imdecode(nparr, cv2.IMREAD_COLOR) #named this as just passed as it's path blur_radius=int(blur_radius) kind_back=ast.literal_eval(kind_back) input_to_type_of_filters=None if background_image and background_image.filename: contents__back = await background_image.read() image_back = Image.open(io.BytesIO(contents__back)) input_to_type_of_filters = image_back else: input_to_type_of_filters = type_of_filters input_path_toWrite = f'/tmp/tmp_imput.avi'#{video_file.filename} output_path = '/tmp/tmp_output.avi' with open(input_path_toWrite, 'wb') as f: f.write(await video_file.read()) #--------> mp4? (when tried ,worked on it although) sound?? SegmenterBackground().Back_video(input_path_toWrite, output_path,input_to_type_of_filters,kind_back,blur_radius)#video,background_image,what_remove,blur_radius=23) return StreamingResponse(open(output_path, "rb"), media_type="video/avi")