|
@@ -0,0 +1,112 @@
|
|
|
+# import os, sys
|
|
|
+# from typing import List, Any
|
|
|
+from fastapi import Request, APIRouter, UploadFile, File
|
|
|
+from fastapi.responses import FileResponse, PlainTextResponse
|
|
|
+# from fastapi import FastAPI, HTTPException, status
|
|
|
+# from fastapi.middleware.cors import CORSMiddleware
|
|
|
+# import uvicorn
|
|
|
+# from fastapi.exceptions import HTTPException
|
|
|
+# from fastapi.encoders import jsonable_encoder
|
|
|
+# from urllib.parse import urlparse, urljoin
|
|
|
+from pathlib import Path
|
|
|
+from api.openai_scripts_tai_gi.main_script import main
|
|
|
+from api.openai_scripts_chinese.main_script import main as main2
|
|
|
+# from api.openai_scripts_new.main_script import main as main3
|
|
|
+from datetime import datetime
|
|
|
+import random
|
|
|
+import string
|
|
|
+
|
|
|
+router = APIRouter()
|
|
|
+
|
|
|
+# router = FastAPI()
|
|
|
+# router.add_middleware(
|
|
|
+# CORSMiddleware,
|
|
|
+# allow_origins=["*"],
|
|
|
+# allow_credentials=True,
|
|
|
+# allow_methods=["*"],
|
|
|
+# allow_headers=["*"],
|
|
|
+# )
|
|
|
+
|
|
|
+
|
|
|
+@router.post('/tai_gi')
|
|
|
+async def whisper_auto(file: UploadFile = File()):
|
|
|
+ if file == None:
|
|
|
+ return {'message': '請上傳檔案'}
|
|
|
+ extension = file.filename.split(".")[-1]
|
|
|
+ if extension not in ("mp3", "wav", "webm"):
|
|
|
+ return PlainTextResponse("Audio must be mp3, wav or webm format!", 400)
|
|
|
+ filename = Path(__file__).parent.parent/'speech_audio'/datetime.now().strftime(f"%Y%m%d%H%M%S_{''.join(random.sample(string.ascii_lowercase, 3))}.{extension}")
|
|
|
+ with open(filename, 'wb') as f:
|
|
|
+ f.write(await file.read())
|
|
|
+ with open(filename, 'rb') as f:
|
|
|
+ raw_transcript, corrected_transcript = main(f)
|
|
|
+ # if raw_transcript and corrected_transcript:
|
|
|
+ # os.remove(filename)
|
|
|
+ # return {'message': corrected_transcript}
|
|
|
+ # else:
|
|
|
+ # os.remove(filename)
|
|
|
+ # return {"message": "Audio processing failed."}
|
|
|
+ if raw_transcript and corrected_transcript:
|
|
|
+ # os.remove(save_path)
|
|
|
+ # return {'message': {"Raw transcript": raw_transcript, "Corrected transcript": corrected_transcript}}
|
|
|
+ return {'message': corrected_transcript}
|
|
|
+ else:
|
|
|
+ # os.remove(save_path)
|
|
|
+ return {"message": "Audio processing failed."}
|
|
|
+
|
|
|
+
|
|
|
+@router.post('/chinese')
|
|
|
+async def whisper_auto(file: UploadFile = File()):
|
|
|
+ if file == None:
|
|
|
+ return {'message': '請上傳檔案'}
|
|
|
+ extension = file.filename.split(".")[-1]
|
|
|
+ if extension not in ("mp3", "wav", "webm"):
|
|
|
+ return PlainTextResponse("Audio must be mp3, wav or webm format!", 400)
|
|
|
+ filename = Path(__file__).parent.parent/'speech_audio'/datetime.now().strftime(f"%Y%m%d%H%M%S_{''.join(random.sample(string.ascii_lowercase, 3))}.{extension}")
|
|
|
+ with open(filename, 'wb') as f:
|
|
|
+ f.write(await file.read())
|
|
|
+ with open(filename, 'rb') as f:
|
|
|
+ raw_transcript, corrected_transcript = main2(f)
|
|
|
+ if raw_transcript and corrected_transcript:
|
|
|
+ # return {'message': {"Raw transcript": raw_transcript, "Corrected transcript": corrected_transcript}}
|
|
|
+ return {'message': corrected_transcript}
|
|
|
+ else:
|
|
|
+ return {"message": "Audio processing failed."}
|
|
|
+
|
|
|
+
|
|
|
+# import numpy as np
|
|
|
+# from transformers import pipeline
|
|
|
+# import gradio as gr
|
|
|
+
|
|
|
+# @router.post('/tai_gi_new')
|
|
|
+# async def whisper_auto(file: UploadFile = File()):
|
|
|
+# if file == None:
|
|
|
+# return {'message': '請上傳檔案'}
|
|
|
+# extension = file.filename.split(".")[-1]
|
|
|
+# if extension not in ("mp3", "wav", "webm"):
|
|
|
+# return PlainTextResponse("Audio must be mp3, wav or webm format!", 400)
|
|
|
+# filename = Path(__file__).parent/'speech_audio'/datetime.now().strftime(f"%Y%m%d%H%M%S_{''.join(random.sample(string.ascii_lowercase, 3))}.{extension}")
|
|
|
+# with open(filename, 'wb') as f:
|
|
|
+# f.write(await file.read())
|
|
|
+# # with open(filename, 'rb') as f:
|
|
|
+# # raw_transcript, corrected_transcript = main3(f)
|
|
|
+# # audio_data, sample_rate = librosa.load(filename, sr=None)
|
|
|
+# # 讀取音頻文件
|
|
|
+# audio_input = gr.Audio(type="filepath")
|
|
|
+# raw_transcript, corrected_transcript = main3(audio_input(filename))
|
|
|
+# # if raw_transcript and corrected_transcript:
|
|
|
+# # os.remove(filename)
|
|
|
+# # return {'message': corrected_transcript}
|
|
|
+# # else:
|
|
|
+# # os.remove(filename)
|
|
|
+# # return {"message": "Audio processing failed."}
|
|
|
+# if raw_transcript and corrected_transcript:
|
|
|
+# # os.remove(save_path)
|
|
|
+# return {'message': {"Raw transcript": raw_transcript, "Corrected transcript": corrected_transcript}}
|
|
|
+# else:
|
|
|
+# # os.remove(save_path)
|
|
|
+# return {"message": "Audio processing failed."}
|
|
|
+
|
|
|
+
|
|
|
+# if __name__ == "__main__":
|
|
|
+# uvicorn.run("whisper:router", reload=False, port=8086, host='cmm.ai', ssl_keyfile="/etc/letsencrypt/live/cmm.ai/privkey.pem", ssl_certfile="/etc/letsencrypt/live/cmm.ai/fullchain.pem")
|