main.py 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #!/usr/bin/env python
  2. # -*- encoding: utf-8 -*-
  3. '''
  4. @Contact : liuyuqi.gov@msn.cn
  5. @Time : 2024/09/26 17:12:46
  6. @License : Copyright © 2017-2022 liuyuqi. All Rights Reserved.
  7. @Desc : enter point
  8. 音频转文本
  9. '''
  10. import whisper
  11. import time
  12. def openai_whisper_model_result(file_path, device, model_name,model_path,prompt, temp, vad, lang, beam_size, min_vad):
  13. """
  14. file_path: 音频文件的路径。
  15. device: 运行设备类型(例如,cuda 表示使用 GPU,cpu 表示使用 CPU)。
  16. model_name: 要加载的 Whisper 模型名称(如 tiny,base,medium,large 等)。
  17. model_path: 模型所在的目录路径。
  18. prompt: 初始文本提示,用于引导转录结果。
  19. temp: 温度参数,用于控制转录输出的随机性。
  20. vad: 语音活动检测 (VAD) 选项,用于辅助识别音频中的语音部分。
  21. lang: 语言设置(虽然代码中并没有显式使用它)。
  22. beam_size: 用于波束搜索的波束数量(影响转录的质量和速度)。
  23. min_vad: 在代码中没有明确使用的参数。
  24. """
  25. start_time = time.time() # 记录开始时间
  26. if model_name not in ['tiny', 'tiny.en', 'base', 'base.en', 'small', 'small.en', 'medium', 'medium.en', 'large-v1',
  27. 'large-v2', 'large-v3', 'large']:
  28. print("\n*** Faster Whisper 本地模型加载模式 ***\n")
  29. else:
  30. print("\n*** Faster Whisper 调用模式 ***\n")
  31. print(f"- 运行模型:{model_name}")
  32. print(f"- 运行模型路径:{model_path}")
  33. print(f"- 运行方式:{device}")
  34. print(f"- VAD辅助:{vad}")
  35. try:
  36. file_path.split('.')
  37. file_path = open(file_path, "rb")
  38. except:
  39. file_path = open(file_path + "/output.mp3", "rb")
  40. # 加载音频文件为 NumPy 数组
  41. #audio = whisper.load_audio(file_path)
  42. model = whisper.load_model(model_name,device,model_path,in_memory=True)
  43. #result = model.transcribe(audio,initial_prompt=prompt,beam_size=beam_size,temperature=temp)
  44. result = model.transcribe("D:\\tmp\\output.mp3",initial_prompt=prompt)
  45. print(f"- whisper识别内容:\n{result['segments']}\n")
  46. # 获取 segments
  47. segments = result["segments"]
  48. segments_dict =openai_whisper_result_dict(segments)
  49. print(f"- whisper2识别内容:\n{segments_dict}\n")
  50. end_time = time.time() # 记录结束时间
  51. execution_time = end_time - start_time
  52. print(f"- 方法执行时间:{execution_time:.2f} 秒")
  53. return segments_dict
  54. def openai_whisper_result_dict(segments):
  55. """
  56. segments: Whisper 模型识别结果的分段列表。
  57. """
  58. # 将分段列表转换为字典
  59. segments_dict = {
  60. 'text': ' '.join([segment['text'] for segment in segments]),
  61. 'segments': [{
  62. 'id': segment['id'],
  63. 'seek': segment['seek'],
  64. 'start': segment['start'],
  65. 'end': segment['end'],
  66. 'text': segment['text'],
  67. 'tokens': segment['tokens'],
  68. 'temperature': segment.get('temperature', None),
  69. 'avg_logprob': segment['avg_logprob'],
  70. 'compression_ratio': segment['compression_ratio'],
  71. 'no_speech_prob': segment['no_speech_prob']}
  72. for segment in segments
  73. ]
  74. }
  75. return segments_dict
  76. if __name__=='__main__':
  77. openai_whisper_model_result("D:\\tmp","cuda","medium","E:\\AI\\whisper-medium","Don’t make each line too long.","0.8",False,"自动识别",5,500)