★★★ 本文源自AI Studio社区精品项目,【点击此处】查看更多精品内容 >>>
零.项目背景
目标:针对会议场景的长视频或者长语音,自动生成会议记录并通过摘要生成技术形成会议摘要。
一.技术流程
1.通过moviepy 提取视频中的音频,并且对音频转换采样率
# 安装 moviepy 和 ffmpy
!pip install ffmpy
!pip install moviepy
2.通过PaddleSpeech 做音频识别成文本,以及对文本进行标点恢复
# 安装 paddleSpeech
!pip install pytest-runner
!pip install paddlespeech
# 将nltk_data 拷贝到 /home/aistudio 目录
!cp -r /home/aistudio/work/nltk_data /home/aistudio
3.通过PaddleNLP中的UIE框架进行信息抽取和文本摘要抽取
# 安装 paddlenlp
!pip install --upgrade paddlenlp
二.音频提取和转换采样率
原视频放在 work/video目录,首先通过moviepy 和 FFmpeg提取音频转换指定采样率
# 从视频中抽取音频,转换采样率,16k 是适用paddlespeech的采样率def pre(self, filename):self.videoPath = './video/'+filename+'.mp4'self.audioPath = './audio/'+filename+'.wav'self.audioInputs = './audio/'+filename+'/inputs'self.audioOutputs = './audio/'+filename+'/outputs'if os.path.exists(self.audioInputs) is False:os.makedirs(r''+self.audioInputs)if os.path.exists(self.audioOutputs) is False:os.makedirs(r''+self.audioOutputs)if os.path.exists(self.audioPath):return True# 从视频中抽取音频,同时转为16k采样率音频ff = FFmpeg(inputs={self.videoPath: None}, outputs={self.audioPath: '-f {} -vn -ac 1 -ar 16000 -y'.format('wav')})ff.run()
因为PaddleSpeech 需要用16k采用率,已经音频长度限制(50s),所以还需要对长音频进行分割为短音频
# 将长音频分割为 50秒的短音频def split(self, filename):self.delfiles(self.audioInputs)self.delfiles(self.audioOutputs)audio = AudioFileClip(self.audioPath)loops = math.ceil(audio.duration/self.audioLengthMax)print(audio.duration, loops)# 每隔180秒切分if audio.duration <= self.audioLengthMax:audio.write_audiofile('./audio/'+filename+'/0.wav')else:for i in range(loops):audio = AudioFileClip(self.audioPath)start = i*self.audioLengthMaxend = (i+1)*self.audioLengthMax if loops > i + 1 else audio.durationsubaudio = audio.subclip(start, end)subaudioPath = self.audioInputs+'/'+str(i)+'.wav'print(subaudio.duration,start, end,subaudioPath)subaudio.write_audiofile(subaudioPath)cmd = "ffmpeg -i " + subaudioPath + " -ar 16000 " + self.audioOutputs+'/'+str(i)+".wav" #ffmpeg -i 输入文件 -ar 采样率 输出文件subprocess.call(cmd, shell=True)return loops
三.音频识别
通过PaddleSpeech进行音频识别。
PaddleSpeech 是基于飞桨 PaddlePaddle 的语音方向的开源模型库,用于语音和音频中的各种关键任务的开发,包含大量基于深度学习前沿和有影响力的模型
# 音频识别,将一系列短音频识别文字,保存在 /work/text/filename 目录def text(self, filename, loops):texts = []asr = ASRExecutor()for i in range(loops):res = asr(audio_file=self.audioOutputs+'/'+str(i)+".wav")print(res)texts.append(res)text = "".join(texts)self.textSave(filename, 'input', text)return text
四.标点恢复
通过PaddleSpeech进行标点恢复,最后合并成一个正常的会议记录文本
# 标点恢复,输入文件名和长内容文本,PaddleSpeech 标点恢复有文本长度限制,这边textLengthMax 设置为500字。def punctuation(self, filename, content):text_punc = TextExecutor()loops = math.ceil(len(content)/self.textLengthMax)texts = []for i in range(loops):start, end = int(i*self.textLengthMax), int((i+1)*self.textLengthMax)print(start, end)text = content[start:end]result = text_punc(text=text)print(result)texts.append(result)text = "".join(texts)self.textSave(filename, 'output', text)return text
五.会议信息抽取
通过PaddleNLP进行文本摘要抽取和实体,关系,事件 抽取
更加实际内容进行抽取设定,最后抽取内容保存在 work/outputs 目录,里面包含必要的会议要素(如有)
# 会议信息抽取
def extract(self, filename, text):result = {}summarizer = Taskflow("text_summarization")summary = summarizer(text)print(summary)schema = ['会议时间','会议地点','会议记录人','会议议题']ie = Taskflow('information_extraction', schema=schema)res = ie(text)print(res)for label, values in res[0].items():items = []for value in values:if value['probability'] > self.ratioLimit:items.append(value['text'])result[label] = itemsresult['摘要'] = summaryresult['记录'] = textwith open('./outputs/'+filename+'.txt','w')as f:f.write(json.dumps(result, ensure_ascii=False))
以下是一个抽取结果的示例,json 格式方便后续生成word或者pdf提供数据
{"会议时间": ["今天", "今天", "六月一日"],"会议记录人": ["组织委员"],"会议议题": ["评选优秀共产党员", "评选"],"摘要": ["山东省纪委通报六起违纪行为"],"记录": "我在本次会议中,模拟党支部书记;我在本次会议中,模拟党支部副书记;我在本次会议中,模拟组织委员;我在本次会议中,模拟宣传委员;我在本次会议中,模拟纪检委员;今天,我们召开支委会,讨论年究近期工作,会前,与各位委员进行了充分沟通,确定了本次织委会的三项议题:讨论、评选优秀共产党员;二是讨论本月绩效考核;三是讨论奋战七十天,警场全达标的工作安排;下面,开始开会,首先,请组织委员清点人数,今天,阴到,作委委员五人,迟到五人,符合会议要求,可以开会;下面,先由季检委员进行连接教育,今天的连接教育,向大家通报:山东省纪委通报的六起违:一、反:中央八向归星、减刑精神问题:一、济南市市中区原书记仲鸿夯违规出入私人会所问题;二、济宁市委原丰女市长程大志违规收受李没问题;三、枣庄市工商局党组成员、副局长马洪山办公用品、办公用方面积超标、违规使用公务车问题;四、淄博市临淄区综合形政执法局党委书记、局长编辑俊违规进工款、购买德、澳、荡白酒问题;五、莱芜市莱城区环保局副主任、客员李新违规使用公车、接受监管服务对象宴请问题;六、烟台市木生区建筑工程质量监督站原党支部书记、站长任光辉违规操办女儿婚宴问题;上述六起问题、违纪行为,全部发生在中央八项规定出台以后,其中五起发生,或持区,到二零一七年,是典型的,明知故犯、顶峰违纪,这充分说明,有的党员、干部仍然心。存侥幸,对中央和省委的三零五申,炙若罔闻,不收敛,不收手,不知指,自,认为采取变通、便异方式,就能够逃避监督,必须受到严肃查处,今天的连接交育结束,下面,对三项议题,分别进行讨论:第一项:议题:讨论:评选,推荐优秀共产党员,根据上级先进评选通知要求,支委会结合工作实际,提出并通过了全员推荐及全体党员,通过无记名投票进行推荐的方案,经过党员大会民主评议、推荐,共推选出三名优秀共产党员,初步人选,分别是:月、曹丽丽、邱建,按照两名先进名额的分贝要求,请大家本着公平、公正、对同志负责任的态度,发表意见,建议评选出我们支部最优秀的党员,向管理区党委推荐!好的,我先说一下:我推荐:曹丽丽和邱建,因为他们两人在去年的新息化技术比赛中,荣获了中石化团体一等奖,为我们管理区和油田征得了荣誉,也带动了大家的学习积极性,起到了良好的示范作用,所以,我推荐他们两人;我建议:推荐:乐克盛和曹丽丽,岳克胜同志是一名老党员,虽然徐习能力不如邱建,但是他身上有着对工作特别负责任的态度,在本职岗位上非常地尽职尽责,年龄虽然大,但是在工作中,从来不含糊,款力,总是想尽办法完成各项工作,在办单中,起到了很好的表率作用;曹立宇同志在本职岗位和培训工作中的成绩也是有目共睹,所以,我的意见是:推荐月克胜和曹丽丽,我同意纪检委员的意见,曹丽丽同志对工作一直非常认真。尤其是分管的培训工作,经常加班加点,带领大家学习,在这次支持近赛中,更是发挥了很好的作用,同时,岳高胜同志,所分管的安全工作,在本次安全比武中,获得了优异的成绩,所以说,我推荐曹丽丽和岳和胜同志,我同意!组织委员的意见,邱建同志,虽然在学习方面比较优秀,也取得了非常不错的成绩,但是,现场的应用学习的带动性方面,还有待提高,他们班战的员工,还有重金工,鉴定,没有通过的,这种情况,以后,应该还好地利用平时工作的机会,不断提高班占人员的技能水平,这是我个人的意见,刚才大家都谈了各自的意见,我来谈谈我的建议:我建议推荐月客盛、曹丽丽两名同志,因为他们在工作中尽职尽责,干一行,按一行,最后,我们进行投票,表决,选出两名优秀共产党员,首先,由宣传委员发放选票,大家请看选票,选票上有三名党员的名字,同意的代名字,下面画对号,不同意的画叉,每张选票选两名,优秀党员,多选作废,请大家填写选票,填完选票后,交给纪检委员,想票,回出,完毕,发出五张,回收,五张,好,由季节委员、宣传委员统计,选票,五,要的,我就上一下,现在宣布投票结果,约克胜五票,曹丽丽四票,邱建一票,根据投票情况,本次织委会推选岳克胜、曹丽丽为优秀共产党员,下周,利用党员大会的时间,向全体党员通好,党支部副书记,把会议的评选结果向管理区党委上报,下面进行第二项议题,讨论,本月绩效考核,会前,已与相关。委员进行了沟通,行,成了初步方案,下面由副书记对照考核内容,进行讨论,下面,我来介绍一下,本月的这个考核情况,于是,本月采油厂案件,范保科检查,考核,十四项问题,考发结额是两千元,其中有六项,属于以上报代,整改的问题,不予考核,另外八项,共计八百元,属于班组管理问题,要对,下到相关班组,合责任人,第二个,本月,我们评处了三个优学,现场,供六百元,按照相关考核规定,全额兑下到相应岗位,呃,以下是本月奖成分配明细表,并发给大家了,请大家分别发表意见!行,我来先说说我的意见,本月中午,加班和衣锦穿孔挖坑,经过现场落实之后,啊,啊,难度特别大,以往的三十元的奖励标准偏低,我建议再增加十员,对于其他,没有意义,我这里有一项问题,就一口,注:睡井的奖值问题,存在,意义,就是和山西杠五十二,入水井下法栏收入的渗漏的问题,搬站,已经进行过多次整改,但是需要作业动力,才能更换,下法栏,在更换之前,进行,由管理区协调,安全,协调,采用场,不要再进行,江惩,其他的,没有意见,我认为,在问题得到妥善的整改之前,还要督促班站做好寻护和检查,避免问题的进一步扩大,现在总结一下,关于养成,明细,李四同志,奖励,增加十元,大家对这个决议有没有意见?现在进行举手表决,同意的,请举手,好,请放下,不同意的,请举手,没有弃权的,请举手,没有好,经过举手,表决,一致,通过,本月绩效考核方案,请党支部副书记抓好组织!实施:下面,讨论第三项议题:奋战七十天,警场全达标工作安排,这项工作,时间紧,任务重,警场情况也比较复杂,会钱,各支委成员进行了酝酿,沟通,按照采油厂有关要求,和支尾成员的意见,建议,只部结合具体实际,拟定了实施方案,实施方案已经下发给了大家,请大家提出修改的建议,我先谈一下我个人的看法,这个具体的工作部署中,对这个达标提收阶段的时间安排和建议,改到六月一日,这样,从六月一日到十五日,这段时间,我们可以对前期工作进行自查,查漏补缺,这样对下一步的营检会有必较大的帮助,我个人的意见,我同意,邢书记的意见,对于其他没有意义,我同意,同时,建议,随时发现问题,及时督促整改,防止问题,积多极大,对整改前后的照片,做好收集,归档,其他的没有意义,我没有意见,好,大家对达标提升阶段的时间安排,改制,六月一日,都没有意见,大家对实施方案有没有意见?现在进行举手表决,同意的,请举手,请放下,不同意的,请举手,没有,弃权的,请举手,没有好,经过举手,表决,一致通过,奋战七十天,警场前达标工作实施方案,事时,召开党员大会,向全体党员通报,并组织实施,会后,请各支委签字确认,决议,组织委员要将记录归档,请各支委签字,确认,决议,组织委员要将记录归档,好,赛会!"
}
五.一键生成会议记录示例
原始视频已经上传至 work/video 目录下
生成的文件在 work/outputs 目录下
meeting_formal 为视频文件名。通过修改 work/main.py 目录配置,可以一直到自己的项目中
# 运行
%cd /home/aistudio/work/
!python main.py meeting_formal
六.总结
通过对moviepy,ffmpeg,paddlespeech,paddlenlp的组合运用,从长视频或音频中生成会议记录,根据实际的会议内容,设置不同的抽取参数,生成合适的会议关键数据