PHP前端开发

使用 Gemini Flash 构建视频洞察生成器

百变鹏仔 5天前 #Python
文章标签 生成器

视频理解或视频洞察由于其多方面的优势而在各个行业和应用中至关重要。它们通过自动生成元数据、对内容进行分类并使视频更易于搜索来增强内容分析和管理。此外,视频洞察提供了推动决策、增强用户体验并提高不同行业运营效率的关键数据。

google 的 gemini 1.5 模型为该领域带来了重大进步。除了在语言处理方面令人印象深刻的改进之外,该模型还可以处理多达 100 万个标记的巨大输入上下文。为了进一步增强其功能,gemini 1.5 被训练为多模式模型,可以本地处理文本、图像、音频和视频。各种输入类型和广泛的上下文大小的强大组合为有效处理长视频开辟了新的可能性。

在本文中,我们将深入探讨如何利用 gemini 1.5 生成有价值的视频见解,改变我们跨不同领域理解和利用视频内容的方式。

入门

目录

什么是双子座1.5

google 的 gemini 1.5 代表了人工智能性能和效率的重大飞跃。该模型建立在广泛的研究和工程创新的基础上,采用新的专家混合 (moe) 架构,提高了培训和服务效率。 gemini 1.5 pro 和 1.5 flash 现已推出公共预览版,通过 google ai studio 和 vertex ai 提供了令人印象深刻的 100 万个代币上下文窗口。

google gemini 更新:flash 1.5、gemma 2 和 project astra (blog.google)
1.5 flash 型号是 gemini 系列的最新成员,对于大容量、高频任务来说速度最快且最优化。它专为实现成本效益而设计,在摘要、聊天、图像和视频字幕以及从大量文档和表格中提取数据等应用中表现出色。凭借这些进步,gemini 1.5 为 ai 模型的性能和多功能性树立了新标准。

先决条件

安装依赖项

python -m venv venvsource venv/bin/activate #for ubuntuvenv/scripts/activate #for windows
pip install google-generativeai streamlit python-dotenv

设置 gemini api 密钥

要访问 gemini api 并开始使用其功能,您可以通过注册 google ai studio 来获取免费的 google api 密钥。 google ai studio 由 google 提供,提供了一个用户友好的、基于视觉的界面,用于与 gemini api 进行交互。在 google ai studio 中,您可以通过其直观的 ui 无缝地与生成模型交互,如果需要,还可以生成 api 令牌以增强控制和自定义。

按照以下步骤生成 gemini api 密钥:

设置环境变量

首先为您的项目创建一个新文件夹。选择一个能够反映您项目目的的名称。
在新项目文件夹中,创建一个名为 .env 的文件。该文件将存储您的环境变量,包括您的 gemini api 密钥。
打开 .env 文件并添加以下代码来指定您的 gemini api 密钥:

google_api_key=aizasy......

导入库

要开始您的项目并确保您拥有所有必要的工具,您需要导入几个关键库,如下所示。

import osimport timeimport google.generativeai as genaiimport streamlit as stfrom dotenv import load_dotenv

初始化项目

要设置您的项目,您需要配置 api 密钥并为上传的文件创建临时文件存储目录。

通过初始化必要的设置来定义媒体文件夹并配置 gemini api 密钥。将以下代码添加到您的脚本中:

media_folder = 'medias'def __init__():    # create the media directory if it doesn't exist    if not os.path.exists(media_folder):        os.makedirs(media_folder)    # load environment variables from the .env file    load_dotenv()    # retrieve the api key from the environment variables    api_key = os.getenv("gemini_api_key")    # configure the gemini api with your api key    genai.configure(api_key=api_key)

保存上传的文件

要将上传的文件存储在媒体文件夹中并返回其路径,请定义一个名为 save_uploaded_file 的方法并向其中添加以下代码。

def save_uploaded_file(uploaded_file):    """save the uploaded file to the media folder and return the file path."""    file_path = os.path.join(media_folder, uploaded_file.name)    with open(file_path, 'wb') as f:        f.write(uploaded_file.read())    return file_path

从视频中生成见解

从视频中生成见解涉及几个关键阶段,包括上传、处理和生成响应。

1. 将视频上传到files api

gemini api 直接接受视频文件格式。文件 api 支持最大 2gb 的文件,并允许每个项目最大存储 20gb。上传的文件保留 2 天,并且无法从 api 下载。

video_file = genai.upload_file(path=video_path)

2. 获取文件

上传文件后,您可以使用files.get方法验证api是否已成功接收文件。此方法允许您查看上传到文件 api 的文件,这些文件与链接到您的 api 密钥的云项目关联。只有文件名和 uri 是唯一标识符。

import timewhile video_file.state.name == "processing":    print('waiting for video to be processed.')    time.sleep(10)    video_file = genai.get_file(video_file.name)if video_file.state.name == "failed":  raise valueerror(video_file.state.name)

3. 响应生成

视频上传后,您可以发出引用文件 api uri 的generatecontent 请求。

# create the prompt.prompt = "describe the video. provides the insights from the video."# set the model to gemini 1.5 flash.model = genai.generativemodel(model_name="models/gemini-1.5-flash")# make the llm request.print("making llm inference request...")response = model.generate_content([prompt, video_file],                                  request_options={"timeout": 600})print(response.text)

4. 删除文件

文件会在 2 天后自动删除,或者您可以使用 files.delete() 手动删除它们。

genai.delete_file(video_file.name)

5. 结合各个阶段

创建一个名为 get_insights 的方法并向其中添加以下代码。使用 streamlit write() 方法代替 print() 来查看网站上的消息。

def get_insights(video_path):    """extract insights from the video using gemini flash."""    st.write(f"processing video: {video_path}")    st.write(f"uploading file...")    video_file = genai.upload_file(path=video_path)    st.write(f"completed upload: {video_file.uri}")    while video_file.state.name == "processing":        st.write('waiting for video to be processed.')        time.sleep(10)        video_file = genai.get_file(video_file.name)    if video_file.state.name == "failed":        raise valueerror(video_file.state.name)    prompt = "describe the video. provides the insights from the video."    model = genai.generativemodel(model_name="models/gemini-1.5-flash")    st.write("making llm inference request...")    response = model.generate_content([prompt, video_file],                                    request_options={"timeout": 600})    st.write(f'video processing complete')    st.subheader("insights")    st.write(response.text)    genai.delete_file(video_file.name)

创建界面

要简化在 streamlit 应用程序中上传视频和生成见解的过程,您可以创建一个名为 app 的方法。此方法将提供一个上传按钮,显示上传的视频,并从中生成见解。

def app():    st.title("video insights generator")    uploaded_file = st.file_uploader("upload a video file", type=["mp4", "avi", "mov", "mkv"])    if uploaded_file is not none:        file_path = save_uploaded_file(uploaded_file)        st.video(file_path)        get_insights(file_path)        if os.path.exists(file_path):  ## optional: removing uploaded files from the temporary location            os.remove(file_path)

创建 streamlit 应用程序

要创建一个完整且功能齐全的 streamlit 应用程序,允许用户使用 gemini 1.5 flash 模型上传视频并生成见解,请将所有组件合并到一个名为 app.py 的文件中。

这是最终代码:

import osimport timeimport google.generativeai as genaiimport streamlit as stfrom dotenv import load_dotenvmedia_folder = 'medias'def __init__():    if not os.path.exists(media_folder):        os.makedirs(media_folder)    load_dotenv()  ## load all the environment variables    api_key = os.getenv("gemini_api_key")    genai.configure(api_key=api_key)def save_uploaded_file(uploaded_file):    """save the uploaded file to the media folder and return the file path."""    file_path = os.path.join(media_folder, uploaded_file.name)    with open(file_path, 'wb') as f:        f.write(uploaded_file.read())    return file_pathdef get_insights(video_path):    """extract insights from the video using gemini flash."""    st.write(f"processing video: {video_path}")    st.write(f"uploading file...")    video_file = genai.upload_file(path=video_path)    st.write(f"completed upload: {video_file.uri}")    while video_file.state.name == "processing":        st.write('waiting for video to be processed.')        time.sleep(10)        video_file = genai.get_file(video_file.name)    if video_file.state.name == "failed":        raise valueerror(video_file.state.name)    prompt = "describe the video. provides the insights from the video."    model = genai.generativemodel(model_name="models/gemini-1.5-flash")    st.write("making llm inference request...")    response = model.generate_content([prompt, video_file],                                    request_options={"timeout": 600})    st.write(f'video processing complete')    st.subheader("insights")    st.write(response.text)    genai.delete_file(video_file.name)def app():    st.title("video insights generator")    uploaded_file = st.file_uploader("upload a video file", type=["mp4", "avi", "mov", "mkv"])    if uploaded_file is not none:        file_path = save_uploaded_file(uploaded_file)        st.video(file_path)        get_insights(file_path)        if os.path.exists(file_path):  ## optional: removing uploaded files from the temporary location            os.remove(file_path)__init__()app()

运行应用程序

执行以下代码来运行应用程序。

streamlit run app.py

您可以打开控制台中提供的链接来查看输出。

感谢您阅读这篇文章!!

如果您喜欢这篇文章,请点击心形按钮♥并分享以帮助其他人找到它!

本教程的完整源代码可以在这里找到,

github - codemaker2015/video-insights-generator