vinithius commited on
Commit
4086272
verified
1 Parent(s): 41a3f77

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +17 -10
app.py CHANGED
@@ -1,6 +1,7 @@
1
  import torch
2
  from torch import nn
3
- from transformers import AutoImageProcessor, AutoModel
 
4
  from PIL import Image
5
  import base64
6
  from io import BytesIO
@@ -9,11 +10,24 @@ from pydantic import BaseModel
9
 
10
  # Nome do modelo no Hugging Face Hub
11
  MODEL_NAME = "facebook/dinov2-small"
 
12
 
13
  # Carregando processador e modelo
14
- # Usamos a mesma l贸gica do seu script original que funciona
15
  processor = AutoImageProcessor.from_pretrained(MODEL_NAME)
16
- model = AutoModel.from_pretrained(MODEL_NAME)
 
 
 
 
 
 
 
 
 
 
 
 
17
 
18
  # Proje莽茫o para 512D
19
  projection = nn.Linear(model.config.hidden_size, 512)
@@ -33,16 +47,10 @@ class ImageRequest(BaseModel):
33
  @app.post("/embed")
34
  async def get_embedding(request: ImageRequest):
35
  try:
36
- # Extrai a string Base64 do formato "data:image/png;base64,..."
37
  header, img_base64 = request.image.split(",", 1)
38
-
39
- # Decodifica a string Base64
40
  image_data = base64.b64decode(img_base64)
41
-
42
- # Abre a imagem com Pillow
43
  image = Image.open(BytesIO(image_data))
44
 
45
- # --- L贸gica de Infer锚ncia do Seu Script Original ---
46
  inputs = processor(images=image, return_tensors="pt")
47
 
48
  with torch.no_grad():
@@ -51,7 +59,6 @@ async def get_embedding(request: ImageRequest):
51
  embedding = last_hidden_state[:, 0]
52
  embedding_512 = projection(embedding)
53
 
54
- # Converte para lista Python e retorna
55
  return {"embedding": embedding_512.squeeze().tolist()}
56
 
57
  except Exception as e:
 
1
  import torch
2
  from torch import nn
3
+ from transformers import AutoImageProcessor, Dinov2Model
4
+ from huggingface_hub import hf_hub_download
5
  from PIL import Image
6
  import base64
7
  from io import BytesIO
 
10
 
11
  # Nome do modelo no Hugging Face Hub
12
  MODEL_NAME = "facebook/dinov2-small"
13
+ MODEL_FILE = "pytorch_model.bin" # O nome do arquivo do modelo
14
 
15
  # Carregando processador e modelo
16
+ # Usamos o AutoImageProcessor, que funciona, e carregamos o modelo manualmente
17
  processor = AutoImageProcessor.from_pretrained(MODEL_NAME)
18
+
19
+ # Baixa o arquivo do modelo para o cache local
20
+ try:
21
+ model_path = hf_hub_download(repo_id=MODEL_NAME, filename=MODEL_FILE)
22
+
23
+ # Carrega o modelo com o estado do arquivo baixado
24
+ model = Dinov2Model.from_pretrained(model_path)
25
+ except Exception as e:
26
+ # Caso a primeira tentativa falhe (por ex., com Safetensors)
27
+ MODEL_FILE = "model.safetensors"
28
+ model_path = hf_hub_download(repo_id=MODEL_NAME, filename=MODEL_FILE)
29
+ model = Dinov2Model.from_pretrained(MODEL_NAME, state_dict=torch.load(model_path), use_safetensors=True)
30
+
31
 
32
  # Proje莽茫o para 512D
33
  projection = nn.Linear(model.config.hidden_size, 512)
 
47
  @app.post("/embed")
48
  async def get_embedding(request: ImageRequest):
49
  try:
 
50
  header, img_base64 = request.image.split(",", 1)
 
 
51
  image_data = base64.b64decode(img_base64)
 
 
52
  image = Image.open(BytesIO(image_data))
53
 
 
54
  inputs = processor(images=image, return_tensors="pt")
55
 
56
  with torch.no_grad():
 
59
  embedding = last_hidden_state[:, 0]
60
  embedding_512 = projection(embedding)
61
 
 
62
  return {"embedding": embedding_512.squeeze().tolist()}
63
 
64
  except Exception as e: