gnosticdev commited on
Commit
712e289
verified
1 Parent(s): 755c5e1

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +37 -12
app.py CHANGED
@@ -10,15 +10,22 @@ import gradio as gr
10
  from transformers import GPT2Tokenizer, GPT2LMHeadModel
11
  import torch
12
 
13
- from pexels_api import API
 
 
 
 
14
  from keybert import KeyBERT
15
 
 
16
  logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
17
  logger = logging.getLogger(__name__)
18
 
 
19
  PEXELS_API_KEY = os.environ.get("PEXELS_API_KEY")
20
- pexels_api = API(PEXELS_API_KEY)
21
 
 
22
  MODEL_NAME = "gpt2-small"
23
  try:
24
  tokenizer = GPT2Tokenizer.from_pretrained(MODEL_NAME)
@@ -31,6 +38,7 @@ except Exception as e:
31
  tokenizer = None
32
  model = None
33
 
 
34
  try:
35
  kw_model = KeyBERT('multi-qa-MiniLM-L6-cos-v1')
36
  logger.info("Modelo KeyBERT cargado exitosamente.")
@@ -38,6 +46,8 @@ except Exception as e:
38
  logger.error(f"Error al cargar el modelo KeyBERT: {e}. La b煤squeda de videos ser谩 menos precisa.", exc_info=True)
39
  kw_model = None
40
 
 
 
41
  def generate_script(prompt, max_length=250):
42
  if not tokenizer or not model:
43
  logger.error("Modelo GPT-2 no disponible para generar guion.")
@@ -151,6 +161,7 @@ def extract_visual_keywords_from_script(script_text, max_keywords_per_segment=2)
151
  logger.info(f"Palabras clave visuales extra铆das del guion: {list(all_keywords)}")
152
  return list(all_keywords)
153
 
 
154
  def search_pexels_videos(query_list, num_videos_per_query=5, min_duration_sec=7):
155
  if not PEXELS_API_KEY:
156
  logger.error("ERROR: PEXELS_API_KEY no est谩 configurada. No se pueden buscar videos en Pexels.")
@@ -165,32 +176,46 @@ def search_pexels_videos(query_list, num_videos_per_query=5, min_duration_sec=7)
165
  for query in query_list:
166
  logger.info(f"Buscando {num_videos_per_query} videos en Pexels para la query: '{query}'")
167
  try:
168
- pexels_api.search_videos(query, per_page=num_videos_per_query * 2)
169
- videos = pexels_api.get_videos()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
170
 
171
  if not videos:
172
  logger.info(f"No se encontraron videos en Pexels para la query: '{query}'")
173
  continue
174
 
175
  for video in videos:
176
- if video.get('duration') and video['duration'] < min_duration_sec:
177
- continue
178
-
179
  best_quality_url = None
180
- for file in video.get('video_files', []):
181
- if file.get('quality') in ['hd', 'sd', 'medium', 'large'] and file.get('link'):
 
 
 
182
  best_quality_url = file['link']
183
  break
184
- elif file.get('link'):
185
- best_quality_url = file['link']
186
 
187
  if best_quality_url:
188
  all_video_urls.add(best_quality_url)
189
  else:
190
  logger.warning(f"No se encontr贸 URL de descarga v谩lida para el video Pexels ID: {video.get('id')}")
191
 
 
 
192
  except Exception as e:
193
- logger.error(f"Error al buscar videos en Pexels para '{query}': {e}", exc_info=True)
194
 
195
  final_urls = list(all_video_urls)
196
  logger.info(f"Total de {len(final_urls)} URLs de video 煤nicas obtenidas de Pexels.")
 
10
  from transformers import GPT2Tokenizer, GPT2LMHeadModel
11
  import torch
12
 
13
+ # --- NO M脕S 'from pexels_api import API' ---
14
+ # Ahora Pexels se gestiona directamente con requests
15
+ # from pexels_api import API
16
+
17
+ # --- Importar KeyBERT para extracci贸n de palabras clave ---
18
  from keybert import KeyBERT
19
 
20
+ # --- Configuraci贸n de Logging ---
21
  logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
22
  logger = logging.getLogger(__name__)
23
 
24
+ # --- Clave API de Pexels ---
25
  PEXELS_API_KEY = os.environ.get("PEXELS_API_KEY")
26
+ # Ya no se inicializa pexels_api = API(PEXELS_API_KEY)
27
 
28
+ # --- Inicializaci贸n de Tokenizer y Modelo GPT-2 ---
29
  MODEL_NAME = "gpt2-small"
30
  try:
31
  tokenizer = GPT2Tokenizer.from_pretrained(MODEL_NAME)
 
38
  tokenizer = None
39
  model = None
40
 
41
+ # --- Inicializaci贸n del modelo KeyBERT ---
42
  try:
43
  kw_model = KeyBERT('multi-qa-MiniLM-L6-cos-v1')
44
  logger.info("Modelo KeyBERT cargado exitosamente.")
 
46
  logger.error(f"Error al cargar el modelo KeyBERT: {e}. La b煤squeda de videos ser谩 menos precisa.", exc_info=True)
47
  kw_model = None
48
 
49
+ # --- Funciones de Utilidad ---
50
+
51
  def generate_script(prompt, max_length=250):
52
  if not tokenizer or not model:
53
  logger.error("Modelo GPT-2 no disponible para generar guion.")
 
161
  logger.info(f"Palabras clave visuales extra铆das del guion: {list(all_keywords)}")
162
  return list(all_keywords)
163
 
164
+ # --- B煤squeda de videos en Pexels (AHORA CON REQUESTS DIRECTOS) ---
165
  def search_pexels_videos(query_list, num_videos_per_query=5, min_duration_sec=7):
166
  if not PEXELS_API_KEY:
167
  logger.error("ERROR: PEXELS_API_KEY no est谩 configurada. No se pueden buscar videos en Pexels.")
 
176
  for query in query_list:
177
  logger.info(f"Buscando {num_videos_per_query} videos en Pexels para la query: '{query}'")
178
  try:
179
+ # URL de la API de b煤squeda de Pexels
180
+ # https://www.pexels.com/api/documentation/#videos-search
181
+ api_url = "https://api.pexels.com/videos/search"
182
+ headers = {"Authorization": PEXELS_API_KEY}
183
+ params = {
184
+ "query": query,
185
+ "per_page": num_videos_per_query * 2, # Pedimos el doble por si algunos no cumplen duraci贸n
186
+ "orientation": "landscape", # Opcional: landscape, portrait, square
187
+ "min_duration": min_duration_sec
188
+ }
189
+
190
+ response = requests.get(api_url, headers=headers, params=params, timeout=15)
191
+ response.raise_for_status() # Lanza un error si la solicitud HTTP no fue exitosa (c贸digo 4xx o 5xx)
192
+
193
+ data = response.json()
194
+ videos = data.get('videos', [])
195
 
196
  if not videos:
197
  logger.info(f"No se encontraron videos en Pexels para la query: '{query}'")
198
  continue
199
 
200
  for video in videos:
 
 
 
201
  best_quality_url = None
202
+ # Ordenar por calidad para obtener la mejor disponible
203
+ video_files = sorted(video.get('video_files', []), key=lambda x: x.get('width', 0) * x.get('height', 0), reverse=True)
204
+
205
+ for file in video_files:
206
+ if file.get('link'):
207
  best_quality_url = file['link']
208
  break
 
 
209
 
210
  if best_quality_url:
211
  all_video_urls.add(best_quality_url)
212
  else:
213
  logger.warning(f"No se encontr贸 URL de descarga v谩lida para el video Pexels ID: {video.get('id')}")
214
 
215
+ except requests.exceptions.RequestException as e:
216
+ logger.error(f"Error de HTTP/red al buscar videos en Pexels para '{query}': {e}", exc_info=True)
217
  except Exception as e:
218
+ logger.error(f"Error inesperado al buscar videos en Pexels para '{query}': {e}", exc_info=True)
219
 
220
  final_urls = list(all_video_urls)
221
  logger.info(f"Total de {len(final_urls)} URLs de video 煤nicas obtenidas de Pexels.")