m-crop / main.py
ricardo238costa's picture
Update main.py
909ee2d verified
from fastapi import FastAPI, UploadFile, File
from fastapi.responses import FileResponse
import cv2
import subprocess
import uuid
import os
app = FastAPI()
os.umask(0o077)
def detect_product_in_frame(frame):
return (100, 50, 400, 400)
@app.post("/process_video/")
async def process_video(file: UploadFile = File(...)):
input_filename = f"/tmp/input_{uuid.uuid4()}.mp4"
output_filename = f"/tmp/output_{uuid.uuid4()}.mp4"
with open(input_filename, "wb") as f:
f.write(await file.read())
cap = cv2.VideoCapture(input_filename)
success, frame = cap.read()
if not success:
return {"error": "Não foi possível ler o vídeo."}
roi_box = detect_product_in_frame(frame)
cap.release()
if roi_box:
x, y, w, h = roi_box
crop_cmd = [
'ffmpeg',
'-i', input_filename,
'-vf', f"crop={w}:{h}:{x}:{y}",
'-c:a', 'copy',
output_filename
]
subprocess.run(crop_cmd)
os.remove(input_filename)
return FileResponse(output_filename, media_type="video/mp4", filename="cropped_video.mp4")
else:
return {"error": "Não foi possível detectar o produto para realizar o crop."}