1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- #!/usr/bin/env python
- # -*- encoding: utf-8 -*-
- '''
- @Contact : liuyuqi.gov@msn.cn
- @Time : 2024/09/26 17:12:46
- @License : Copyright © 2017-2022 liuyuqi. All Rights Reserved.
- @Desc : enter point
- 音频转文本
- '''
- import whisper
- import time
- def openai_whisper_model_result(file_path, device, model_name,model_path,prompt, temp, vad, lang, beam_size, min_vad):
- """
- file_path: 音频文件的路径。
- device: 运行设备类型(例如,cuda 表示使用 GPU,cpu 表示使用 CPU)。
- model_name: 要加载的 Whisper 模型名称(如 tiny,base,medium,large 等)。
- model_path: 模型所在的目录路径。
- prompt: 初始文本提示,用于引导转录结果。
- temp: 温度参数,用于控制转录输出的随机性。
- vad: 语音活动检测 (VAD) 选项,用于辅助识别音频中的语音部分。
- lang: 语言设置(虽然代码中并没有显式使用它)。
- beam_size: 用于波束搜索的波束数量(影响转录的质量和速度)。
- min_vad: 在代码中没有明确使用的参数。
- """
- start_time = time.time() # 记录开始时间
- if model_name not in ['tiny', 'tiny.en', 'base', 'base.en', 'small', 'small.en', 'medium', 'medium.en', 'large-v1',
- 'large-v2', 'large-v3', 'large']:
- print("\n*** Faster Whisper 本地模型加载模式 ***\n")
- else:
- print("\n*** Faster Whisper 调用模式 ***\n")
- print(f"- 运行模型:{model_name}")
- print(f"- 运行模型路径:{model_path}")
- print(f"- 运行方式:{device}")
- print(f"- VAD辅助:{vad}")
- try:
- file_path.split('.')
- file_path = open(file_path, "rb")
- except:
- file_path = open(file_path + "/output.mp3", "rb")
- # 加载音频文件为 NumPy 数组
- #audio = whisper.load_audio(file_path)
- model = whisper.load_model(model_name,device,model_path,in_memory=True)
- #result = model.transcribe(audio,initial_prompt=prompt,beam_size=beam_size,temperature=temp)
- result = model.transcribe("D:\\tmp\\output.mp3",initial_prompt=prompt)
- print(f"- whisper识别内容:\n{result['segments']}\n")
- # 获取 segments
- segments = result["segments"]
- segments_dict =openai_whisper_result_dict(segments)
- print(f"- whisper2识别内容:\n{segments_dict}\n")
- end_time = time.time() # 记录结束时间
- execution_time = end_time - start_time
- print(f"- 方法执行时间:{execution_time:.2f} 秒")
- return segments_dict
- def openai_whisper_result_dict(segments):
- """
- segments: Whisper 模型识别结果的分段列表。
- """
- # 将分段列表转换为字典
- segments_dict = {
- 'text': ' '.join([segment['text'] for segment in segments]),
- 'segments': [{
- 'id': segment['id'],
- 'seek': segment['seek'],
- 'start': segment['start'],
- 'end': segment['end'],
- 'text': segment['text'],
- 'tokens': segment['tokens'],
- 'temperature': segment.get('temperature', None),
- 'avg_logprob': segment['avg_logprob'],
- 'compression_ratio': segment['compression_ratio'],
- 'no_speech_prob': segment['no_speech_prob']}
- for segment in segments
- ]
- }
- return segments_dict
- if __name__=='__main__':
- openai_whisper_model_result("D:\\tmp","cuda","medium","E:\\AI\\whisper-medium","Don’t make each line too long.","0.8",False,"自动识别",5,500)
|