ricardo238costa commited on
Commit
2a6c0a2
·
verified ·
1 Parent(s): 799ee9e

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +7 -42
main.py CHANGED
@@ -1,41 +1,30 @@
1
  from fastapi import FastAPI, UploadFile, File
2
  from fastapi.responses import FileResponse
3
- from starlette.middleware.base import BaseHTTPMiddleware
4
  import cv2
5
  import subprocess
6
  import uuid
7
  import os
8
- import shutil
9
- import tempfile
10
 
11
  app = FastAPI()
12
 
13
- os.umask(0o077)
14
-
15
  def detect_product_in_frame(frame):
16
  return (100, 50, 400, 400)
17
 
18
  @app.post("/process_video/")
19
  async def process_video(file: UploadFile = File(...)):
20
- temp_dir = tempfile.mkdtemp()
21
- input_filename = os.path.join(temp_dir, f"input_{uuid.uuid4()}.mp4")
22
- output_filename = os.path.join(temp_dir, f"output_{uuid.uuid4()}.mp4")
23
 
24
- try:
25
- with open(input_filename, "wb") as f:
26
- f.write(await file.read())
27
- except Exception as e:
28
- shutil.rmtree(temp_dir)
29
- return {"error": f"Erro ao salvar o vídeo de entrada: {str(e)}"}
30
 
31
  cap = cv2.VideoCapture(input_filename)
32
  success, frame = cap.read()
33
- cap.release()
34
  if not success:
35
- shutil.rmtree(temp_dir)
36
  return {"error": "Não foi possível ler o vídeo."}
37
 
38
  roi_box = detect_product_in_frame(frame)
 
39
 
40
  if roi_box:
41
  x, y, w, h = roi_box
@@ -46,33 +35,9 @@ async def process_video(file: UploadFile = File(...)):
46
  '-c:a', 'copy',
47
  output_filename
48
  ]
49
- try:
50
- result = subprocess.run(crop_cmd, check=True, capture_output=True, text=True)
51
- print("FFmpeg output:", result.stdout)
52
- print("FFmpeg error (if any):", result.stderr)
53
- except subprocess.CalledProcessError as e:
54
- shutil.rmtree(temp_dir)
55
- return {"error": f"Erro ao processar o vídeo com FFmpeg: {e.stderr}"}
56
 
57
  os.remove(input_filename)
58
-
59
- if os.path.exists(output_filename):
60
- response = FileResponse(output_filename, media_type="video/mp4", filename="cropped_video.mp4")
61
- response.headers["X-Delete-Dir"] = temp_dir
62
- return response
63
- else:
64
- shutil.rmtree(temp_dir)
65
- return {"error": "O arquivo de saída não foi gerado pelo FFmpeg."}
66
  else:
67
- shutil.rmtree(temp_dir)
68
  return {"error": "Não foi possível detectar o produto para realizar o crop."}
69
-
70
- class CleanupMiddleware(BaseHTTPMiddleware):
71
- async def dispatch(self, request, call_next):
72
- response = await call_next(request)
73
- temp_dir_to_delete = response.headers.get("X-Delete-Dir")
74
- if temp_dir_to_delete and os.path.exists(temp_dir_to_delete):
75
- shutil.rmtree(temp_dir_to_delete)
76
- return response
77
-
78
- app.add_middleware(CleanupMiddleware)
 
1
  from fastapi import FastAPI, UploadFile, File
2
  from fastapi.responses import FileResponse
 
3
  import cv2
4
  import subprocess
5
  import uuid
6
  import os
 
 
7
 
8
  app = FastAPI()
9
 
 
 
10
  def detect_product_in_frame(frame):
11
  return (100, 50, 400, 400)
12
 
13
  @app.post("/process_video/")
14
  async def process_video(file: UploadFile = File(...)):
15
+ input_filename = f"/tmp/input_{uuid.uuid4()}.mp4"
16
+ output_filename = f"/tmp/output_{uuid.uuid4()}.mp4"
 
17
 
18
+ with open(input_filename, "wb") as f:
19
+ f.write(await file.read())
 
 
 
 
20
 
21
  cap = cv2.VideoCapture(input_filename)
22
  success, frame = cap.read()
 
23
  if not success:
 
24
  return {"error": "Não foi possível ler o vídeo."}
25
 
26
  roi_box = detect_product_in_frame(frame)
27
+ cap.release()
28
 
29
  if roi_box:
30
  x, y, w, h = roi_box
 
35
  '-c:a', 'copy',
36
  output_filename
37
  ]
38
+ subprocess.run(crop_cmd)
 
 
 
 
 
 
39
 
40
  os.remove(input_filename)
41
+ return FileResponse(output_filename, media_type="video/mp4", filename="cropped_video.mp4")
 
 
 
 
 
 
 
42
  else:
 
43
  return {"error": "Não foi possível detectar o produto para realizar o crop."}