Spaces:
Runtime error
Runtime error
lucianotonet
commited on
Commit
•
690d40a
1
Parent(s):
18c3760
Aprimora processamento de imagens e validação de entrada
Browse filesAdiciona verificação para assegurar que pelo menos uma imagem é fornecida antes do processamento e simplifica a passagem das imagens como uma lista de listas. Isso melhora a robustez do código, garantindo um tratamento adequado de potenciais entradas vazias e reforçando a estrutura dos dados durante a inferência com o modelo. Além disso, melhora a legibilidade e manutenção do código.
app.py
CHANGED
@@ -18,18 +18,17 @@ processor = AutoProcessor.from_pretrained("Qwen/Qwen2-VL-2B-Instruct", min_pixel
|
|
18 |
def process_image(image_data: str) -> Image.Image:
|
19 |
if image_data.startswith("http://") or image_data.startswith("https://"):
|
20 |
response = requests.get(image_data)
|
21 |
-
response.raise_for_status()
|
22 |
img = Image.open(BytesIO(response.content))
|
23 |
elif image_data.startswith("data:image"):
|
24 |
img_data = base64.b64decode(image_data.split(",")[1])
|
25 |
img = Image.open(BytesIO(img_data))
|
26 |
-
else:
|
27 |
img = Image.open(image_data)
|
28 |
return img
|
29 |
|
30 |
@app.post("/predict")
|
31 |
async def predict(messages: List[Dict[str, Union[str, List[Dict[str, str]]]]] = Body(...)):
|
32 |
-
# Processamento e inferência
|
33 |
texts = []
|
34 |
image_inputs = []
|
35 |
video_inputs = []
|
@@ -51,15 +50,20 @@ async def predict(messages: List[Dict[str, Union[str, List[Dict[str, str]]]]] =
|
|
51 |
else:
|
52 |
raise ValueError(f"Formato inválido para o conteúdo: {content}")
|
53 |
|
|
|
|
|
|
|
|
|
|
|
54 |
inputs = processor(
|
55 |
text=texts,
|
56 |
-
images=image_inputs,
|
57 |
videos=video_inputs,
|
58 |
padding=True,
|
59 |
return_tensors="pt"
|
60 |
)
|
61 |
-
inputs = inputs.to("cpu")
|
62 |
-
|
63 |
generated_ids = model.generate(**inputs, max_new_tokens=128)
|
64 |
generated_ids_trimmed = [
|
65 |
out_ids[len(in_ids):] for in_ids, out_ids in zip(inputs.input_ids, generated_ids)
|
|
|
18 |
def process_image(image_data: str) -> Image.Image:
|
19 |
if image_data.startswith("http://") or image_data.startswith("https://"):
|
20 |
response = requests.get(image_data)
|
21 |
+
response.raise_for_status()
|
22 |
img = Image.open(BytesIO(response.content))
|
23 |
elif image_data.startswith("data:image"):
|
24 |
img_data = base64.b64decode(image_data.split(",")[1])
|
25 |
img = Image.open(BytesIO(img_data))
|
26 |
+
else:
|
27 |
img = Image.open(image_data)
|
28 |
return img
|
29 |
|
30 |
@app.post("/predict")
|
31 |
async def predict(messages: List[Dict[str, Union[str, List[Dict[str, str]]]]] = Body(...)):
|
|
|
32 |
texts = []
|
33 |
image_inputs = []
|
34 |
video_inputs = []
|
|
|
50 |
else:
|
51 |
raise ValueError(f"Formato inválido para o conteúdo: {content}")
|
52 |
|
53 |
+
if not image_inputs:
|
54 |
+
raise ValueError("Nenhuma imagem fornecida para processamento.")
|
55 |
+
|
56 |
+
print(f"Imagens processadas: {image_inputs}")
|
57 |
+
|
58 |
inputs = processor(
|
59 |
text=texts,
|
60 |
+
images=[image_inputs], # Passa as imagens como uma lista de listas
|
61 |
videos=video_inputs,
|
62 |
padding=True,
|
63 |
return_tensors="pt"
|
64 |
)
|
65 |
+
inputs = inputs.to("cpu")
|
66 |
+
|
67 |
generated_ids = model.generate(**inputs, max_new_tokens=128)
|
68 |
generated_ids_trimmed = [
|
69 |
out_ids[len(in_ids):] for in_ids, out_ids in zip(inputs.input_ids, generated_ids)
|