whisper_simple.py 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. # 供資策會課程使用
  2. import os
  3. import argparse
  4. from openai import OpenAI
  5. from dotenv import load_dotenv
  6. load_dotenv('environment.env')
  7. client = OpenAI()
  8. system_prompt = """你是一位專業的轉錄校對助理,專門處理有關溫室氣體、碳排放和碳管理的對話轉錄。
  9. 你的任務是:
  10. 1. 確保以下專業術語的準確性:溫室氣體、碳排放、碳管理、碳盤查、碳權交易、碳足跡、淨零排放、碳權。
  11. 2. 在必要時添加適當的標點符號,如句號、逗號,並使用正確的大小寫。
  12. 3. 使用台灣的繁體中文,確保語言表達符合台灣的用語習慣。
  13. 4. 只更正明顯的錯誤或改善可讀性,不要改變原文的意思或結構。
  14. 5. 不要回答問題、解釋概念或添加任何不在原文中的信息。
  15. 6. 如果原文是一個問句,保持它的問句形式,不要提供答案。
  16. 請只根據提供的原文進行必要的更正,不要添加或刪除任何實質性內容。"""
  17. def transcribe(audio_file):
  18. try:
  19. transcript = client.audio.transcriptions.create(
  20. file=audio_file,
  21. model="whisper-1",
  22. response_format="text"
  23. )
  24. return transcript
  25. except Exception as e:
  26. print(f"轉錄時發生錯誤:{str(e)}")
  27. return None
  28. def post_process_transcript(transcript):
  29. messages = [
  30. {"role": "system", "content": system_prompt},
  31. {"role": "user", "content": f"請校對並修正以下轉錄文本,但不要改變其原意或回答問題:\n\n{transcript}"}
  32. ]
  33. response = client.chat.completions.create(
  34. model="gpt-3.5-turbo",
  35. temperature=0,
  36. messages=messages
  37. )
  38. return response.choices[0].message.content
  39. def process_audio_file(file_path):
  40. try:
  41. with open(file_path, "rb") as audio_file:
  42. print(f"\n處理文件:{os.path.basename(file_path)}")
  43. raw_transcript = transcribe(audio_file)
  44. if raw_transcript is None:
  45. return
  46. print("\n原始轉錄:")
  47. print(raw_transcript)
  48. corrected_transcript = post_process_transcript(raw_transcript)
  49. print("\n修正後的轉錄:")
  50. print(corrected_transcript)
  51. except Exception as e:
  52. print(f"處理文件 {os.path.basename(file_path)} 時發生錯誤:{str(e)}")
  53. def process_folder(folder_path):
  54. processed_files = 0
  55. for filename in os.listdir(folder_path):
  56. if filename.endswith((".mp3", ".wav", ".m4a")):
  57. file_path = os.path.join(folder_path, filename)
  58. process_audio_file(file_path)
  59. processed_files += 1
  60. print("\n=== 總結 ===")
  61. print(f"處理的文件數:{processed_files}")
  62. def main():
  63. parser = argparse.ArgumentParser(description="處理音頻文件使用 Whisper 和 GPT-3.5-turbo")
  64. parser.add_argument("--folder", default="data", help="包含音頻文件的文件夾路徑(默認:data)")
  65. args = parser.parse_args()
  66. if os.path.isdir(args.folder):
  67. process_folder(args.folder)
  68. else:
  69. print(f"錯誤:文件夾 '{args.folder}' 不存在。")
  70. if __name__ == "__main__":
  71. main()