VeuReu commited on
Commit
8b6302b
·
verified ·
1 Parent(s): c01761a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +15 -4
app.py CHANGED
@@ -15,11 +15,19 @@ MODEL_ID = os.environ.get("MODEL_ID", "BSC-LT/salamandra-7b-vision")
15
  DTYPE = torch.float16 if torch.cuda.is_available() else torch.float32
16
  DEVICE = "cuda" if torch.cuda.is_available() else "cpu"
17
 
18
- mtcnn = MTCNN(image_size=160, margin=0, post_process=True, device=DEVICE)
19
- facenet = InceptionResnetV1(pretrained='vggface2').eval().to(DEVICE)
20
-
21
  _model = None
22
  _processor = None
 
 
 
 
 
 
 
 
 
 
 
23
 
24
 
25
  def _lazy_load() -> Tuple[LlavaOnevisionForConditionalGeneration, AutoProcessor]:
@@ -96,8 +104,10 @@ def describe_batch(images: List[Image.Image], context_json: str,
96
  return outputs
97
 
98
 
 
99
  def face_image_embedding(image: Image.Image) -> List[float] | None:
100
  try:
 
101
  # detectar y extraer cara
102
  face = mtcnn(image)
103
 
@@ -105,7 +115,8 @@ def face_image_embedding(image: Image.Image) -> List[float] | None:
105
  return None
106
 
107
  # FaceNet espera tensor shape (1,3,160,160)
108
- face = face.unsqueeze(0).to(DEVICE)
 
109
 
110
  # obtener embedding
111
  with torch.no_grad():
 
15
  DTYPE = torch.float16 if torch.cuda.is_available() else torch.float32
16
  DEVICE = "cuda" if torch.cuda.is_available() else "cpu"
17
 
 
 
 
18
  _model = None
19
  _processor = None
20
+ _mtcnn = None
21
+ _facenet = None
22
+
23
+
24
+ def _load_face_models() -> Tuple[MTCNN, InceptionResnetV1]:
25
+ global _mtcnn, _facenet
26
+ if _mtcnn is None or _facenet is None:
27
+ device = DEVICE if DEVICE == "cuda" and torch.cuda.is_available() else "cpu"
28
+ _mtcnn = MTCNN(image_size=160, margin=0, post_process=True, device=device)
29
+ _facenet = InceptionResnetV1(pretrained="vggface2").eval().to(device)
30
+ return _mtcnn, _facenet
31
 
32
 
33
  def _lazy_load() -> Tuple[LlavaOnevisionForConditionalGeneration, AutoProcessor]:
 
104
  return outputs
105
 
106
 
107
+ @spaces.GPU
108
  def face_image_embedding(image: Image.Image) -> List[float] | None:
109
  try:
110
+ mtcnn, facenet = _load_face_models()
111
  # detectar y extraer cara
112
  face = mtcnn(image)
113
 
 
115
  return None
116
 
117
  # FaceNet espera tensor shape (1,3,160,160)
118
+ device = DEVICE if DEVICE == "cuda" and torch.cuda.is_available() else "cpu"
119
+ face = face.unsqueeze(0).to(device)
120
 
121
  # obtener embedding
122
  with torch.no_grad():