DanLeBossDeESGI commited on
Commit
e056e32
·
1 Parent(s): d86a2ac

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +45 -38
app.py CHANGED
@@ -41,9 +41,6 @@ st.title("Générateur de Diaporama Vidéo et Musique")
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)
43
 
44
- # Sélection de la durée d'affichage de chaque image avec une barre horizontale (en secondes)
45
- image_duration = st.slider("Durée de chaque image (en secondes)", 1, 10, 4)
46
-
47
  if uploaded_files:
48
  # Créez un répertoire temporaire pour stocker les images
49
  temp_dir = tempfile.mkdtemp()
@@ -68,17 +65,28 @@ if uploaded_files:
68
  except Exception as e:
69
  descriptions.append("Erreur lors de la génération de la légende")
70
 
71
- # Créez une diapositive vidéo à partir des images
72
- st.header("Diaporama Vidéo")
73
-
74
- st.write("Création de la diapositive vidéo en cours...")
75
- image_clips = [ImageSequenceClip([image_path], fps=1/image_duration, durations=[image_duration]) for image_path in image_paths]
 
 
 
 
 
 
 
 
 
 
76
  final_clip = concatenate_videoclips(image_clips, method="compose")
77
- video_path = os.path.join(temp_dir, "slideshow.mp4")
78
- final_clip.write_videofile(video_path, codec='libx264', fps=1/image_duration)
 
79
 
80
  # Afficher la vidéo
81
- st.video(open(video_path, 'rb').read())
82
 
83
  # Générez de la musique à partir des descriptions
84
  st.header("Génération de Musique à partir des Descriptions")
@@ -94,30 +102,29 @@ if uploaded_files:
94
  n_candidates = st.slider("Number waveforms to generate", 1, 3, 3, 1)
95
 
96
  def score_waveforms(text, waveforms):
97
- inputs = processor(text=text, audios=list(waveforms), return_tensors="pt", padding=True)
98
- inputs = {key: inputs[key].to(device) for key in inputs}
99
- with torch.no_grad():
100
- logits_per_text = clap_model(**inputs).logits_per_text # this is the audio-text similarity score
101
- probs = logits_per_text.softmax(dim=-1) # we can take the softmax to get the label probabilities
102
- most_probable = torch.argmax(probs) # and now select the most likely audio waveform
103
- waveform = waveforms[most_probable]
104
- return waveform
105
-
106
- if st.button("Générer de la musique"):
107
- waveforms = pipe(
108
- music_input,
109
- audio_length_in_s=duration,
110
- guidance_scale=guidance_scale,
111
- num_inference_steps=100,
112
- num_waveforms_per_prompt=n_candidates if n_candidates else 1,
113
- generator=generator.manual_seed(int(seed)),
114
- )["audios"]
115
-
116
- if waveforms.shape[0] > 1:
117
- waveform = score_waveforms(music_input, waveforms)
118
- else:
119
- waveform = waveforms[0]
120
-
121
- # Afficher le lecteur audio
122
- st.audio(waveform, format="audio/wav", sample_rate=16000)
123
-
 
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)
43
 
 
 
 
44
  if uploaded_files:
45
  # Créez un répertoire temporaire pour stocker les images
46
  temp_dir = tempfile.mkdtemp()
 
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")
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)
77
+
78
+ # Débit d'images par seconde (calculé en fonction de la durée de chaque image)
79
+ frame_rate = 1 / image_duration
80
+
81
+ image_clips = [ImageSequenceClip([image_path], fps=frame_rate, durations=[image_duration]) for image_path in image_paths]
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
  # Afficher la vidéo
89
+ st.video(open(final_clip_path, 'rb').read())
90
 
91
  # Générez de la musique à partir des descriptions
92
  st.header("Génération de Musique à partir des Descriptions")
 
102
  n_candidates = st.slider("Number waveforms to generate", 1, 3, 3, 1)
103
 
104
  def score_waveforms(text, waveforms):
105
+ inputs = processor(text=text, audios=list(waveforms), return_tensors="pt", padding=True)
106
+ inputs = {key: inputs[key].to(device) for key in inputs}
107
+ with torch.no_grad():
108
+ logits_per_text = clap_model(**inputs).logits_per_text # this is the audio-text similarity score
109
+ probs = logits_per_text.softmax(dim=-1) # we can take the softmax to get the label probabilities
110
+ most_probable = torch.argmax(probs) # and now select the most likely audio waveform
111
+ waveform = waveforms[most_probable]
112
+ return waveform
113
+
114
+ if st.button("Générer de la musique"):
115
+ waveforms = pipe(
116
+ music_input,
117
+ audio_length_in_s=duration,
118
+ guidance_scale=guidance_scale,
119
+ num_inference_steps=100,
120
+ num_waveforms_per_prompt=n_candidates if n_candidates else 1,
121
+ generator=generator.manual_seed(int(seed)),
122
+ )["audios"]
123
+
124
+ if waveforms.shape[0] > 1:
125
+ waveform = score_waveforms(music_input, waveforms)
126
+ else:
127
+ waveform = waveforms[0]
128
+
129
+ # Afficher le lecteur audio
130
+ st.audio(waveform, format="audio/wav", sample_rate=16000)