淄博网站建设兼职建筑工程网名大全霸气

news/2025/9/23 12:06:52/文章来源:
淄博网站建设兼职,建筑工程网名大全霸气,中石化网站是哪个公司做的,怎么在百度建设网站前言 如今进行入自媒体行业的人越来越多#xff0c;短视频也逐渐成为了主流#xff0c;但好多时候是想如何把视频里面的语音转成文字#xff0c;比如#xff0c;录制会议视频后#xff0c;做会议纪要#xff1b;比如#xff0c;网课教程视频#xff0c;想要做笔记短视频也逐渐成为了主流但好多时候是想如何把视频里面的语音转成文字比如录制会议视频后做会议纪要比如网课教程视频想要做笔记比如需要提取视频中文案使用比如需要给视频加个字幕;这时候只要把视频转文字就好。 对于不是视频编辑专业人员处理起来还是比较麻烦的但网上也有好多可以用的小工具这些工具大多数都标榜有自己技术和模型但都是在线模型或者使用过一段时间之后就无法再使用了这些工具实际上都是基于一些大公司提供的接口衍生出来的AI工具使用效果也不错。但在处理的过程中处理的文件要上传到大公司的服务器进行处理这里可能会涉及到一些数据的安全问题。这些数据很大一部分有可能会涉及到数据泄露与安全的问题。 这个项目的核心算法是基于PaddlePaddle的语音识别加Python实现使用的模型可以有自己训练支持本地部署支持GPU与CPU推理两种文案可以处理短语音识别、长语音识别、实现输入的语音识别。 一、视频语音提取 想要把视频里面的语音进行识别首先要对视频里面的语音进行提取提取视频里的语音有很多用办法,可以借助视频编辑软件如Adobe Premiere Pro、Final Cut Pro中提取音频轨道然后将其导出为音频文件。 也可以借助工具如FFmpeg或者moviepy通过命令行将视频中的音频提取出来。 这里使用moviepy对视频里面的语音进行提取,MoviePy是一个功能丰富的Python模块专为视频编辑而设计。使用MoviePy可以轻松执行各种基本视频操作如视频剪辑、视频拼接、标题插入等。此外它还支持视频合成和高级视频处理甚至可以添加自定义高级特效。这个模块可以读写绝大多数常见的视频格式包括GIF。无论使用的是Mac、Windows还是Linux系统MoviePy都能无缝运行可以在不同平台上使用它。 MoviePy与FFmpeg环境安装 pip install moviepy pip install ffmpeg 因为使用moviepy提取出视频里面的音轨的比特率不是16000不能直接输入到语音识别模型里面这里还要借助FFmpeg的命来把音频采样率转成16000 提取音轨 def video_to_audio(video_path,audio_path):video VideoFileClip(video_path)audio video.audioaudio_temp temp.wavif os.path.exists(audio_path):os.remove(audio_temp)audio.write_audiofile(audio_temp)audio.close()if os.path.exists(audio_path):os.remove(audio_path)cmd ffmpeg -i audio_temp -ac 1 -ar 16000 audio_pathsubprocess.run(cmd,shellTrue)二、语音识别 1.PaddleSpeech语音识别 PaddleSpeech是一款由飞浆开源全能的语音算法工具箱其中包含多种领先国际水平的语音算法与预训练模型。它提供了多种语音处理工具和预训练模型供用户选择支持语音识别、语音合成、声音分类、声纹识别、标点恢复、语音翻译等多种功能。在这里可以找到基于PaddleSpeech精品项目与训练教程https://aistudio.baidu.com/projectdetail/4692119?contributionType1 语音识别(Automatic Speech Recognition, ASR) 是一项从一段音频中提取出语言文字内容的任务。 目前 Transformer 和 Conformer 是语音识别领域的主流模型关于这方面的教程可以看飞浆官方发的课程飞桨PaddleSpeech语音技术课程 2.环境依赖安装 我当前的环境是win10GPU是N卡3060使用cuda 11.8,cudnn 8.5,为了之后方便封装使用conda来安装环境如果没有GPU也可以装cpu版本 conda create -n video_to_txt python3.8 python -m pip install paddlepaddle-gpu2.5.1 -i https://pypi.tuna.tsinghua.edu.cn/simple 3. 模型下载 可以从官方git上下载到合适自己的模型https://github.com/PaddlePaddle/PaddleSpeech/blob/develop/README_cn.md 转换模型 import argparse import functoolsfrom ppasr.trainer import PPASRTrainer from ppasr.utils.utils import add_arguments, print_argumentsparser argparse.ArgumentParser(description__doc__) add_arg functools.partial(add_arguments, argparserparser) add_arg(configs, str, models/csfw/configs/conformer.yml, 配置文件) add_arg(use_gpu, bool, True, 是否使用GPU评估模型) add_arg(save_quant, bool, False, 是否保存量化模型) add_arg(save_model, str, models, 模型保存的路径) add_arg(resume_model, str, models/csfw/models, 准备导出的模型路径) args parser.parse_args() print_arguments(argsargs)# 获取训练器 trainer PPASRTrainer(configsargs.configs, use_gpuargs.use_gpu)# 导出预测模型 trainer.export(save_model_pathargs.save_model,resume_modelargs.resume_model,save_quantargs.save_quant)4.语音识别 使用模型进行短语音识别 def predict(self,audio_data,use_punFalse,is_itnFalse,sample_rate16000):# 加载音频文件并进行预处理audio_segment self._load_audio(audio_dataaudio_data, sample_ratesample_rate)audio_feature self._audio_featurizer.featurize(audio_segment)input_data np.array(audio_feature).astype(np.float32)[np.newaxis, :]audio_len np.array([input_data.shape[1]]).astype(np.int64)# 运行predictoroutput_data self.predictor.predict(input_data, audio_len)[0]# 解码score, text self.decode(output_dataoutput_data, use_punuse_pun, is_itnis_itn)result {text: text, score: score}return result看看识别结果是全部整成一块并没有短句与加标点符号 5.断句与标点符号 可以基于飞浆的ERNIE训练标点行号模型: 添加标点符号代码 import json import os import reimport numpy as np import paddle.inference as paddle_infer from paddlenlp.transformers import ErnieTokenizer from ppasr.utils.logger import setup_loggerlogger setup_logger(__name__)__all__ [PunctuationPredictor]class PunctuationPredictor:def __init__(self, model_dir, use_gpuTrue, gpu_mem500, num_threads4):# 创建 configmodel_path os.path.join(model_dir, model.pdmodel)params_path os.path.join(model_dir, model.pdiparams)if not os.path.exists(model_path) or not os.path.exists(params_path):raise Exception(标点符号模型文件不存在请检查{}和{}是否存在.format(model_path, params_path))self.config paddle_infer.Config(model_path, params_path)# 获取预训练模型类型pretrained_token ernie-1.0if os.path.exists(os.path.join(model_dir, info.json)):with open(os.path.join(model_dir, info.json), r, encodingutf-8) as f:data json.load(f)pretrained_token data[pretrained_token]if use_gpu:self.config.enable_use_gpu(gpu_mem, 0)else:self.config.disable_gpu()self.config.set_cpu_math_library_num_threads(num_threads)# enable memory optimself.config.enable_memory_optim()self.config.disable_glog_info()# 根据 config 创建 predictorself.predictor paddle_infer.create_predictor(self.config)# 获取输入层self.input_ids_handle self.predictor.get_input_handle(input_ids)self.token_type_ids_handle self.predictor.get_input_handle(token_type_ids)# 获取输出的名称self.output_names self.predictor.get_output_names()self._punc_list []if not os.path.join(model_dir, vocab.txt):raise Exception(字典文件不存在请检查{}是否存在.format(os.path.join(model_dir, vocab.txt)))with open(os.path.join(model_dir, vocab.txt), r, encodingutf-8) as f:for line in f:self._punc_list.append(line.strip())self.tokenizer ErnieTokenizer.from_pretrained(pretrained_token)# 预热self(近几年不但我用书给女儿儿压岁也劝说亲朋不要给女儿压岁钱而改送压岁书)logger.info(标点符号模型加载成功。)def _clean_text(self, text):text text.lower()text re.sub([^A-Za-z0-9\u4e00-\u9fa5], , text)text re.sub(f[{.join([p for p in self._punc_list][1:])}], , text)return text# 预处理文本def preprocess(self, text: str):clean_text self._clean_text(text)if len(clean_text) 0: return Nonetokenized_input self.tokenizer(list(clean_text), return_lengthTrue, is_split_into_wordsTrue)input_ids tokenized_input[input_ids]seg_ids tokenized_input[token_type_ids]seq_len tokenized_input[seq_len]return input_ids, seg_ids, seq_lendef infer(self, input_ids: list, seg_ids: list):# 设置输入self.input_ids_handle.reshape([1, len(input_ids)])self.token_type_ids_handle.reshape([1, len(seg_ids)])self.input_ids_handle.copy_from_cpu(np.array([input_ids]).astype(int64))self.token_type_ids_handle.copy_from_cpu(np.array([seg_ids]).astype(int64))# 运行predictorself.predictor.run()# 获取输出output_handle self.predictor.get_output_handle(self.output_names[0])output_data output_handle.copy_to_cpu()return output_data# 后处理识别结果def postprocess(self, input_ids, seq_len, preds):tokens self.tokenizer.convert_ids_to_tokens(input_ids[1:seq_len - 1])labels preds[1:seq_len - 1].tolist()assert len(tokens) len(labels)text for t, l in zip(tokens, labels):text tif l ! 0:text self._punc_list[l]return textdef __call__(self, text: str) - str:# 数据batch处理try:input_ids, seg_ids, seq_len self.preprocess(text)preds self.infer(input_idsinput_ids, seg_idsseg_ids)if len(preds.shape) 2:preds preds[0]text self.postprocess(input_ids, seq_len, preds)except Exception as e:logger.error(e)return text 推理结果 6.长音频识别 长音频识别要通过VAD分割音频再对短音频进行识别拼接结果最终得到长语音识别结果。 VAD也就是语音端点检测技术是Voice Activity Detection的缩写。它的主要任务是从带有噪声的语音中准确的定位出语音的开始和结束点。 def get_speech_timestamps(self, audio, sampling_rate):self.reset_states()min_speech_samples sampling_rate * self.min_speech_duration_ms / 1000min_silence_samples sampling_rate * self.min_silence_duration_ms / 1000speech_pad_samples sampling_rate * self.speech_pad_ms / 1000audio_length_samples len(audio)speech_probs []for current_start_sample in range(0, audio_length_samples, self.window_size_samples):chunk audio[current_start_sample: current_start_sample self.window_size_samples]if len(chunk) self.window_size_samples:chunk np.pad(chunk, (0, int(self.window_size_samples - len(chunk))))speech_prob self(chunk, sampling_rate).item()speech_probs.append(speech_prob)triggered Falsespeeches: List[dict] []current_speech {}neg_threshold self.threshold - 0.15temp_end 0for i, speech_prob in enumerate(speech_probs):if (speech_prob self.threshold) and temp_end:temp_end 0if (speech_prob self.threshold) and not triggered:triggered Truecurrent_speech[start] self.window_size_samples * icontinueif (speech_prob neg_threshold) and triggered:if not temp_end:temp_end self.window_size_samples * iif (self.window_size_samples * i) - temp_end min_silence_samples:continueelse:current_speech[end] temp_endif (current_speech[end] - current_speech[start]) min_speech_samples:speeches.append(current_speech)temp_end 0current_speech {}triggered Falsecontinueif current_speech and (audio_length_samples - current_speech[start]) min_speech_samples:current_speech[end] audio_length_samplesspeeches.append(current_speech)for i, speech in enumerate(speeches):if i 0:speech[start] int(max(0, speech[start] - speech_pad_samples))if i ! len(speeches) - 1:silence_duration speeches[i 1][start] - speech[end]if silence_duration 2 * speech_pad_samples:speech[end] int(silence_duration // 2)speeches[i 1][start] int(max(0, speeches[i 1][start] - silence_duration // 2))else:speech[end] int(min(audio_length_samples, speech[end] speech_pad_samples))speeches[i 1][start] int(max(0, speeches[i 1][start] - speech_pad_samples))else:speech[end] int(min(audio_length_samples, speech[end] speech_pad_samples))return speeches进行长语音识别 def predict_long(self,audio_data,use_punFalse,is_itnFalse,sample_rate16000):self.init_vad()# 加载音频文件并进行预处理audio_segment self._load_audio(audio_dataaudio_data, sample_ratesample_rate)# 重采样方便进行语音活动检测if audio_segment.sample_rate ! self.configs.preprocess_conf.sample_rate:audio_segment.resample(self.configs.preprocess_conf.sample_rate)# 获取语音活动区域speech_timestamps self.vad_predictor.get_speech_timestamps(audio_segment.samples, audio_segment.sample_rate)texts, scores , []for t in speech_timestamps:audio_ndarray audio_segment.samples[t[start]: t[end]]# 执行识别result self.predict(audio_dataaudio_ndarray, use_punFalse, is_itnis_itn)score, text result[score], result[text]if text ! :texts texts text if use_pun else texts textscores.append(score)logger.info(f长语音识别片段结果{text})if texts[0] : texts texts[1:]# 加标点符号if use_pun and len(texts) 0:if self.pun_predictor is not None:texts self.pun_predictor(texts)else:logger.warning(标点符号模型没有初始化)result {text: texts, score: round(sum(scores) / len(scores), 2)}return result推理结果: 断句结果 有些大宝贝我是真的不知道你们是咋想的我给一对单身男女叫我对象男女都是同岁的二十八岁女方是幼儿园老师这个南方是工程师上个月初两人是第一次见面互相印象都不错呀于是又安排见了三四次就这么断断续续地认识了一个多月昨天晚上两人又见了面啊吃了饭之后呢… 三、UI与保存 1. UI界面 为了方便应用这里使用Gradio这个库Gradio是一个开源的Python库用于快速构建机器学习和数据科学演示的应用。它可以帮助你快速创建一个简单漂亮的用户界面以便向客户、合作者、用户或学生展示你的机器学习模型。此外还可以通过自动共享链接快速部署模型并获得对模型性能的反馈。在开发过程中你可以使用内置的操作和解释工具来交互式地调试模型。Gradio适用于多种情况包括为客户/合作者/用户/学生演示机器学习模型、快速部署模型并获得性能反馈、以及在开发过程中使用内置的操作和解释工具交互式地调试模型。 pip install gradio #可以使用清华镜像源来更快的安装 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple gradio import os from moviepy.editor import * import subprocess import gradio as gr from ppasr.predict import PPASRPredictor from ppasr.utils.utils import add_arguments, print_argumentsconfigs models/csfw/configs/conformer.yml pun_model_dir models/pun_models/ model_path models/csfw/modelspredictor PPASRPredictor(configsconfigs,model_pathmodel_path,use_gpuTrue,use_punTrue,pun_model_dirpun_model_dir)def video_to_audio(video_path):file_name, ext os.path.splitext(os.path.basename(video_path))video VideoFileClip(video_path)audio video.audioaudio_temp temp.wavaudio_name file_name .wavif os.path.exists(audio_temp):os.remove(audio_temp)audio.write_audiofile(audio_temp)audio.close()if os.path.exists(audio_name):os.remove(audio_name)cmd ffmpeg -i audio_temp -ac 1 -ar 16000 audio_namesubprocess.run(cmd,shellTrue)return audio_namedef predict_long_audio(wav_path):result predictor.predict_long(wav_path, True, False)score, text result[score], result[text]return text# 短语音识别 def predict_audio(wav_path):result predictor.predict(wav_path, True, False)score, text result[score], result[text]return textdef video_to_text(video,operation):audio_name video_to_audio(video)if operation 短音频:text predict_audio(audio_name)elif operation 长音频:text predict_long_audio(audio_name)else:text print(视频语音提取识别完成)return textch gr.Radio([短音频,长音频],label选择识别音频方式)demo gr.Interface(fnvideo_to_text,inputs[gr.Video(), ch],outputstext)demo.launch()执行结果 视频语音提取并转文字 2. 保存识别结果 四、优化与升级 1.优化 该项目目前能识别的语音的词错率为0.083327对一些语音相近的词语并不能联系上下文进行修改比如这句 “这个南方是工程师” 这里通过上下文联想正确的应该是 “这个男方是工程师” 这样的识别错误并不是很多还有一些断句没有断好的如果要优化可以加LLM(大语言模型)来进行一次错误的筛选这个接入LLM的代码在训练和测试阶段。 2.升级 项目可升级 当前项目只针对中文语音之后会加多语言支持。视频没有字幕可以给视频添加字幕生成模块。视频有字幕读取视频画面的字幕并使用OCR识别与语音识别相互验证。添加支持web版本。可选段对视频语音进行提取识别。对多人对话的场景的视频可以加入声纹识别后格式化识别。把生成的文字输出到word并进行排版。 3. 项目源码 源码https://download.csdn.net/download/matt45m/88386353 模型 源码配置 conda create -n video_to_txt python3.8 python -m pip install paddlepaddle-gpu2.5.1 -i https://pypi.tuna.tsinghua.edu.cn/simple cd VideoToTxt pip install -r requirements.txt python video_txt.py 然后用浏览器打开http://127.0.0.1:7860/ 就可以使用了。 4.备注 如果对该项目感兴趣或者在安装的过程中遇到什么错误的的可以加我的企鹅群487350510大家一起探讨。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/912486.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html做网站自适应宽度网络推广方式方法

在互联网的浩瀚星空里,火星文和变异字体如同璀璨的繁星,照亮了网络世界的角落。它们以独特的创意和视觉冲击力,吸引着无数网友的目光。让我们一起走进这个充满创意和想象力的世界,感受火星文和变异字体的无限魅力。 火星文生成器…

wordpress网站弹窗插件做网站公司南京

为何诞生 在说transformer是什么,有什么优势之类的之前,先谈一谈它因何而诞生。transformer诞生最重要的原因是早先的语言模型,比如RNN,由于其本身的训练机制导致其并行度不高,特别是遇到一些长句子的情况下。其次&…

织梦高端大气网站模板外卖网站建设的策划书

打卡记录 需要添加的硬币的最小数量(归纳法) 链接 按着已经加入的数,以此偏移对应距离,从而得到新的连续数,若是出现断层则计入最小次数中,再以此偏移对应距离。 class Solution:def minimumAddedCoins(s…

个人网站当企业网站用互联网保险平台有哪些

hello-algo 是一个为帮助编程爱好者系统地学习数据结构和算法的开源项目。这款项目通过多种创新的方式,为学习者提供了一个直观、互动的学习平台。 本文将详细的介绍如何利用 Docker 在本地安装部署 hello-algo,并结合路由侠内网穿透实现外网访问本地部署…

画江湖网站开发文档淄博 网站制作

文章目录一、安装虚拟机1. 新建虚拟机2. 稍后安装3. 选择linux版本4. 安装位置5. 处理器配置6. 内存配置7. 网络配置8. 创建新磁盘9. 设置磁盘大小10. 选择镜像,完成二、虚拟机配置2.1. 重新启动2.2. 选择语言2.3. 设置时区2.4. 选择安装模式2.5. 自定义分区2.6. 接…

洛谷题单指南-进阶数论-P3811 【模板】模意义下的乘法逆元

原题链接:https://www.luogu.com.cn/problem/P3811 题意解读:逆元的模版题。 解题思路: 1、同余和模运算 同余定义:若整数 a 和 b 除以 m 的余数相同,称 a 与 b 模 m 同余,记为 a ≡ b (mod m) 模运算符号:a mo…

北京交通管制信息网站wordpress 获取页面标题

题目 输入一个字符串,打印该字符中字符的所有排列。 例如,输入字符串abc,则打印出由字符a、b、c所能排列出来的所有字符串有abc、acb、bac、bca、cab、cba 分析 把一个字符串看成由两部分组成:第一部分是它的第一个字符&#…

山西省建设局官方网站中企动力值不值得入职

19-20年VIO 梳理 1. 开源代码介绍: DSM2. FMD Stereo SLAM:融合MVG和直接方法,实现准确,快速的双目SLAM3. 基于VINS-Mono开发的SPVIS4. 改进:一种基于光流的动态环境移动机器人定位方案5. PVIO:基于先验平面约束的高效…

消防设备网站建设怎么找做网站的

事务的简单配置及使用 配置事务管理器声明队列生产者代码测试 RabbitMQ是基于AMQP协议实现的,该协议实现了事务机制,因此RabbitMQ也支持事务机制. SpringAMQP也提供了对事务相关的操作.RabbitMQ事务允许开发者确保消息的发送和接收是原子性的&#xff0c…

贵阳市观山湖区建设局网站深圳系统开发高端网站建设

1. probability space 概率空间 1.1 概率基础 1.2 概率空间 2. Filtration filtration在钱敏平老师和龚光鲁老师的《随机过程论》中直接称其为非降的KaTeX parse error: Undefined control sequence: \sigmma at position 1: \̲s̲i̲g̲m̲m̲a̲代数族。如图。 一般叫σ\…

科技公司网站设计欣赏从零开始学习网络营销

目录 0. 前言1. Ubuntu24.04的安装2. Ubuntu24.04的配置2.1 基本配置2.2 开发环境配置 0. 前言 我去年在做一个项目的时候需要用到ros,ros需要运行在Ubuntu系统上。但我的笔记本电脑配置不是很好,采用虚拟机运行的想法随之被否决,决定采用安…

中山网站设计与建设全球新冠最新数据报告

SpringBoot-AOP AOP基础 学习完spring的事务管理之后,接下来我们进入到AOP的学习。 AOP也是spring框架的第二大核心,我们先来学习AOP的基础。 在AOP基础这个阶段,我们首先介绍一下什么是AOP,再通过一个快速入门程序&#xff0c…

四川成都网站优化oppo网站建设

1、WPF 4 DataGrid 控件(基本功能篇) 基本使用,绑定数据展示 2、WPF 4 DataGrid 控件(自定义样式篇) 定义行,列,头,单元格等样式 3、WPF 4 DataGrid 控件(进阶篇一&#…

电子书城网站开发项目概况洛阳建站哪家好

1049. 数列的片段和(20) 时间限制200 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者CAO, Peng给定一个正数数列,我们可以从中截取任意的连续的几个数,称为片段。例如,给定数列{0.1, 0.2, 0.3, 0.4},我们有(0.1) (0.1…

如何通过做网站挣钱天猫开店流程及费用2022

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 进度条是一个比较常见的控件。如果某个操作需要很长的时间才能完成,那么这个时候最好有一个进度条提示,这样比较容易平复一…

Interlocked.Increment学习

Interlocked.Increment 是 .NET 中的一个原子操作方法,用于线程安全地将一个整型变量递增 1。Interlocked.Increment 是线程安全地递增整数的标准方式,适用于高并发计数场景。定义: public static int Increment(re…

完整教程:网络安全期末大论文

完整教程:网络安全期末大论文2025-09-23 11:53 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !importan…

基于解析法的四轴SCARA机器人正逆运动学代码

一、正运动学实现(C++) #include <cmath> #include <array>struct Pose {double x, y, z; // 末端位姿double yaw; // 末端偏航角 };// DH参数定义(示例值) const double L1 = 0.2; // 基座到J…

.Net-IIS 文件上传安全漏洞问题

近期勒索病毒、网络攻击频繁。经发现攻击会通过 暴露在公网上的系统地址进行扫描,找到文件上传漏洞,把注入了执行文件加密命令的脚本 写入到网站界面文件里。通过文件上传方法把文件上传到服务器上(篡改文件类型方式…

【F#学习】记录 Record

记录,record, 是一些字段的集合。使用type关键字来定义一个record。记录的字段需要放置在花括号{}之内,需要明确地声明类型和名称。新建一个记录的实例的时候,必须给所有字段赋值。 定义一个记录的时候,字段必须换…