sunxy 1 年之前
父节点
当前提交
abf74ddb6a
共有 5 个文件被更改,包括 162 次插入26 次删除
  1. 55 23
      ai_tag_task.py
  2. 29 0
      config.py
  3. 20 3
      moon_shoot_api.py
  4. 57 0
      mysql_connect.py
  5. 1 0
      requirements.txt

+ 55 - 23
ai_tag_task.py

@@ -13,6 +13,7 @@ from whisper_asr import get_whisper_asr
 from gpt_tag import request_gpt
 from config import set_config
 from log import Log
+import mysql_connect
 config_ = set_config()
 log_ = Log()
 features = ['videoid', 'title', 'video_path']
@@ -57,31 +58,28 @@ def get_video_ai_tags(video_id, asr_file, video_info):
                     keywords = gpt_res1_json['keywords']
                     log_message['summary'] = summary
                     log_message['keywords'] = str(keywords)
+
+                    # TODO 三个 prompt 拆分成三个请求
                     prompt2_param = f"标题:{title}\n概况:{summary}\n关键词:{keywords}"
-                    prompt2 = f"{config_.GPT_PROMPT['tags']['prompt7']}{prompt2_param}"
-                    log_message['gptPromptTag'] = prompt2
+                    prompt2 = f"{config_.GPT_PROMPT['tags']['prompt8']}{prompt2_param}"
+                    log_message['gptPrompt2'] = prompt2
                     gpt_res2 = request_gpt(prompt=prompt2)
-                    log_message['gptResTag'] = gpt_res2
+                    log_message['gptRes2'] = gpt_res2
+                    prompt3 = f"{config_.GPT_PROMPT['tags']['prompt9']}{prompt2_param}"
+                    log_message['gptPrompt3'] = prompt3
+                    gpt_res3 = request_gpt(prompt=prompt3)
+                    log_message['gptRes3'] = gpt_res3
+                    prompt4 = f"{config_.GPT_PROMPT['tags']['prompt10']}{prompt2_param}"
+                    log_message['gptPrompt4'] = prompt4
+                    gpt_res4 = request_gpt(prompt=prompt4)
+                    log_message['gptRes4'] = gpt_res4
+                    # 5. 解析gpt产出结果
+                    parseRes = praseGptRes(gpt_res2, gpt_res3, gpt_res4)
+                    log_message.update(parseRes)
+
+                    # 6. 保存结果
+                    mysql_connect.insert_content()
 
-                    if gpt_res2 is not None:
-                        confidence_up_list = []
-                        try:
-                            for item in json.loads(gpt_res2):
-                                if item['confidence'] > 0.5 and item['category'] in config_.TAGS_NEW:
-                                    confidence_up_list.append(
-                                        f"AI标签-{item['category']}")
-                        except:
-                            pass
-                        confidence_up = ','.join(confidence_up_list)
-                        log_message['AITags'] = confidence_up
-                        # 5. 调用后端接口,结果传给后端
-                        if len(confidence_up) > 0:
-                            response = requests.post(url=config_.ADD_VIDEO_AI_TAGS_URL,
-                                                     json={'videoId': int(video_id), 'tagNames': confidence_up})
-                            res_data = json.loads(response.text)
-                            if res_data['code'] != 0:
-                                log_.error(
-                                    {'videoId': video_id, 'msg': 'add video ai tags fail!'})
                 except:
                     pass
         else:
@@ -93,6 +91,36 @@ def get_video_ai_tags(video_id, asr_file, video_info):
         log_.error(traceback.format_exc())
 
 
+def praseGptRes(gpt_res2, gpt_res3, gpt_res4):
+    result = {}
+    if gpt_res2 is not None:
+        try:
+            res2 = json.loads(gpt_res2)
+            result['key_words'] = res2['key_words']
+            result['search_keys'] = res2['search_keys']
+            result['extra_keys'] = res2['extra_keys']
+        except:
+            pass
+    if gpt_res3 is not None:
+        try:
+            res3 = json.loads(gpt_res3)
+            result['tone'] = res3['tone']
+            result['target_audience'] = res3['target_audience']
+            result['target_age'] = res3['target_age']
+        except:
+            pass
+    if gpt_res4 is not None:
+        try:
+            res4 = json.loads(gpt_res4)
+            result['category'] = res4['category']
+            result['target_gender'] = res4['target_gender']
+            result['address'] = res4['address']
+            result['theme'] = res4['theme']
+        except:
+            pass
+    return result
+
+
 def process(video_id, video_info, download_folder):
     if video_info.get(video_id, None) is None:
         shutil.rmtree(os.path.join(download_folder, video_id))
@@ -238,7 +266,7 @@ def timer_check():
 
 if __name__ == '__main__':
     # timer_check()
-    size = 1000
+    size = 10000
     for i in range(0, 2000, size):
         print(f"query_videos start i = {i} ...")
         records = ODPSQueryUtil.query_videos(i, size)
@@ -280,3 +308,7 @@ if __name__ == '__main__':
                 get_video_ai_tags(
                     video_id=video_id, asr_file=asr_file, video_info=video_info.get(video_id))
                 os.remove(asr_file)
+
+
+# get_video_ai_tags(16598277, 'aigc-test/asr_res/16598277.txt',
+#                   {'title': '九九重阳节送祝福🚩', 'video_path': '视频路径'})

+ 29 - 0
config.py

@@ -105,6 +105,35 @@ class BaseConfig(object):
 仅以json array格式返回,{json_format},key为category与confidence,分别代表类别与分类置信度。给出top 3的分类结果。
 -----------------------------
 """,
+            'prompt8': """请根据视频的标题、概况和关键词总结下面几个信息。信息我都写到 json 里面了:
+```
+{
+            "key_words": [],  # 返回关于这个视频的三个关键词
+            "search_keys": [], # 内容可能的搜索关键词,返回 3 个
+            "extra_keys": [], # 关心这个视频的用户还会关心哪些关键词, 返回 3 个
+ }
+```
+只需要返回一个 json,key 和上面的一样,视频的信息如下:\n-------------------------------\n""",
+            'prompt9': """请根据视频的标题、概况和关键词总结下面几个信息。信息我都写到 json 里面了:
+```
+{
+            "tone": 标题的语气,用一个词概括,
+            "target_audience": 标题的受众群体,用一个词描述;
+            "target_age": 标题的受众年龄段,从 老年, 中年,青年,小孩, 不限, 这五个里面选择
+ }
+```
+只需要返回一个 json,key 和上面的一样,视频的信息如下:\n-------------------------------\n""",
+            'prompt10': """请根据视频的标题、概况和关键词总结下面几个信息。信息我都写到 json 里面了:
+```
+{
+            "category": "视频的类别, 类别为其中的一个或多个:【'资讯', '国际', '政治', '科技', '军事', '健康', '社会', '民生政策', '人文', '人物', '旅行', '生活',
+                '美食', '综艺', '搞笑', '民俗文化', '安全', '休闲娱乐', '艺术', '情感'】",
+            "target_gender": 受众性别:男,女,不限,这三个里面选择一个,
+            "address": 受众可能属于哪个城市, 用城市名描述
+            "theme": 内容的主题, 用一个词概括
+ }
+```
+只需要返回一个 json,key 和上面的一样,视频的信息如下:\n-------------------------------\n""",
         },
         'title': {
             'prompt1': f"""

+ 20 - 3
moon_shoot_api.py

@@ -27,6 +27,23 @@ class MoonShotHandle():
         return response
 
 
-# res = MoonShotHandle().chat("'\n请对如下文本进行:\n1. 用20个字以内对文本内容进行概况。\n2. 列举三个关键词。\n仅以json格式返回,key为summary, keywords。分别代表概要,关键词。\n-----------------------------\n养肺离不开吃最润肺的食物推荐给大家第一个是山药山药是润肺的最佳食品之一大家在平时的时候可以吃最好的吃法是做成山药粥或者是直接的清炒山药就可以了不适合与其他的食物相配第二个是梨这个大家都很清楚梨水是用来清肺的润肺的所以梨对于肺来讲是个好东西因为它的水多又好消化最好的吃法是做成梨汤或者是梨水加入冰糖吃这种梨肉喝汤就可以了第三个是百合百合是白色的食物两肺就适合吃这种白色的食物它是能够清肺润肺的最好的吃法依然是清炒不用加太多的调料清淡的口味就行了第四个是银耳银耳也是咱们中医推荐的用于润肺养肺的食物之一最好的吃法就是直接打成汤或者再加上枸杞还有红枣这样会让银耳的效果更出众另外也可以加点白糖增加一下能量第五是白萝卜萝卜有通气之处而肺是需要过气的所以吃萝卜可以让我们的通气但对于肺的功能它是有很好的通畅效果所以吃萝卜也是可以清肺的'")
-# res = res.split("```json")[1].split("```")[0]
-# print(res)
+# single_title_prompt = """
+#         我会给你一个视频标题,需要你帮我用你所学的知识来帮我分析出以下信息,信息我都写到 json 里面了
+#         {
+#             "key_words": [],  # 返回三个关键词
+#             "search_keys": [], # 标题可能的搜索关键词,返回 3 个
+#             "extra_keys": [], # 关心这个视频的用户还会关心哪些关键词, 返回 3 个
+#             "tone": 标题的语气,用一个词概括,
+#             "target_audience": 标题的受众群体,用一个词概括,
+#             "target_age": 标题的受众年龄段,从 老年, 中年,青年,小孩, 不限, 这五个里面选择,
+#             "target_gender": 受众性别,
+#             "address": 受众可能属于哪个城市,
+#             "theme": 标题的主题, 用一个词概括
+#         }
+#         只需要返回一个 json,key 和上面的一样,
+#         我给你的标题是:
+#         """
+# single_title_prompt = single_title_prompt + "家里的盐该怎么选"
+# for i in range(30):
+#     res = MoonShotHandle().chat(single_title_prompt)
+#     print(res)

+ 57 - 0
mysql_connect.py

@@ -0,0 +1,57 @@
+import mysql.connector
+from mysql.connector import Error
+
+MYSQL_CONFIG = {
+    'host': 'rm-bp1k5853td1r25g3n690.mysql.rds.aliyuncs.com',
+    'database': 'incentive',
+    'port': 3306,
+    'user': 'wx2016_longvideo',
+    'password': 'wx2016_longvideoP@assword1234',
+}
+
+
+def insert_content(gpt_res):
+    """ 连接MySQL数据库并插入一行数据 """
+    try:
+        # 连接MySQL数据库
+        conn = mysql.connector.connect(
+            host=MYSQL_CONFIG['host'],
+            database=MYSQL_CONFIG['database'],
+            user=MYSQL_CONFIG['user'],
+            password=MYSQL_CONFIG['password'],
+        )
+
+        if conn.is_connected():
+            print('成功连接到数据库')
+            cursor = conn.cursor()
+
+            # 插入数据的SQL语句
+            insert_query = """
+            INSERT INTO video_content(video_id,key_words,search_keys,extra_keys,tone,target_audience,target_age,target_gender,address,theme)
+            VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
+            """
+            # 准备要插入的数据,转换字典列表为元组列表
+            data_to_insert = [(gpt_res['video_id'], gpt_res['key_words'], gpt_res['search_keys'], gpt_res['extra_keys'],
+                               gpt_res['tone'], gpt_res['target_audience'], gpt_res['target_age'], gpt_res['target_gender'],
+                               gpt_res['address'], gpt_res['theme'])]
+
+            # 执行批量插入操作
+            cursor.executemany(insert_query, data_to_insert)
+            print('数据插入成功')
+
+            # 检查插入结果
+            # cursor.execute('SELECT * FROM employees')
+            # records = cursor.fetchall()
+            # print('插入的数据:', records)
+
+    except Error as e:
+        print('数据库连接或操作出错:', e)
+    finally:
+        if conn.is_connected():
+            cursor.close()
+            conn.close()
+            print('数据库连接已关闭')
+
+
+# 执行函数
+# connect_insert()

+ 1 - 0
requirements.txt

@@ -8,3 +8,4 @@ aliyun_python_sdk
 aliyun-log-python-sdk
 odps
 whisper
+mysql-connector-python