brightlembo commited on
Commit
d63c5ba
·
verified ·
1 Parent(s): 7c9adee

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +39 -89
app.py CHANGED
@@ -4,15 +4,12 @@ from transformers import (
4
  BlipProcessor,
5
  BlipForQuestionAnswering,
6
  pipeline,
7
- AutoTokenizer
 
8
  )
9
- from modelscope.pipelines import pipeline as ms_pipeline
10
- from modelscope.outputs import OutputKeys
11
  from PIL import Image
12
  import os
13
  import logging
14
- import tempfile
15
- import moviepy.editor as mp
16
 
17
  logging.basicConfig(level=logging.INFO)
18
  logger = logging.getLogger(__name__)
@@ -20,7 +17,6 @@ logger = logging.getLogger(__name__)
20
  class MultimodalProcessor:
21
  def __init__(self):
22
  self.load_models()
23
- self.temp_dir = tempfile.mkdtemp()
24
 
25
  def load_models(self):
26
  """Charge les modèles avec gestion d'erreurs"""
@@ -29,43 +25,14 @@ class MultimodalProcessor:
29
  self.blip_processor = BlipProcessor.from_pretrained("Salesforce/blip-vqa-base")
30
  self.blip_model = BlipForQuestionAnswering.from_pretrained("Salesforce/blip-vqa-base")
31
  self.audio_transcriber = pipeline("automatic-speech-recognition",
32
- model="openai/whisper-base")
33
-
34
- # Initialisation du pipeline text-to-video ModelScope
35
- self.video_pipeline = ms_pipeline(
36
- 'text-to-video-synthesis',
37
- model='damo/text-to-video-synthesis',
38
- model_revision='v1.0.0'
39
- )
40
-
41
  logger.info("Modèles chargés avec succès")
42
  except Exception as e:
43
  logger.error(f"Erreur lors du chargement des modèles: {str(e)}")
44
  raise
45
 
46
- def transcribe_video(self, video_path):
47
- """Transcrit une vidéo en utilisant Whisper"""
48
- try:
49
- if video_path is None:
50
- return ""
51
-
52
- # Extraction de l'audio de la vidéo
53
- video = mp.VideoFileClip(video_path)
54
- audio_path = os.path.join(self.temp_dir, "temp_audio.wav")
55
- video.audio.write_audiofile(audio_path, logger=None)
56
-
57
- # Transcription avec Whisper
58
- transcription = self.audio_transcriber(audio_path)["text"]
59
-
60
- # Nettoyage
61
- os.remove(audio_path)
62
- video.close()
63
-
64
- return transcription
65
- except Exception as e:
66
- logger.error(f"Erreur lors de la transcription vidéo: {str(e)}")
67
- return "Erreur lors de la transcription vidéo."
68
-
69
  def analyze_image(self, image):
70
  """Analyse une image et retourne une description"""
71
  try:
@@ -108,62 +75,48 @@ class MultimodalProcessor:
108
  logger.error(f"Erreur lors de la transcription audio: {str(e)}")
109
  return "Erreur lors de la transcription audio."
110
 
111
- def generate_video(self, prompt):
112
- """Génère une vidéo à partir d'un prompt"""
113
  try:
114
  if not prompt:
115
- return None
116
-
117
- output_path = os.path.join(self.temp_dir, "generated_video.mp4")
118
- result = self.video_pipeline({
119
- 'text': prompt,
120
- 'output_path': output_path
121
- })
122
-
123
- if os.path.exists(output_path):
124
- return output_path
125
- else:
126
- raise Exception("La vidéo n'a pas été générée correctement")
127
-
128
  except Exception as e:
129
- logger.error(f"Erreur lors de la génération de vidéo: {str(e)}")
130
- return None
131
 
132
- def process_inputs(self, image, audio, video, text):
133
  """Traite les entrées multimodales"""
134
  try:
135
- combined_input = []
136
-
137
  # Analyse de l'image
138
- if image is not None:
139
- image_desc = self.analyze_image(image)
140
- combined_input.append(f"Visual description: {image_desc}")
141
 
142
  # Transcription audio
143
- if audio is not None:
144
- audio_text = self.transcribe_audio(audio)
145
- combined_input.append(f"Audio content: {audio_text}")
146
-
147
- # Transcription vidéo
148
- if video is not None:
149
- video_text = self.transcribe_video(video)
150
- combined_input.append(f"Video content: {video_text}")
151
-
152
- # Ajout du texte additionnel
153
  if text:
154
- combined_input.append(f"Additional context: {text}")
155
 
156
- # Création du prompt final
157
- final_prompt = " ".join(combined_input) if combined_input else "Empty scene"
158
-
159
- # Génération de la vidéo
160
- output_video = self.generate_video(final_prompt)
161
 
162
- return output_video, final_prompt
163
 
164
  except Exception as e:
165
  logger.error(f"Erreur lors du traitement des entrées: {str(e)}")
166
- return None, "Une erreur est survenue lors du traitement des entrées."
167
 
168
  def create_interface():
169
  """Crée l'interface Gradio"""
@@ -174,22 +127,19 @@ def create_interface():
174
  inputs=[
175
  gr.Image(type="pil", label="Télécharger une image"),
176
  gr.Audio(type="filepath", label="Télécharger un fichier audio"),
177
- gr.Video(label="Télécharger une vidéo"),
178
  gr.Textbox(label="Entrez du texte additionnel")
179
  ],
180
  outputs=[
181
- gr.Video(label="Vidéo générée"),
182
- gr.Textbox(label="Prompt généré")
183
  ],
184
- title="Générateur de Vidéo Multimodal",
185
  description="""
186
- Cette application combine vos entrées multimodales pour générer une vidéo :
187
- - Images : analyse et description
188
- - Audio : transcription
189
- - Vidéo : transcription
190
- - Texte : contexte additionnel
191
 
192
- Le résultat est une nouvelle vidéo générée à partir de la description combinée.
193
  """
194
  )
195
 
 
4
  BlipProcessor,
5
  BlipForQuestionAnswering,
6
  pipeline,
7
+ AutoTokenizer,
8
+ AutoModelForCausalLM
9
  )
 
 
10
  from PIL import Image
11
  import os
12
  import logging
 
 
13
 
14
  logging.basicConfig(level=logging.INFO)
15
  logger = logging.getLogger(__name__)
 
17
  class MultimodalProcessor:
18
  def __init__(self):
19
  self.load_models()
 
20
 
21
  def load_models(self):
22
  """Charge les modèles avec gestion d'erreurs"""
 
25
  self.blip_processor = BlipProcessor.from_pretrained("Salesforce/blip-vqa-base")
26
  self.blip_model = BlipForQuestionAnswering.from_pretrained("Salesforce/blip-vqa-base")
27
  self.audio_transcriber = pipeline("automatic-speech-recognition",
28
+ model="openai/whisper-small")
29
+ self.text_generator = pipeline("text-generation",
30
+ model="gpt2")
 
 
 
 
 
 
31
  logger.info("Modèles chargés avec succès")
32
  except Exception as e:
33
  logger.error(f"Erreur lors du chargement des modèles: {str(e)}")
34
  raise
35
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
  def analyze_image(self, image):
37
  """Analyse une image et retourne une description"""
38
  try:
 
75
  logger.error(f"Erreur lors de la transcription audio: {str(e)}")
76
  return "Erreur lors de la transcription audio."
77
 
78
+ def generate_text(self, prompt):
79
+ """Génère du texte à partir d'un prompt"""
80
  try:
81
  if not prompt:
82
+ return ""
83
+ response = self.text_generator(prompt,
84
+ max_length=200,
85
+ num_return_sequences=1)[0]["generated_text"]
86
+ return response
 
 
 
 
 
 
 
 
87
  except Exception as e:
88
+ logger.error(f"Erreur lors de la génération de texte: {str(e)}")
89
+ return "Erreur lors de la génération de texte."
90
 
91
+ def process_inputs(self, image, audio, text):
92
  """Traite les entrées multimodales"""
93
  try:
 
 
94
  # Analyse de l'image
95
+ image_description = self.analyze_image(image) if image is not None else ""
 
 
96
 
97
  # Transcription audio
98
+ audio_text = self.transcribe_audio(audio) if audio is not None else ""
99
+
100
+ # Combinaison des entrées
101
+ combined_input = ""
102
+ if image_description:
103
+ combined_input += f"Visual description: {image_description}\n"
104
+ if audio_text:
105
+ combined_input += f"Audio content: {audio_text}\n"
 
 
106
  if text:
107
+ combined_input += f"Additional context: {text}\n"
108
 
109
+ # Génération du prompt final
110
+ if combined_input:
111
+ final_prompt = self.generate_text(combined_input)
112
+ else:
113
+ final_prompt = "Aucune entrée fournie."
114
 
115
+ return final_prompt
116
 
117
  except Exception as e:
118
  logger.error(f"Erreur lors du traitement des entrées: {str(e)}")
119
+ return "Une erreur est survenue lors du traitement des entrées."
120
 
121
  def create_interface():
122
  """Crée l'interface Gradio"""
 
127
  inputs=[
128
  gr.Image(type="pil", label="Télécharger une image"),
129
  gr.Audio(type="filepath", label="Télécharger un fichier audio"),
 
130
  gr.Textbox(label="Entrez du texte additionnel")
131
  ],
132
  outputs=[
133
+ gr.Textbox(label="Description générée")
 
134
  ],
135
+ title="Analyseur de Contenu Multimodal",
136
  description="""
137
+ Cette application analyse vos contenus multimodaux :
138
+ - Images : génère une description détaillée
139
+ - Audio : transcrit le contenu
140
+ - Texte : enrichit la description
 
141
 
142
+ La sortie combine toutes ces informations en une description cohérente.
143
  """
144
  )
145