| 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) |
|
|