luojunhui 3 meses atrás
pai
commit
9d1577b955

+ 11 - 31
coldStartTasks/multi_modal/generate_text_from_video.py

@@ -23,34 +23,14 @@ from config import apolloConfig
 # os.environ["HTTPS_PROXY"] = "http://192.168.100.20:1087"
 
 const = VideoToTextConst()
-config = apolloConfig(env="prod")
+# config = apolloConfig(env="prod")
 
 # pool_size
-POOL_SIZE = int(config.getConfigValue("video_extract_pool_size"))
+# POOL_SIZE = int(config.getConfigValue("video_extract_pool_size"))
+POOL_SIZE = 20
 # batch_size
-BATCH_SIZE = int(config.getConfigValue("video_extract_batch_size"))
-
-def generate_transforming_prompt(title):
-    video_transforming_prompt = f"""
-        理解输入的视频内容 
-        视频的标题是 {title}
-        你是一名视频分析专家,你非常精通视频的内容的总结,我会给出你视频及视频的标题,现在请你进行仔细的视频分析,并按照以下要求进行回答
-        #要求
-        1.20个以上,30个以下的中文字符输出视频的选题,选题应该要达到使人能从选题中理解到视频主要想表达的内容,要包含这个视频的关键性内容和亮点内容,并针对你的选题进行关键信息和亮点的详细描述;
-        2.用中文概括视频的主要内容,需要包含该视频描述的核心事件或观点,可以包括具体事例。要求内容通顺易懂具有一定可读性,字数在180到230之间;
-        3.请严格控制输出的内容能够被正确解析为JSON;
-        output in JSON format with keys:
-        选题(str), 用 theme 来作为 key
-        描述(str), 用 description 来作为 key
-        你需要注意
-        1.关注我给出的视频中的主要内容,生成的描述主要面向的是50岁以上的老年人,语言风格要适配用户群体;
-        2.请针对视频的内容本身输出客观、具象的回答,你的分析必须基于视频内容,不能凭空想象; 
-        2.信息缺失和无法分析理解的部分请你忽略,不能自行编造回答
-        3.请只描述客观事实,不要加入任何主观评价性语言;请使用专业语言进行回答。不要出现概括性描述、主观猜测,抽象表述
-        4.语言表达上注意不要使用倒装句、长句、复杂句,尽量使用陈述句、简单句;
-        返回的结果的数据结果是字典 dict,不要做任何其他的解释或说明,不要出现```json等字段。
-    """
-    return video_transforming_prompt
+# BATCH_SIZE = int(config.getConfigValue("video_extract_batch_size"))
+BATCH_SIZE = 10
 
 
 def download_file(task_id, oss_path):
@@ -141,9 +121,11 @@ class GenerateTextFromVideo(object):
         success_upload_count = 0
         if rest_video_count:
             sql = f"""
-                select id, video_oss_path
-                from video_content_understanding 
-                where upload_status = {const.INIT_STATUS}
+                select t1.id, t1.video_oss_path
+                from video_content_understanding t1
+                join publish_single_video_source t2
+                on t1.content_trace_id = t2.content_trace_id
+                where t1.upload_status = {const.INIT_STATUS} and t2.video_pool_audit_status = {const.AUDIT_SUCCESS_STATUS} and t2.bad_status = 0
                 limit {rest_video_count};
             """
             task_list = self.db.fetch(sql, cursor_type=DictCursor)
@@ -243,14 +225,12 @@ class GenerateTextFromVideo(object):
                     case 'ACTIVE':
                         try:
                             video_text = self.google_ai_api.get_video_text(
-                                prompt=generate_transforming_prompt(task['video_ori_title']),
+                                prompt="分析我上传的视频的画面和音频,用叙述故事的风格将视频所描述的事件进行总结,需要保证视频内容的完整性,并且用中文进行输出,直接返回生成的文本",
                                 video_file=google_file
                             )
                             if video_text:
                                 print(type(video_text))
                                 print(video_text)
-                                if type(video_text) == dict:
-                                    video_text = json.dumps(video_text, ensure_ascii=False)
                                 update_sql = f"""
                                     update video_content_understanding
                                     set understanding_status = %s, video_text = %s, file_state = %s

+ 0 - 1
run_article_summary.py

@@ -6,5 +6,4 @@ from tasks.article_summary_task import ArticleSummaryTask
 
 if __name__ == '__main__':
     article_summary_task = ArticleSummaryTask()
-    article_summary_task.connect_db()
     article_summary_task.deal()

+ 21 - 25
tasks/article_summary_task.py

@@ -1,8 +1,8 @@
 """
 @author: luojunhui
 """
-
 import time
+import datetime
 import traceback
 
 from pymysql.cursors import DictCursor
@@ -21,13 +21,15 @@ def generate_prompt(text):
     生成prompt
     """
     prompt = f"""
-        你是1个优秀的公众号文章写作大师,我对你有以下要求
-        文章: {text}
-        1.请仔细阅读以上公众号文章,挑选文章中最吸引人的情节或话题,总结为100字左右文章精彩总结(字数计算包括标点符号)。
-        句子段落之间以悬念承接,可以吸引读者往下读第二句。
-        2.在这100字内容的结尾处,增加1-2句话的引导,引导大家去观看上面的视频了解详情。注意是点击上面的视频,不是下面的视频。
-
-        你最终输出一段总结内容,不用加标题或者主题,也不用写第几段、多少字这样的话。整体的语言风格要口语化、直接点,要让60岁以上的老年人能看懂、能共情。人的名字尽量用全名,不用简称。
+    你是1个优秀的公众号文章写作大师,我对你有以下要求
+    视频总结:{text}
+    
+    第一个要求:请仔细阅读以上视频总结,挑选其中最吸引人的情节或话题,总结为100字左右文章精彩总结(字数计算包括标点符号),这部分内容为段落1。
+    句子段落之间以悬念承接,可以吸引读者往下读第二句。
+    
+    第二个要求:在这100字内容的结尾处,增加1-2句话的引导,引导大家去观看上面的视频了解详情,可以加一些emoji表情。注意是点击上面的视频,不是下面的视频。这部分内容为段落2。
+    
+    你最终输出一段总结内容,将第一段和第二段之间空格一行,并且对所有文字进行加粗处理。不用加标题或者主题,也不用写第几段、多少字这样的话。整体的语言风格要口语化、直接点,要让60岁以上的老年人能看懂、能共情。人的名字尽量用全名,不用简称。
     """
     return prompt
 
@@ -38,12 +40,6 @@ class ArticleSummaryTask(object):
     """
 
     def __init__(self):
-        self.db_client = None
-
-    def connect_db(self):
-        """
-        连接数据库
-        """
         self.db_client = DatabaseConnector(db_config=long_articles_config)
         self.db_client.connect()
 
@@ -54,7 +50,7 @@ class ArticleSummaryTask(object):
         select_sql = f"""
             select id, video_text
             from video_content_understanding
-            where summary_status = {const.SUMMARY_INIT_STATUS} and status = {const.VIDEO_UNDERSTAND_SUCCESS_STATUS}
+            where summary_status = {const.INIT_STATUS} and understanding_status = {const.SUCCESS_STATUS}
             limit {const.SUMMARY_BATCH_SIZE};
         """
         task_list = self.db_client.fetch(select_sql, cursor_type=DictCursor)
@@ -69,7 +65,7 @@ class ArticleSummaryTask(object):
         update_sql = f"""
             update video_content_understanding
             set summary_status = %s
-            where summary_status = %s and status_update_timestamp < %s;
+            where summary_status = %s and summary_status_ts < %s;
         """
         rollback_rows = self.db_client.save(
             query=update_sql,
@@ -87,7 +83,7 @@ class ArticleSummaryTask(object):
 
         # Lock Task
         affected_rows = self.update_task_status(
-            task_id, const.SUMMARY_INIT_STATUS, const.SUMMARY_LOCK
+            task_id, const.INIT_STATUS, const.PROCESSING_STATUS
         )
         if not affected_rows:
             return
@@ -104,14 +100,14 @@ class ArticleSummaryTask(object):
             else:
                 # set as fail
                 self.update_task_status(
-                    task_id, const.SUMMARY_LOCK, const.SUMMARY_FAIL_STATUS
+                    task_id, const.PROCESSING_STATUS, const.FAIL_STATUS
                 )
         except Exception as e:
             print(e)
             print(traceback.format_exc())
             # set as fail
             self.update_task_status(
-                task_id, const.SUMMARY_LOCK, const.SUMMARY_FAIL_STATUS
+                task_id, const.PROCESSING_STATUS, const.FAIL_STATUS
             )
 
     def set_summary_text_for_task(self, task_id, text):
@@ -120,17 +116,17 @@ class ArticleSummaryTask(object):
         """
         update_sql = f"""
             update video_content_understanding
-            set summary_status = %s, summary_text = %s, status_update_timestamp = %s
+            set summary_status = %s, summary_text = %s, understanding_status_ts = %s
             where id = %s and summary_status = %s;
         """
         affected_rows = self.db_client.save(
             query=update_sql,
             params=(
-                const.SUMMARY_SUCCESS_STATUS,
+                const.SUCCESS_STATUS,
                 text,
-                int(time.time()),
+                datetime.datetime.now(),
                 task_id,
-                const.SUMMARY_LOCK,
+                const.PROCESSING_STATUS
             ),
         )
         return affected_rows
@@ -141,11 +137,11 @@ class ArticleSummaryTask(object):
         """
         update_sql = f"""
             update video_content_understanding
-            set summary_status = %s, status_update_timestamp = %s
+            set summary_status = %s, summary_status_ts = %s
             where id = %s and summary_status = %s;
         """
         update_rows = self.db_client.save(
-            update_sql, (new_status, int(time.time()), task_id, ori_status)
+            update_sql, (new_status, datetime.datetime.now(), task_id, ori_status)
         )
         return update_rows