whisper+whisperx ASR加对齐

忘了怎么安装了,这里记录一下整理出来的类,不过这个识别容易出现幻觉,对齐也不是很准,比如说使用 large-v3 倒是能有一定的分句作用,但是每句最后一个字给的时间太短,这也表明了对齐不准。

python 复制代码
from chj.comm.pic import *

import json
import whisper
import whisperx
import gc

class Warp_whisper:
    def __init__(self, language="zh", device="cuda", compute_type="float32", model="large-v2" ):
        torch.backends.cudnn.enabled = False
        if not torch.cuda.is_available():
            device="cpu"
        dmodel="XXXXX/models/torch/whisper"
        self.asr_model=whisper.load_model(model, device, download_root=dmodel)
        self.txt_converter = None
        if model=="large-v2" and language=="zh":
            from opencc import OpenCC
            converter = OpenCC('t2s')
            self.txt_converter = converter
            self.prompt=None
        else:
            if language=="zh":
                self.prompt='以下是普通话的句子'
            else:
                self.prompt=None

        self.prompt=None

        self.language=language
        self.device=device
        self.align_model, self.align_metadata = whisperx.load_align_model(language_code=language, device=device)

    def do_asr_algin(self, fjson, fwav):
        audio = whisper.load_audio(fwav)
        result = self.asr_model.transcribe(audio, language=self.language, initial_prompt=self.prompt)
        #assert result["language"] == self.language
        result_segments = result["segments"]

        if self.txt_converter:
            for e in result_segments:
                e['text'] = converter.convert( e['text'] )
        result = whisperx.align(result_segments, self.align_model, self.align_metadata, audio, self.device, return_char_alignments=False)
        result=result["segments"]
        with open(fjson, "w") as fout:
            json.dump(result, fout, indent=4, ensure_ascii=False)

def f2_invoke():
    print("Doing... whisper align")
    basedir=sys.argv[1]
    din=f"{basedir}/audio_feats/wav16k"
    if not os.path.exists(din):
        print("no such dir", din)
        exit(1)
    dout=f"{basedir}/audio_feats/whisper_align"

	# model="large-v3
    cls_asr=Warp_whisper()
    chj_file.mkdir(dout)
    for fwav in tqdm( glob.glob(f"{din}/*.wav") ):
        nm = chj_file.get_nm(fwav)
        fnm=f"{dout}/{nm}.json"
        if os.path.isfile(fnm): continue
        cls_asr.do_asr_algin(fnm,fwav)
    print("Finished whisper align")
相关推荐
lkbhua莱克瓦241 分钟前
机器学习的演进与深度学习的革命
人工智能·深度学习·机器学习
楚来客3 分钟前
AI基础概念之九:神经网络单层感知机的基本原理
人工智能·神经网络·cnn
北京耐用通信4 分钟前
耐达讯自动化 Profibus 总线光纤中继器:解决半导体设备通信难题,提升产线效率
网络·人工智能·物联网·自动化·信息与通信
大强同学5 分钟前
7个优质精选Claude Skills
人工智能
GISer_Jing12 分钟前
AI学习资源总结:免费开放,入门至深入,持续更新
人工智能·学习·设计模式·prompt·aigc
聊聊科技14 分钟前
音乐平台批量demo更新频繁,AI代唱demo软件助音乐人快速响应
人工智能
IT_陈寒14 分钟前
SpringBoot 3.2实战:5个性能优化技巧让你的应用提速50%
前端·人工智能·后端
Ydwlcloud15 分钟前
个人博客与内容站部署在AWS:2026年的理性选择与更优策略
大数据·服务器·人工智能·云计算·aws
AAD5558889920 分钟前
黄稻螟害虫检测基于Faster-RCNN_R50-Caffe-C4_MS-1x_COCO模型创新实现
人工智能·深度学习·caffe
知乎的哥廷根数学学派22 分钟前
基于注意力机制的多尺度脉冲神经网络旋转机械故障诊断(西储大学轴承数据,Pytorch)
人工智能·pytorch·python·深度学习·神经网络·机器学习