| import time | |
| from google import genai | |
| import google.generativeai as genai2 | |
| import os | |
| class VideoProcessingClient: | |
| def __init__(self, api_key: str, model_name: str = "gemini-1.5-pro-latest"): | |
| """ | |
| Initialize the client with the API key and model name. | |
| """ | |
| self.system_instructions = ''' | |
| You are an advanced AI designed to analyze meeting recordings and transcripts to generate detailed reports. Given a video file and its corresponding audio transcript, you will extract key insights and structure them into a comprehensive report. | |
| Your output should include the following sections: | |
| 1. Attendance & Attention Analysis | |
| - Identify the attendees present in the meeting. | |
| - Assess their engagement levels based on video cues (e.g., eye contact, posture, participation) and speech patterns (e.g., interruptions, responsiveness). | |
| - Highlight any significant changes in attention throughout the meeting. | |
| 2. Meeting Outline | |
| - Provide a structured summary of the meeting, breaking it down into key sections: | |
| - List major topics discussed. | |
| - For each topic, provide a brief one-sentence summary of the key points. | |
| 3. Sentiment Analysis | |
| - Perform sentiment analysis on participants based on their speech and facial expressions. | |
| - Indicate the overall emotional tone of the meeting (e.g., positive, neutral, negative). | |
| - Identify any significant emotional moments (e.g., frustration, enthusiasm, agreement). | |
| 4. Final Summary | |
| - Give a concise 2-3 sentence conclusion summarizing the meeting's overall tone, engagement, and key takeaways. | |
| Additional Notes: | |
| - Ensure the report is structured, clear, and professional. | |
| - Extract meaningful insights without unnecessary details. | |
| - Use bullet points for clarity where needed.''' | |
| self.api_key = api_key | |
| self.client = genai.Client(api_key=api_key) | |
| genai2.configure(api_key=api_key) | |
| self.model = genai2.GenerativeModel(model_name=model_name,system_instruction=self.system_instructions) | |
| self.video_file = None | |
| def upload_video(self, video_path: str): | |
| """ | |
| Upload a video file and return the file object. | |
| """ | |
| self.video_file = self.client.files.upload(file=video_path) | |
| return self.video_file | |
| def wait_for_processing(self): | |
| """ | |
| Wait for the video file to finish processing. | |
| """ | |
| while self.video_file.state.name == "PROCESSING": | |
| time.sleep(1) | |
| self.video_file = self.client.files.get(name=self.video_file.name) | |
| if self.video_file.state.name == "FAILED": | |
| raise ValueError(f"Video processing failed: {self.video_file.state.name}") | |
| def summarize_video(self,text_transcript:str): | |
| """ | |
| Generate a summary and quiz based on the video. | |
| """ | |
| response = self.model.generate_content([self.video_file.uri,text_transcript], | |
| request_options={"timeout": 600}) | |
| return response.text | |
| if __name__ == "__main__": | |
| api_key = "AIzaSyDa-0mHBsJCWI8iRBwCwncNvr3wBOjuEvA" | |
| os.environ['GOOGLE_API_KEY'] = api_key | |
| video_path = "GreatRedSpot.mp4" | |
| prompt = "Summarize this video. Then create a quiz with answer key based on the information in the video." | |
| client = VideoProcessingClient(api_key=api_key) | |
| client.upload_video(video_path) | |
| client.wait_for_processing() | |
| summary_and_quiz = client.summarize_video(prompt) | |
| print("Generated content:\n", summary_and_quiz) | |