joao-dutra commited on
Commit
5d6f9ee
·
verified ·
1 Parent(s): 9b27772

teste recuperar imagens

Browse files
Files changed (1) hide show
  1. app.py +106 -1
app.py CHANGED
@@ -6,6 +6,43 @@ import numpy as np
6
  import cv2
7
  import base64
8
  import io
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
 
10
  app = FastAPI(title="Detector de Corrosão Branca")
11
 
@@ -90,6 +127,49 @@ def process_image_bytes(img_bytes: bytes):
90
  "corrosion_image": corrosion_b64,
91
  }
92
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
93
  @app.post("/analyze")
94
  async def analyze(file: UploadFile = File(...)):
95
  content = await file.read()
@@ -99,6 +179,31 @@ async def analyze(file: UploadFile = File(...)):
99
  raise HTTPException(status_code=400, detail=str(e))
100
  return JSONResponse(result)
101
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
102
  @app.get("/")
103
  def read_root():
104
- return {"status": "ok"}
 
 
6
  import cv2
7
  import base64
8
  import io
9
+ import os
10
+ import uuid
11
+ import boto3
12
+ from supabase import create_client, Client
13
+
14
+ # Variaveis de ambiente
15
+
16
+ # --- AWS S3 ---
17
+ AWS_ACCESS_KEY_ID = os.environ.get("AWS_ACCESS_KEY_ID")
18
+ AWS_SECRET_ACCESS_KEY = os.environ.get("AWS_SECRET_ACCESS_KEY")
19
+ AWS_S3_BUCKET_NAME = os.environ.get("AWS_S3_BUCKET_NAME")
20
+ AWS_S3_REGION = os.environ.get("AWS_S3_REGION")
21
+
22
+ # --- Supabase ---
23
+ SUPABASE_URL = os.environ.get("SUPABASE_URL")
24
+ SUPABASE_KEY = os.environ.get("SUPABASE_KEY")
25
+
26
+ # Supabase
27
+ try:
28
+ supabase: Client = create_client(SUPABASE_URL, SUPABASE_KEY)
29
+ print("Cliente Supabase inicializado com sucesso.")
30
+ except Exception as e:
31
+ print(f"ERRO ao inicializar Supabase: {e}")
32
+ raise
33
+
34
+ # S3 (boto3)
35
+ try:
36
+ s3_client = boto3.client(
37
+ 's3',
38
+ aws_access_key_id=AWS_ACCESS_KEY_ID,
39
+ aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
40
+ region_name=AWS_S3_REGION
41
+ )
42
+ print("Cliente S3 (boto3) inicializado com sucesso.")
43
+ except Exception as e:
44
+ print(f"ERRO ao inicializar S3: {e}")
45
+ raise
46
 
47
  app = FastAPI(title="Detector de Corrosão Branca")
48
 
 
127
  "corrosion_image": corrosion_b64,
128
  }
129
 
130
+ def image_link_gen(amostra_id: int) -> dict | None:
131
+ """
132
+ Busca uma amostra pelo ID no Supabase e gera URLs pré-assinadas para suas imagens.
133
+ Retorna um dicionário com os links ou None se a amostra não for encontrada.
134
+ """
135
+ print(f"\nBuscando amostra com ID: {amostra_id} no Supabase...")
136
+
137
+ # 1. Busca os dados da amostra no banco
138
+ response = supabase.from_("amostra").select("imagem_original, imagem_resultado").eq("id", amostra_id).single().execute()
139
+
140
+ amostra = response.data
141
+ if not amostra:
142
+ print(f"Amostra com ID {amostra_id} não encontrada.")
143
+ return None
144
+
145
+ print("Amostra encontrada. Gerando links temporários...")
146
+
147
+ # Pega as chaves S3 do resultado
148
+ s3_key_original = amostra.get("imagem_original")
149
+ s3_key_resultado = amostra.get("imagem_resultado")
150
+
151
+ links = {}
152
+
153
+ # 2. Gera URL pré-assinada para a imagem original
154
+ if s3_key_original:
155
+ url_original = s3_client.generate_presigned_url(
156
+ 'get_object',
157
+ Params={'Bucket': AWS_S3_BUCKET_NAME, 'Key': s3_key_original},
158
+ ExpiresIn=3600 # Link válido por 1 hora (3600 segundos)
159
+ )
160
+ links['original'] = url_original
161
+
162
+ # 3. Gera URL pré-assinada para a imagem de resultado (se existir)
163
+ if s3_key_resultado:
164
+ url_resultado = s3_client.generate_presigned_url(
165
+ 'get_object',
166
+ Params={'Bucket': AWS_S3_BUCKET_NAME, 'Key': s3_key_resultado},
167
+ ExpiresIn=3600
168
+ )
169
+ links['resultado'] = url_resultado
170
+
171
+ return links
172
+
173
  @app.post("/analyze")
174
  async def analyze(file: UploadFile = File(...)):
175
  content = await file.read()
 
179
  raise HTTPException(status_code=400, detail=str(e))
180
  return JSONResponse(result)
181
 
182
+ @app.get("/links/{amostra_id}")
183
+ async def get_link(amostra_id: int)
184
+ try:
185
+
186
+ links = image_link_gen(amostra_id)
187
+
188
+ if links is None:
189
+ raise HTTPException(
190
+ status_code=404,
191
+ detail=f"Amostra com ID {amostra_id} não encontrada."
192
+ )
193
+
194
+ return links
195
+
196
+ except Exception as e:
197
+
198
+ print(f"Erro inesperado ao processar ID {amostra_id}: {e}")
199
+
200
+ raise HTTPException(
201
+ status_code=500,
202
+ detail=f"Erro interno no servidor ao tentar buscar os links. {e}"
203
+ )
204
+
205
+
206
  @app.get("/")
207
  def read_root():
208
+ return {"status": "ok"}
209
+