zhangyong 6 months ago
parent
commit
eaba5db4f0
1 changed files with 235 additions and 225 deletions
  1. 235 225
      google_ai/generativeai_video.py

+ 235 - 225
google_ai/generativeai_video.py

@@ -4,9 +4,7 @@ import os
 import aiohttp
 import aiohttp
 import requests
 import requests
 import google.generativeai as genai
 import google.generativeai as genai
-from google.generativeai import caching
-import datetime
-import time
+
 import uuid
 import uuid
 
 
 
 
@@ -26,8 +24,8 @@ class VideoAnalyzer:
         except Exception as e:
         except Exception as e:
             print( f"处理或删除文件时发生错误: {str( e )}" )
             print( f"处理或删除文件时发生错误: {str( e )}" )
 
 
-    # async def download_video(self, video_url,  save_directory='/root/google_ai_studio/path'):
-    async def download_video(self, video_url, save_directory='/Users/tzld/Desktop/google_ai_studio/path'):
+    async def download_video(self, video_url,  save_directory='/root/google_ai_studio/path'):
+    # async def download_video(self, video_url, save_directory='/Users/tzld/Desktop/google_ai_studio/path'):
 
 
         """从给定的视频链接下载视频并保存到指定路径"""
         """从给定的视频链接下载视频并保存到指定路径"""
         try:
         try:
@@ -50,9 +48,9 @@ class VideoAnalyzer:
             print( f"下载视频时出现错误: {e}" )
             print( f"下载视频时出现错误: {e}" )
             return None
             return None
 
 
-    async def upload_video(self, save_path):
+    async def upload_video(self, save_path, mime_type = None):
         """上传视频文件并获取视频文件对象"""
         """上传视频文件并获取视频文件对象"""
-        self.video_file = genai.upload_file(path=save_path)
+        self.video_file = genai.upload_file(save_path, mime_type=mime_type)
         await self._wait_for_processing()
         await self._wait_for_processing()
 
 
     async def _wait_for_processing(self):
     async def _wait_for_processing(self):
@@ -64,22 +62,35 @@ class VideoAnalyzer:
         print( f'视频处理完成: {self.video_file.uri}' )
         print( f'视频处理完成: {self.video_file.uri}' )
 
 
     async def create_cache(self):
     async def create_cache(self):
+        generation_config = {
+            "temperature": 1,
+            "top_p": 0.95,
+            "top_k": 64,
+            "max_output_tokens": 8192,
+            "response_mime_type": "text/plain",
+        }
         """创建缓存内容,并返回生成模型"""
         """创建缓存内容,并返回生成模型"""
-        cache = caching.CachedContent.create(
-            model='models/gemini-1.5-flash-001',
-            display_name='AIzaSyDs4FWRuwrEnQzu1M_Skio6NII6Mp4whAw',
-            system_instruction=(
-                '你是一个专业的视频分析师,负责根据访问的视频文件回答用户的所有问题。'
-            ),
-            contents=[self.video_file],
-            ttl=datetime.timedelta( minutes=5 ),
+        # 创建生成模型,使用 gemini-1.5-flash 模型
+        model = genai.GenerativeModel(
+            model_name="gemini-1.5-flash",
+            generation_config=generation_config,
+
         )
         )
-        return genai.GenerativeModel.from_cached_content( cached_content=cache )
 
 
+        return model
     async def analyze_video(self, model, questions):
     async def analyze_video(self, model, questions):
-        """根据缓存模型生成视频分析结果"""
-        response = model.generate_content([(questions)])
-        return response
+            chat_session = model.start_chat(
+                history=[
+                ]
+            )
+            message_content = {
+                "parts": [
+                    self.video_file,
+                    "你是一个专业的视频分析师,负责根据访问的视频文件回答用户的所有问题\\n"+questions
+                ]
+            }
+            response = chat_session.send_message( message_content )
+            return response
 
 
 async def main(video_path):
 async def main(video_path):
     """主函数,执行视频上传、缓存创建、问题生成"""
     """主函数,执行视频上传、缓存创建、问题生成"""
@@ -102,211 +113,209 @@ async def main(video_path):
     model =await analyzer.create_cache()
     model =await analyzer.create_cache()
 
 
     # 视频分析问题
     # 视频分析问题
-    video_analysis_questions = """
-                    一、基础信息:
-                    1.视觉/音乐/文字: 请从视频中的视觉、音乐、文字这三个维度信息做分析比较,哪个维度的信息是该视频中最重要的,可能成为该视频的要点驱动力?你只要回答 视觉/音乐/文字 三者其一即可。
-                    2.内容选题: 如果需要从视频中提取一个内容选题,你觉得应该是什么?请注意:选题应该体现视频的关键点,亮点,爆点,选题不能超过8个字。
-                    3.视频主题:描述视频的整体主题。
-                    二、主体和场景:
-                    1.视频主体:视频中的核心人物或物体,有几个?分别是什么?
-                    2.视频场景:视频属于什么场景?场景可以有多个,每个不超过6个字
-                    三、情感与风格:
-                    1.情感倾向:视频传递的情感是积极、消极还是中立或其他?
-                    2.视频风格:判断视频的风格类型(如严肃、轻松、幽默等)。
-                    四、视频传播性与观众:
-                    1.片尾引导
-                    视频片尾是否有引导观众分享?
-                    引导时长?
-                    引导强度如何?
-                    2.传播性判断:基于中国中老年微信用户,判断该视频的传播性并说明依据。
-                    3.观众画像:
-                    推测观众的年龄
-                    推测观众的性别
-                    推测观众的地域
-                    五、音画细节:
-                    1.音频细节
-                    视频中的音频信息,是否有歌曲?
-                    视频中的音频信息,歌曲名是什么?
-                    视频中的音色音色是怎样的?
-                    2.视频水印
-                    是否有产品名的水印?
-                    水印是否涉及产品名称是什么?
-                    3.视频字幕
-                    是否有字幕?
-                    字幕的颜色?
-                    字幕的字号?
-                    字幕的位置如何?
-                    4. 视频口播:提供视频中出现的准确且完整的口播内容。
-                    六、人物与场景:
-                    1.知名人物
-                    视频或音频中是否出现知名人物?
-                    视频或音频中是否出现知名人物是谁?
-                    2.人物年龄段:视频中人物的年龄段(如中青年男、中青年女等)。
-                    3.场景描述:视频和声音中涉及的场景描述。
-                    七、时效性与分类:
-                    1.时效性:
-                    适用时效日
-                    适用时效早中晚
-                    2.视频一级分类:判断视频分别属于下面的哪种一级分类,并输出准确完整的一级品类_分类名称:
-                    一级分类范围为:
-                      一级品类_音乐
-                      一级品类_剧情 / 剧情演绎
-                      一级品类_二次元
-                      一级品类_游戏
-                      一级品类_公益
-                      一级品类_随拍 / 颜值
-                      一级品类_舞蹈
-                      一级品类_动物 / 萌宠
-                      一级品类_三农
-                      一级品类_科技 / 科技数码
-                      一级品类_财经
-                      一级品类_母婴 / 母婴亲子
-                      一级品类_法律 / 人文社科
-                      一级品类_科普 / 人文社科
-                      一级品类_情感 / 情感心理
-                      一级品类_职场 / 人文社科
-                      一级品类_教育 / 教育培训
-                      一级品类_摄影摄像
-                      一级品类_艺术 / 才艺技能
-                      一级品类_美食
-                      一级品类_旅行 / 旅游
-                      一级品类_地域本地
-                      一级品类_时尚 / 时尚 / 美妆
-                      一级品类_文化 / 人文社科
-                      一级品类_搞笑 / 休闲娱乐
-                      一级品类_明星 / 名人
-                      一级品类_综艺
-                      一级品类_影视综艺
-                      一级品类_电影
-                      一级品类_影视综艺
-                      一级品类_电视剧
-                      一级品类_影视综艺
-                      一级品类_汽车
-                      一级品类_体育 / 运动
-                      一级品类_医疗健康 / 长寿 / 健身
-                      一级品类_生活记录 / 生活
-                      一级品类_生活家居 / 家居家装
-                      一级品类_时政社会
-                      一级品类_奇人异象
-                      一级品类_历史
-                      一级品类_军事
-                      一级品类_宗教
-                      一级品类_短剧
-                      一级品类_收藏品
-                      3.二级分类: 判断视频分别属于下面的哪种二级分类,并输出准确完整的品类-分类名称
-                      二级分类范围为:
-                      品类-祝福音乐
-                      品类-人生感悟音乐
-                      品类-民族异域音乐
-                      品类-亲情音乐
-                      品类-红歌老歌
-                      品类-音乐知识
-                      品类-正能量剧情
-                      品类-对口型表演
-                      品类-快闪
-                      品类-拟真游戏
-                      品类-麻将
-                      品类-棋牌
-                      品类-老年审美美女
-                      品类-老年审美帅哥
-                      品类-红歌老歌舞蹈
-                      品类-广场舞
-                      品类-舞蹈教程
-                      品类-宠物日常
-                      品类-动物表演
-                      品类-生动物
-                      品类-农村生活
-                      品类-农业技术
-                      品类-老年相关科技
-                      品类-未来科幻
-                      品类-国家科技力量
-                      品类-保险
-                      品类-理财
-                      品类-亲子日常
-                      品类-K12教育
-                      品类-老年相关法律科普
-                      品类-知识科普
-                      品类-生活技巧科普
-                      品类-怀念时光
-                      品类-人生忠告
-                      品类-迷信祝福
-                      品类-节日祝福
-                      品类-早中晚好
-                      品类-退休前
-                      品类-退休后
-                      品类-益智解密
-                      品类-老年教育
-                      品类-风景实拍
-                      品类-动植物实拍
-                      品类-人像模特实拍
-                      品类-摄影教学
-                      品类-名画赏析
-                      品类-杂技柔术
-                      品类-魔术
-                      品类-魔术特效
-                      品类-书法
-                      品类-绘画
-                      品类-木工
-                      品类-口技
-                      品类-大型集体艺术
-                      品类-戏曲戏剧
-                      品类-二人转
-                      品类-其他才艺
-                      品类-美食测评
-                      品类-美食教程
-                      品类-吃播探店
-                      品类-旅行记录
-                      品类-旅行攻略
-                      品类-省份城市亮点
-                      品类-本地新闻
-                      品类-本地生活
-                      品类-老年时尚
-                      品类-美妆护肤穿搭
-                      品类-传统文化
-                      品类-国际文化
-                      品类-搞笑瞬间合集
-                      品类-搞笑段子
-                      品类-历史名人
-                      品类-当代正能量人物
-                      品类-老明星
-                      品类-老年人上综艺
-                      品类-老年关心纪录片
-                      品类-老综艺影像
-                      品类-电影切片
-                      品类-电影解说
-                      品类-电视剧切片
-                      品类-电视剧解说
-                      品类-中国队比赛
-                      品类-老年运动
-                      品类-健康知识
-                      品类-长寿知识
-                      品类-饮食健康
-                      品类-健身操
-                      品类-老年生活
-                      品类-生活小妙招
-                      品类-园艺花艺
-                      品类-民生政策
-                      品类-流行病疫情
-                      品类-社会风气
-                      品类-食品安全
-                      品类-贪污腐败
-                      品类-人财诈骗
-                      品类-核污染
-                      品类-惠民新闻
-                      品类-天气变化
-                      品类-国家力量
-                      品类-国际时政
-                      品类-他国政策
-                      品类-惊奇事件
-                      品类-罕见画面
-                      品类-中国战争史
-                      品类-中国党史
-                      品类-中国历史影像
-                      品类-国际军事
-                      品类-国内军事
-                      品类-国家统一
-                    输出格式:要求输出格式为符合RFC8259标准的JSON格式的字符串
-                """
+    video_analysis_questions = "一、基础信息:\n                    " \
+                               "1.视觉/音乐/文字: 请从视频中的视觉、音乐、文字这三个维度信息做分析比较,哪个维度的信息是该视频中最重要的,可能成为该视频的要点驱动力?你只要回答 视觉/音乐/文字 三者其一即可。\n" \
+                               "2.内容选题: 如果需要从视频中提取一个内容选题,你觉得应该是什么?请注意:选题应该体现视频的关键点,亮点,爆点,选题不能超过8个字。\n" \
+                               "3.视频主题:描述视频的整体主题。\n " \
+                               "二、主体和场景:\n" \
+                               "1.视频主体:视频中的核心人物或物体,有几个?分别是什么?\n" \
+                               "2.视频场景:视频属于什么场景?场景可以有多个,每个不超过6个字\n" \
+                               "三、情感与风格:\n" \
+                               "1.情感倾向:视频传递的情感是积极、消极还是中立或其他?\n" \
+                               "2.视频风格:判断视频的风格类型(如严肃、轻松、幽默等)。\n四、视频传播性与观众:\n" \
+                               "1.片尾引导\n" \
+                               "视频片尾是否有引导观众分享?\n" \
+                               "引导时长?\n" \
+                               "引导强度如何?\n" \
+                               "2.传播性判断:基于中国中老年微信用户,判断该视频的传播性并说明依据。\n" \
+                               "3.观众画像:\n" \
+                               "推测观众的年龄\n" \
+                               "推测观众的性别\n" \
+                               "推测观众的地域\n" \
+                               "五、音画细节:\n" \
+                               "1.音频细节\n" \
+                               "视频中的音频信息,是否有歌曲?\n" \
+                               "视频中的音频信息,歌曲名是什么?\n" \
+                               "视频中的音色音色是怎样的?\n" \
+                               "2.视频水印\n" \
+                               "是否有产品名的水印?\n" \
+                               "水印是否涉及产品名称是什么?\n" \
+                               "3.视频字幕\n" \
+                               "是否有字幕?\n" \
+                               "字幕的颜色?\n" \
+                               "字幕的字号?\n" \
+                               "字幕的位置如何?\n" \
+                               "4. 视频口播:提供视频中出现的准确且完整的口播内容。\n" \
+                               "六、人物与场景:\n" \
+                               "1.知名人物\n" \
+                               "视频或音频中是否出现知名人物?\n" \
+                               "视频或音频中是否出现知名人物是谁?\n" \
+                               "2.人物年龄段:视频中人物的年龄段(如中青年男、中青年女等)。\n" \
+                               "3.场景描述:视频和声音中涉及的场景描述。\n" \
+                               "七、时效性与分类:\n" \
+                               "1.时效性:\n" \
+                               "适用时效日\n" \
+                               "适用时效早中晚\n" \
+                               "2.视频一级分类:判断视频分别属于下面的哪种一级分类,并输出准确完整的一级品类_分类名称:\n" \
+                               "一级分类范围为:\n" \
+                               "一级品类_音乐\n" \
+                               "一级品类_剧情 / 剧情演绎\n" \
+                               "一级品类_二次元\n" \
+                               "一级品类_游戏\n" \
+                               "一级品类_公益\n" \
+                               "一级品类_随拍 / 颜值\n" \
+                               "一级品类_舞蹈\n" \
+                               "一级品类_动物 / 萌宠\n" \
+                               "一级品类_三农\n" \
+                               "一级品类_科技 / 科技数码\n" \
+                               "一级品类_财经\n" \
+                               "一级品类_母婴 / 母婴亲子\n" \
+                               "一级品类_法律 / 人文社科\n" \
+                               "一级品类_科普 / 人文社科\n" \
+                               "一级品类_情感 / 情感心理\n" \
+                               "一级品类_职场 / 人文社科\n" \
+                               "一级品类_教育 / 教育培训\n" \
+                               "一级品类_摄影摄像\n" \
+                               "一级品类_艺术 / 才艺技能\n" \
+                               "一级品类_美食\n" \
+                               "一级品类_旅行 / 旅游\n" \
+                               "一级品类_地域本地\n" \
+                               "一级品类_时尚 / 时尚 / 美妆\n" \
+                               "一级品类_文化 / 人文社科\n" \
+                               "一级品类_搞笑 / 休闲娱乐\n" \
+                               "一级品类_明星 / 名人\n" \
+                               "一级品类_综艺\n" \
+                               "一级品类_影视综艺\n" \
+                               "一级品类_电影\n" \
+                               "一级品类_影视综艺\n" \
+                               "一级品类_电视剧\n" \
+                               "一级品类_影视综艺\n" \
+                               "一级品类_汽车\n" \
+                               "一级品类_体育 / 运动\n" \
+                               "一级品类_医疗健康 / 长寿 / 健身\n" \
+                               "一级品类_生活记录 / 生活\n" \
+                               "一级品类_生活家居 / 家居家装\n" \
+                               "一级品类_时政社会\n" \
+                               "一级品类_奇人异象\n" \
+                               "一级品类_历史\n" \
+                               "一级品类_军事\n" \
+                               "一级品类_宗教\n" \
+                               "一级品类_短剧\n" \
+                               "一级品类_收藏品\n" \
+                               "3.二级分类: 判断视频分别属于下面的哪种二级分类,并输出准确完整的品类-分类名称\n" \
+                               "二级分类范围为:\n" \
+                               "品类-祝福音乐\n" \
+                               "品类-人生感悟音乐\n" \
+                               "品类-民族异域音乐\n" \
+                               "品类-亲情音乐\n" \
+                               "品类-红歌老歌\n" \
+                               "品类-音乐知识\n" \
+                               "品类-正能量剧情\n" \
+                               "品类-对口型表演\n" \
+                               "品类-快闪\n" \
+                               "品类-拟真游戏\n" \
+                               "品类-麻将\n" \
+                               "品类-棋牌\n" \
+                               "品类-老年审美美女\n" \
+                               "品类-老年审美帅哥\n" \
+                               "品类-红歌老歌舞蹈\n" \
+                               "品类-广场舞\n" \
+                               "品类-舞蹈教程\n" \
+                               "品类-宠物日常\n" \
+                               "品类-动物表演\n" \
+                               "品类-生动物\n" \
+                               "品类-农村生活\n" \
+                               "品类-农业技术\n" \
+                               "品类-老年相关科技\n" \
+                               "品类-未来科幻\n" \
+                               "品类-国家科技力量\n" \
+                               "品类-保险\n" \
+                               "品类-理财\n" \
+                               "品类-亲子日常\n" \
+                               "品类-K12教育\n" \
+                               "品类-老年相关法律科普\n" \
+                               "品类-知识科普\n" \
+                               "品类-生活技巧科普\n" \
+                               "品类-怀念时光\n" \
+                               "品类-人生忠告\n" \
+                               "品类-迷信祝福\n" \
+                               "品类-节日祝福\n" \
+                               "品类-早中晚好\n" \
+                               "品类-退休前\n" \
+                               "品类-退休后\n" \
+                               "品类-益智解密\n" \
+                               "品类-老年教育\n" \
+                               "品类-风景实拍\n" \
+                               "品类-动植物实拍\n" \
+                               "品类-人像模特实拍\n" \
+                               "品类-摄影教学\n" \
+                               "品类-名画赏析\n" \
+                               "品类-杂技柔术\n" \
+                               "品类-魔术\n" \
+                               "品类-魔术特效\n" \
+                               "品类-书法\n" \
+                               "品类-绘画\n" \
+                               "品类-木工\n" \
+                               "品类-口技\n" \
+                               "品类-大型集体艺术\n" \
+                               "品类-戏曲戏剧\n" \
+                               "品类-二人转\n" \
+                               "品类-其他才艺\n" \
+                               "品类-美食测评\n" \
+                               "品类-美食教程\n" \
+                               "品类-吃播探店\n" \
+                               "品类-旅行记录\n" \
+                               "品类-旅行攻略\n" \
+                               "品类-省份城市亮点\n" \
+                               "品类-本地新闻\n" \
+                               "品类-本地生活\n" \
+                               "品类-老年时尚\n" \
+                               "品类-美妆护肤穿搭\n" \
+                               "品类-传统文化\n" \
+                               "品类-国际文化\n" \
+                               "品类-搞笑瞬间合集\n" \
+                               "品类-搞笑段子\n" \
+                               "品类-历史名人\n" \
+                               "品类-当代正能量人物\n" \
+                               "品类-老明星\n" \
+                               "品类-老年人上综艺\n" \
+                               "品类-老年关心纪录片\n" \
+                               "品类-老综艺影像\n" \
+                               "品类-电影切片\n" \
+                               "品类-电影解说\n" \
+                               "品类-电视剧切片\n" \
+                               "品类-电视剧解说\n" \
+                               "品类-中国队比赛\n" \
+                               "品类-老年运动\n" \
+                               "品类-健康知识\n" \
+                               "品类-长寿知识\n" \
+                               "品类-饮食健康\n" \
+                               "品类-健身操\n" \
+                               "品类-老年生活\n" \
+                               "品类-生活小妙招\n" \
+                               "品类-园艺花艺\n" \
+                               "品类-民生政策\n" \
+                               "品类-流行病疫情\n" \
+                               "品类-社会风气\n" \
+                               "品类-食品安全\n" \
+                               "品类-贪污腐败\n" \
+                               "品类-人财诈骗\n" \
+                               "品类-核污染\n" \
+                               "品类-惠民新闻\n" \
+                               "品类-天气变化\n" \
+                               "品类-国家力量\n" \
+                               "品类-国际时政\n" \
+                               "品类-他国政策\n" \
+                               "品类-惊奇事件\n" \
+                               "品类-罕见画面\n" \
+                               "品类-中国战争史\n" \
+                               "品类-中国党史\n" \
+                               "品类-中国历史影像\n" \
+                               "品类-国际军事\n" \
+                               "品类-国内军事\n" \
+                               "品类-国家统一\n" \
+                               "输出格式:要求输出格式为符合RFC8259标准的JSON格式的字符串"
+
 
 
     # 分析视频并打印结果
     # 分析视频并打印结果
     response =await analyzer.analyze_video( model, video_analysis_questions )
     response =await analyzer.analyze_video( model, video_analysis_questions )
@@ -322,5 +331,6 @@ if __name__ == "__main__":
     proxy_url = 'http://127.0.0.1:1081'
     proxy_url = 'http://127.0.0.1:1081'
     os.environ["http_proxy"] = proxy_url
     os.environ["http_proxy"] = proxy_url
     os.environ["https_proxy"] = proxy_url
     os.environ["https_proxy"] = proxy_url
-    video_path = 'http://rescdn.yishihui.com/jq_oss/video/2024092315510095449.mp4'
+    # video_path = 'http://temp.yishihui.com/longvideo/transcode/video/vpc/20240926/66510681PACx7zsp2wDBHJlicE.mp4'
+    video_path = 'http://temp.yishihui.com/jq_oss/video/2024092618393680952.mp4'
     asyncio.run(main(video_path))
     asyncio.run(main(video_path))