Spaces:
Runtime error
Runtime error
| # 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() |