当前位置: 首页 > news >正文

如何做网站将数据上传高端网站开发费用

如何做网站将数据上传,高端网站开发费用,上海外贸公司招聘职位,自助制作网站大家好#xff0c;我是烤鸭#xff1a; 最近在尝试做视频的质量分析#xff0c;打算利用asr针对声音判断是否有人声#xff0c;以及识别出来的文本进行进一步操作。asr看了几个开源的#xff0c;最终选择了openai的whisper#xff0c;后来发现性能不行#xff0c;又换了…大家好我是烤鸭 最近在尝试做视频的质量分析打算利用asr针对声音判断是否有人声以及识别出来的文本进行进一步操作。asr看了几个开源的最终选择了openai的whisper后来发现性能不行又换了whisperX。这是一篇实战和代码为主的文章。 引言 OpenAI的Whisper是一款强大的自动语音识别ASR模型它支持多语种识别包括中文且经过大量的多语言和多任务监督数据训练具有出色的鲁棒性和准确性。Python作为一种功能强大的编程语言其丰富的库和简洁的语法使其成为实现语音识别功能的理想选择。本文将介绍如何利用Python集成Whisper实现高效的语音识别。 目前一天小千的视频调用平均时长3分钟。显卡是4090平均识别耗时30s以内业务无压力。 Whisper模型简介 Whisper是一个开源的语音识别模型它基于Transformer架构通过从网络上收集的680,000小时多语言数据进行训练能够实现对多种语言的准确识别。此外该模型对口音、背景噪音和技术语言具有很好的鲁棒性使得其在实际应用中具有广泛的应用前景。 WhisperX 地址 https://github.com/m-bain/whisperX 安装环境 linux 显卡是 4090 cuda pytorch ffmpeg python 需要的依赖 pip install --no-cache-dir flask -i https://mirrors.aliyun.com/pypi/simple pip install --no-cache-dir ffmpeg-python -i https://mirrors.aliyun.com/pypi/simple pip install --no-cache-dir wheel -i https://mirrors.aliyun.com/pypi/simple pip install --no-cache-dir zhconv -i https://mirrors.aliyun.com/pypi/simple pip install --no-cache-dir numpy -i https://mirrors.aliyun.com/pypi/simple pip install --no-cache-dir openai-whisper -i https://mirrors.aliyun.com/pypi/simple pip install --no-cache-dir kafka-python -i https://mirrors.aliyun.com/pypi/simple pip install --no-cache-dir fastapi -i https://mirrors.aliyun.com/pypi/simple pip install --no-cache-dir uvicorn -i https://mirrors.aliyun.com/pypi/simple pip install --no-cache-dir psutil -i https://mirrors.aliyun.com/pypi/simple pip install --no-cache-dir gputil -i https://mirrors.aliyun.com/pypi/simple pip install --no-cache-dir requests -i https://mirrors.aliyun.com/pypi/simple pip install --no-cache-dir use-nacos -i https://mirrors.aliyun.com/pypi/simple pip install --no-cache-dir pyyaml -i https://mirrors.aliyun.com/pypi/simple pip install --no-cache-dir rocketmq-client-python -i https://mirrors.aliyun.com/pypi/simple预期的功能 我想实现的是单台机器性能打满并行识别asr接口可以无限制接收请求异步返回结果。 接口层 使用的是 fastapi 框架 import concurrent.futures import os import timeimport ffmpeg import platform import uvicorn import asyncio import psutil from fastapi import FastAPI, BackgroundTasks, HTTPException, status, Query from fastapi.responses import JSONResponse import GPUtil import requests import jsonfrom dict_time import TimedMap from parse_video_param import VideoRequest from parse_video_callback_param import VideoCallbackRequest from api_result import ApiResult from whisper_processor import video_process from whisperX_processor20241119 import video_process_whisperX from logging_config import KAFKA_LOGGER from nacos_config20241119 import register_nacosapp FastAPI() executor concurrent.futures.ThreadPoolExecutor(max_workers1) # 线程池 # 定义CPU使用率阈值 threshold_cpu_usage 95 # 例如你希望CPU使用率不超过95% threshold_gpu_usage_MB 2400 # 例如你希望显存使用大小 MB timed_map TimedMap()app.post(/xxxx-video/whisperx) async def parse_video(request: VideoRequest, background_tasks: BackgroundTasks):if not request or not request.path:raise HTTPException(status_codestatus.HTTP_400_BAD_REQUEST, detailNo video URL provided)print(fparse_video, params:{request})# 将处理任务添加到后台任务中以便不阻塞主线程background_tasks.add_task(process_video_whisperx, request, background_tasks)# 立即返回处理中响应告诉客户端请求已经被接收并正在处理api_result ApiResult(1, success, , )return JSONResponse(api_result.to_dict(), status_codestatus.HTTP_200_OK) # 异步函数来下载和处理视频 async def process_video_whisperx(request: VideoRequest, background_tasks: BackgroundTasks):def sync_process_video_whisperx(request):text try:# 记录方法耗时start_time_single time.time()# 下载视频并保存到临时文件url request.pathchunk_size request.chunk_size# 如果当前cpu使用率超过80%,就把该数据重新加到任务里# 获取当前CPU使用率cpu_usage psutil.cpu_percent(interval1, percpuFalse)print(f当前cpu利用率:{cpu_usage})KAFKA_LOGGER.info(f当前cpu利用率:{cpu_usage})# 获取所有GPU的信息gpus GPUtil.getGPUs()isGpuSuffiencent True# 判断CPU使用率是否达到阈值if cpu_usage threshold_cpu_usage or isGpuSuffiencent:# 解析音频地址wavPath getWav(url)print(fmp3 url{wavPath})# 不存在再去生成# 异步处理方法解析音频这块可以忽略也可以直接用视频地址if(not os.path.exists(wavPath)):(ffmpeg.input(url).output(wavPath, acodecmp3).global_args(-loglevel, quiet).run())# 使用whisper处理音频text process_audio_with_whisperx(wavPath, chunk_size)end_time_single time.time()# 创建任务并添加到事件循环中通知业务方asyncio.run(callback_task(request, text))print(f视频地址:{url}, 函数执行耗时: {end_time_single - start_time_single}秒)KAFKA_LOGGER.info(f视频地址:{url}, 函数执行耗时: {end_time_single - start_time_single}秒)# 清理临时文件os.remove(wavPath)else:print(f当前cpu已超限,该视频重新加入队列:{url})KAFKA_LOGGER.info(f当前cpu已超限,该视频重新加入队列:{url})# 暂停5秒time.sleep(5)# 重新加到队列里# 将处理任务添加到后台任务中以便不阻塞主线程background_tasks.add_task(process_video_whisperx, request, background_tasks)except Exception as ex:print(fsync_process_video error: {str(ex)})KAFKA_LOGGER.error(fsync_process_video error: {ex})return textloop asyncio.get_running_loop()# 使用线程池运行同步函数避免阻塞异步事件循环return await loop.run_in_executor(executor, sync_process_video_whisperx, request) # 获取文件路径 def getWav(input_video):try:# 判断系统是windows还是linuxoperating_system platform.system()# 判断操作系统类型if operating_system Windows:print(当前系统是Windows)audio_path C:\\Users\\xxx\\Downloads\\else :audio_path /tmp/# 从原始路径中获取文件名filename os.path.basename(input_video)# 生成新文件的完整路径filename_without_extension os.path.splitext(filename)[0]# 使用ffmpeg-python提取音频new_filename os.path.join(audio_path, filename_without_extension) .mp3except Exception as ex1:print(getWav ex:, str(ex1))return new_filename # 音频解析 def process_audio_with_whisperx(audio_file_path: str, chunk_size: int) - str:text video_process_whisperX(audio_file_path, chunk_size)return text # 异步回调 async def callback_task(request: VideoRequest, text: str):# 创建任务并添加到事件循环中task asyncio.create_task(callback(request, text))# 等待任务完成await task # 回调请求方法 async def callback(request: VideoRequest, text: str):# 目标URLurl request.callback_url# JSON格式的参数data {id: request.id,text: text,# 添加更多键值对...}# 设置一些键值对timed_map.set(request.path, json.dumps(data), timeout1800)# 设置请求头告诉服务器我们发送的是JSON数据headers {Content-Type: application/json}# 设置超时时间这里设置为5秒timeout 5.0# 发送POST请求response requests.post(url, datajson.dumps(data), headersheaders, timeouttimeout)print(furl:{url},data: {json.dumps(data)},headers:{headers},response:{response})# 检查请求是否成功if response.status_code 200:# 请求成功处理响应内容print(请求成功)print(response.json()) # 如果响应内容是JSON格式可以直接解析else:# 请求失败打印错误信息print(f请求失败状态码{response.status_code})print(response.text) # 打印响应的文本内容 # 启动应用 if __name__ __main__:register_nacos()uvicorn.run(app, host0.0.0.0, port5000) whisperX import whisperx from whisperx.asr import FasterWhisperPipeline import time import torch import gc import osENV os.environ.get(ENV, development) device torch.device(cuda:0 if torch.cuda.is_available() else cpu) if ENV production:batch_size 16compute_type float16model_name large-v2 else:# reduce if low on GPU membatch_size 4# compute_type float16 # change to int8 if low on GPU mem (may reduce accuracy)# change to int8 if low on GPU mem (may reduce accuracy)compute_type int8model_name medium class WhisperXProcessor:fast_model: FasterWhisperPipelinedef loadModel(self):# 1. Transcribe with original whisper (batched)self.fast_model whisperx.load_model(medium, device.type, compute_typecompute_type)print(模型加载完成)def asr(self, filePath: str, chunk_size: int):print(fasr start filePath:{filePath})start time.time()audio whisperx.load_audio(filePath)result self.fast_model.transcribe(audio, batch_sizebatch_size, chunk_size chunk_size)print(result)end time.time()print(识别使用的时间, end - start, s)torch.cuda.empty_cache()gc.collect()return resultdef video_process_whisperX(audio_path, chunk_size):app WhisperXProcessor()app.loadModel()text app.asr(audio_path, chunk_size)return text结果验证 发送请求 curl -XPOST http://localhost:5000/xxxx-video/whisperX -H Content-Type: application/json -d {id:1,path:https://vc16-bd1-pl-agv.autohome.com.cn/video-26/0A33363922E51BDE/2025-02-10/FC68CC971BB8B9A46F15C4841F4F2CE2-200-wm.mp4?keyF77E8D3251C4560FA47E36563A5D5668time1739187850,callback_url:http://localhost:8088/xxx/demo/testParseVideo}结果日志2分钟的视频大概用了60s。 文章参考 ASR强力模型「Whisper」解密Whisper Python实现语音识别whisperX
http://www.zqtcl.cn/news/734840/

相关文章:

  • 有关网站空间不正确的说法是设计和建设企业网站心得和体会
  • 个人网站前置审批项怎么做投票 网站
  • 网站建设零金手指花总js源码下载从哪个网站能下载
  • 网站开发属于无形资产两人合伙做网站但不准备开公司
  • 五大类型网站网站建设投标文件
  • 崇明区建设镇网站装修公司网站制作
  • 哪些网站可以做房产推广呼家楼街道网站建设
  • 微网站怎么开通萝岗手机网站建设
  • 牙科医院网站开发内江市住房和城乡建设局网站电话号码
  • 网站建设的想法和意见芜湖的网站建设公司
  • 效果好的网站建设wordpress主题基础
  • html5建设摄影网站意义crm免费客户管理系统
  • win2008 建立网站网站策划书的撰写流程
  • 德泰诺网站建设百度网盘资源搜索引擎入口
  • 谁能给个网站谢谢wordpress 主题 后门
  • 学校网站建设目的seo教学免费课程霸屏
  • 会计公司网站模板微信网站如何制作软件
  • 烟台做网站多少钱.net网站做增删改
  • 什么网站专门做软件的深圳电商网站制作
  • 局域网做网站家装公司哪家比较好
  • 免费的行情软件网站在线使用wordpress视频分享
  • 内容平台策划书网站优化公司推荐
  • 怎么在阿里巴巴网站做公司wordpress伪静态404
  • 配置 tomcat 做网站网站建设用什么语言
  • 大型的营销型网站建设怎么选择网站建设公司
  • 怎么用网站源码建站友情链接交换方式有哪些
  • 国外免费网站服务器链接幼教网站建设分析
  • 做药品网站有哪些陕西专业网站建设价格
  • 网络公司做网站网站 服务器选择
  • 湖南省重点建设项目办公室网站河南省住建局官网