DanLeBossDeESGI commited on
Commit
e5318fd
·
1 Parent(s): db56c55

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +19 -41
app.py CHANGED
@@ -7,7 +7,7 @@ import torch
7
  from diffusers import AudioLDMPipeline
8
  from transformers import AutoProcessor, ClapModel, BlipProcessor, BlipForConditionalGeneration
9
 
10
- # Vérifier si une carte GPU est disponible
11
  if torch.cuda.is_available():
12
  device = "cuda"
13
  torch_dtype = torch.float16
@@ -15,28 +15,28 @@ else:
15
  device = "cpu"
16
  torch_dtype = torch.float32
17
 
18
- # Charger le modèle AudioLDMPipeline
19
  repo_id = "cvssp/audioldm-m-full"
20
  pipe = AudioLDMPipeline.from_pretrained(repo_id, torch_dtype=torch_dtype).to(device)
21
  pipe.unet = torch.compile(pipe.unet)
22
 
23
- # Charger le modèle CLAP pour la similarité audio-texte
24
  clap_model = ClapModel.from_pretrained("sanchit-gandhi/clap-htsat-unfused-m-full").to(device)
25
  processor = AutoProcessor.from_pretrained("sanchit-gandhi/clap-htsat-unfused-m-full")
26
 
27
  generator = torch.Generator(device)
28
 
29
- # Charger le modèle Blip pour la description d'images
30
  image_caption_processor = BlipProcessor.from_pretrained("Salesforce/blip-image-captioning-base")
31
  image_caption_model = BlipForConditionalGeneration.from_pretrained("Salesforce/blip-image-captioning-base")
32
 
33
- # Configuration de l'application Streamlit
34
  st.set_page_config(
35
  page_title="Text to Media",
36
  page_icon="📷 🎵",
37
  )
38
 
39
- st.title("Générateur de Diaporama Vidéo avec Musique")
40
 
41
  # Sélectionnez les images
42
  uploaded_files = st.file_uploader("Sélectionnez des images (PNG, JPG, JPEG)", type=["png", "jpg", "jpeg"], accept_multiple_files=True)
@@ -65,12 +65,8 @@ if uploaded_files:
65
  except Exception as e:
66
  descriptions.append("Erreur lors de la génération de la légende")
67
 
68
- # Affichez les images avec leurs descriptions
69
- for i, image_path in enumerate(image_paths):
70
- st.image(image_path, caption=f"Description : {descriptions[i]}", use_column_width=True)
71
-
72
  # Créez une vidéo à partir des images
73
- st.header("Création d'une Diapositive Vidéo avec Musique")
74
 
75
  # Sélectionnez la durée d'affichage de chaque image avec une barre horizontale (en secondes)
76
  image_duration = st.slider("Sélectionnez la durée d'affichage de chaque image (en secondes)", 1, 10, 4)
@@ -82,9 +78,6 @@ if uploaded_files:
82
 
83
  final_clip = concatenate_videoclips(image_clips, method="compose")
84
 
85
- final_clip_path = os.path.join(temp_dir, "slideshow.mp4")
86
- final_clip.write_videofile(final_clip_path, codec='libx264', fps=frame_rate)
87
-
88
  # Générez de la musique à partir des descriptions
89
  st.header("Génération de Musique à partir des Descriptions")
90
 
@@ -94,41 +87,26 @@ if uploaded_files:
94
 
95
  # Configuration de la musique
96
  seed = st.number_input("Seed", value=45)
97
- duration = st.slider("Duration (seconds)", 2.5, 10.0, 5.0, 2.5)
98
- guidance_scale = st.slider("Guidance scale", 0.0, 4.0, 2.5, 0.5)
99
- n_candidates = st.slider("Number waveforms to generate", 1, 3, 3, 1)
100
-
101
- def score_waveforms(text, waveforms):
102
- inputs = processor(text=text, audios=list(waveforms), return_tensors="pt", padding=True)
103
- inputs = {key: inputs[key].to(device) for key in inputs}
104
- with torch.no_grad():
105
- logits_per_text = clap_model(**inputs).logits_per_text # il s'agit du score de similarité audio-texte
106
- probs = logits_per_text.softmax(dim=-1) # nous pouvons prendre le softmax pour obtenir les probabilités des étiquettes
107
- most_probable = torch.argmax(probs) # et maintenant sélectionner l'onde audio la plus probable
108
- waveform = waveforms[most_probable]
109
- return waveform
110
 
111
  if st.button("Générer de la musique"):
112
  waveforms = pipe(
113
  music_input,
114
- audio_length_in_s=duration,
115
- guidance_scale=guidance_scale,
116
  num_inference_steps=100,
117
- num_waveforms_per_prompt=n_candidates if n_candidates else 1,
118
  generator=generator.manual_seed(int(seed)),
119
  )["audios"]
120
 
121
- if waveforms.shape[0] > 1:
122
- waveform = score_waveforms(music_input, waveforms)
 
123
  else:
124
- waveform = waveforms[0]
125
-
126
- # Intégrer la musique dans la vidéo
127
- final_clip = final_clip.set_audio(waveform)
128
 
129
- # Afficher la vidéo mise à jour avec la musique
130
- st.header("Vidéo avec Musique Générée")
131
- video_with_music_path = os.path.join(temp_dir, "slideshow_with_music.mp4")
132
- final_clip.write_videofile(video_with_music_path, codec='libx264', fps=frame_rate)
133
 
134
- st.video(open(video_with_music_path, 'rb').read())
 
 
7
  from diffusers import AudioLDMPipeline
8
  from transformers import AutoProcessor, ClapModel, BlipProcessor, BlipForConditionalGeneration
9
 
10
+ # make Space compatible with CPU duplicates
11
  if torch.cuda.is_available():
12
  device = "cuda"
13
  torch_dtype = torch.float16
 
15
  device = "cpu"
16
  torch_dtype = torch.float32
17
 
18
+ # load the diffusers pipeline
19
  repo_id = "cvssp/audioldm-m-full"
20
  pipe = AudioLDMPipeline.from_pretrained(repo_id, torch_dtype=torch_dtype).to(device)
21
  pipe.unet = torch.compile(pipe.unet)
22
 
23
+ # CLAP model (only required for automatic scoring)
24
  clap_model = ClapModel.from_pretrained("sanchit-gandhi/clap-htsat-unfused-m-full").to(device)
25
  processor = AutoProcessor.from_pretrained("sanchit-gandhi/clap-htsat-unfused-m-full")
26
 
27
  generator = torch.Generator(device)
28
 
29
+ # Charger le modèle et le processeur Blip pour la description d'images
30
  image_caption_processor = BlipProcessor.from_pretrained("Salesforce/blip-image-captioning-base")
31
  image_caption_model = BlipForConditionalGeneration.from_pretrained("Salesforce/blip-image-captioning-base")
32
 
33
+ # Streamlit app setup
34
  st.set_page_config(
35
  page_title="Text to Media",
36
  page_icon="📷 🎵",
37
  )
38
 
39
+ st.title("Générateur de Diaporama Vidéo et Musique")
40
 
41
  # Sélectionnez les images
42
  uploaded_files = st.file_uploader("Sélectionnez des images (PNG, JPG, JPEG)", type=["png", "jpg", "jpeg"], accept_multiple_files=True)
 
65
  except Exception as e:
66
  descriptions.append("Erreur lors de la génération de la légende")
67
 
 
 
 
 
68
  # Créez une vidéo à partir des images
69
+ st.header("Création d'une Diapositive Vidéo")
70
 
71
  # Sélectionnez la durée d'affichage de chaque image avec une barre horizontale (en secondes)
72
  image_duration = st.slider("Sélectionnez la durée d'affichage de chaque image (en secondes)", 1, 10, 4)
 
78
 
79
  final_clip = concatenate_videoclips(image_clips, method="compose")
80
 
 
 
 
81
  # Générez de la musique à partir des descriptions
82
  st.header("Génération de Musique à partir des Descriptions")
83
 
 
87
 
88
  # Configuration de la musique
89
  seed = st.number_input("Seed", value=45)
90
+ music_duration = image_duration * len(image_clips) # Assurez-vous que la durée de la musique correspond à la vidéo
 
 
 
 
 
 
 
 
 
 
 
 
91
 
92
  if st.button("Générer de la musique"):
93
  waveforms = pipe(
94
  music_input,
95
+ audio_length_in_s=music_duration,
96
+ guidance_scale=2.5, # Vous pouvez ajuster cette valeur
97
  num_inference_steps=100,
98
+ num_waveforms_per_prompt=1,
99
  generator=generator.manual_seed(int(seed)),
100
  )["audios"]
101
 
102
+ # Assurez-vous que la musique générée a la même durée que la vidéo
103
+ if len(waveforms[0]) > len(final_clip):
104
+ waveforms = waveforms[:, :len(final_clip)]
105
  else:
106
+ final_clip = final_clip.set_duration(len(waveforms[0]))
 
 
 
107
 
108
+ # Intégrez la musique dans la vidéo
109
+ final_clip = final_clip.set_audio(waveforms[0].numpy())
 
 
110
 
111
+ # Affichez la vidéo avec la musique intégrée
112
+ st.video(final_clip, format="video/mp4", start_time=0)