# import gradio as gr # import google.generativeai as genai # genai.configure(api_key="AIzaSyBPQF0g5EfEPzEiGRzA3iNzJZK4jDukMvE") # model = genai.GenerativeModel('gemini-pro') # def generate_summary_and_quiz(transcript, num_questions): # """Generate a summary and quiz questions based on the video transcript.""" # prompt = f""" # Based on the following video lecture transcript, please provide: # 1. A concise summary of the main points (about 100 words) # 2. {num_questions} multiple-choice quiz questions to test understanding of key concepts # Transcript: # {transcript} # Format your response as follows: # Summary: # [Your summary here] # Quiz Questions: # 1. [Question] # a) [Option A] # b) [Option B] # c) [Option C] # d) [Option D] # Correct Answer: [Correct option letter] # 2. [Next question and options...] # Ensure the questions cover different aspects of the lecture and vary in difficulty. # """ # try: # response = model.generate_content(prompt) # return response.text # except Exception as e: # return f"Error generating summary and quiz: {str(e)}" # def process_lecture(transcript, num_questions): # with gr.Row(): # gr.Markdown("Generating summary and quiz...") # result = generate_summary_and_quiz(transcript, num_questions) # return result # with gr.Blocks() as demo: # gr.Markdown("# Video Lecture Summarizer and Quiz Generator") # transcript_input = gr.Textbox(label="Video Lecture Transcript", lines=10, placeholder="Paste the video transcript or a detailed description of the lecture content here...") # num_questions = gr.Slider(minimum=1, maximum=10, value=3, step=1, label="Number of Quiz Questions") # generate_btn = gr.Button("Generate Summary and Quiz") # output = gr.Textbox(label="Summary and Quiz", lines=20) # generate_btn.click(process_lecture, inputs=[transcript_input, num_questions], outputs=output) # if __name__ == "__main__": # demo.launch() import gradio as gr import google.generativeai as genai import speech_recognition as sr from pydub import AudioSegment import os import tempfile import moviepy.editor as mp # Initialize Gemini API genai.configure(api_key="AIzaSyBPQF0g5EfEPzEiGRzA3iNzJZK4jDukMvE") # Initialize the Gemini model model = genai.GenerativeModel('gemini-pro') def transcribe_video(video_path): """Transcribe the audio from a video file.""" try: # Extract audio from video video = mp.VideoFileClip(video_path) audio_path = tempfile.mktemp(suffix=".wav") video.audio.write_audiofile(audio_path, codec='pcm_s16le') # Load audio file audio = AudioSegment.from_wav(audio_path) # Initialize recognizer r = sr.Recognizer() # Split audio into chunks to handle long audio chunk_length_ms = 30000 # 30 seconds chunks = [audio[i:i+chunk_length_ms] for i in range(0, len(audio), chunk_length_ms)] transcript = "" for i, chunk in enumerate(chunks): # Export chunk to a temporary file chunk_path = tempfile.mktemp(suffix=".wav") chunk.export(chunk_path, format="wav") # Recognize speech in the chunk with sr.AudioFile(chunk_path) as source: audio_listened = r.record(source) try: text = r.recognize_google(audio_listened) transcript += text + " " except sr.UnknownValueError: print(f"Could not understand audio in chunk {i+1}") except sr.RequestError: print(f"Could not request results from Google Speech Recognition service for chunk {i+1}") # Clean up temporary chunk file os.remove(chunk_path) # Clean up temporary audio file os.remove(audio_path) return transcript.strip() except Exception as e: return f"Error transcribing video: {str(e)}" def generate_summary_and_quiz(transcript, num_questions): """Generate a summary and quiz questions based on the video transcript.""" prompt = f""" Based on the following video lecture transcript, please provide: 1. A concise summary of the main points (about 100 words) 2. {num_questions} multiple-choice quiz questions to test understanding of key concepts Transcript: {transcript} Format your response as follows: Summary: [Your summary here] Quiz Questions: 1. [Question] a) [Option A] b) [Option B] c) [Option C] d) [Option D] Correct Answer: [Correct option letter] 2. [Next question and options...] Ensure the questions cover different aspects of the lecture and vary in difficulty. """ try: response = model.generate_content(prompt) return response.text except Exception as e: return f"Error generating summary and quiz: {str(e)}" def process_video(video, num_questions): with gr.Row(): gr.Markdown("Processing video and generating summary and quiz...") with tempfile.NamedTemporaryFile(delete=False, suffix=".mp4") as temp_video: video.save(temp_video.name) video_path = temp_video.name transcript = transcribe_video(video_path) result = generate_summary_and_quiz(transcript, num_questions) os.unlink(video_path) return transcript, result with gr.Blocks() as demo: gr.Markdown("# Video Lecture Summarizer and Quiz Generator") video_input = gr.Video(label="Upload Video Lecture") num_questions = gr.Slider(minimum=1, maximum=10, value=3, step=1, label="Number of Quiz Questions") generate_btn = gr.Button("Process Video and Generate Summary and Quiz") transcript_output = gr.Textbox(label="Video Transcript", lines=10) summary_quiz_output = gr.Textbox(label="Summary and Quiz", lines=20) generate_btn.click( process_video, inputs=[video_input, num_questions], outputs=[transcript_output, summary_quiz_output] ) if __name__ == "__main__": demo.launch()