|
""" |
|
λ€μ΄λ² ν΄λ‘λ° μμ±μΈμ(STT) API μ°λ λͺ¨λ |
|
""" |
|
import os |
|
import json |
|
import requests |
|
import tempfile |
|
from dotenv import load_dotenv |
|
|
|
|
|
load_dotenv() |
|
|
|
|
|
class ClovaSTT: |
|
""" |
|
λ€μ΄λ² ν΄λ‘λ° μμ±μΈμ(STT) API ν΄λμ€ |
|
""" |
|
|
|
def __init__(self): |
|
""" |
|
ν΄λ‘λ° STT ν΄λΌμ΄μΈνΈ μ΄κΈ°ν |
|
""" |
|
self.client_id = os.getenv("NAVER_CLIENT_ID", "") |
|
self.client_secret = os.getenv("NAVER_CLIENT_SECRET", "") |
|
|
|
|
|
if not self.client_id or not self.client_secret: |
|
print("κ²½κ³ : λ€μ΄λ² ν΄λ‘λ° API ν€κ° μ€μ λμ§ μμμ΅λλ€.") |
|
print("NAVER_CLIENT_IDμ NAVER_CLIENT_SECRET νκ²½ λ³μλ₯Ό μ€μ ν΄μ£ΌμΈμ.") |
|
else: |
|
print("λ€μ΄λ² ν΄λ‘λ° STT API μ€μ μλ£") |
|
|
|
def recognize(self, audio_bytes, language="Kor"): |
|
""" |
|
μ€λμ€ λ°μ΄ν°λ₯Ό ν
μ€νΈλ‘ λ³ν |
|
|
|
Args: |
|
audio_bytes: μ€λμ€ νμΌ λ°μ΄νΈ λ°μ΄ν° |
|
language: μΈμ΄ μ½λ (κΈ°λ³Έκ°: 'Kor') |
|
|
|
Returns: |
|
μΈμλ ν
μ€νΈ λλ μ€λ₯ λ©μμ§ |
|
""" |
|
if not self.client_id or not self.client_secret: |
|
return {"error": "API ν€κ° μ€μ λμ§ μμμ΅λλ€."} |
|
|
|
try: |
|
|
|
url = f"https://naveropenapi.apigw.ntruss.com/recog/v1/stt?lang={language}" |
|
|
|
|
|
headers = { |
|
"X-NCP-APIGW-API-KEY-ID": self.client_id, |
|
"X-NCP-APIGW-API-KEY": self.client_secret, |
|
"Content-Type": "application/octet-stream" |
|
} |
|
|
|
print("[STT] λ€μ΄λ² ν΄λ‘λ° STT μμ² μ μ‘ μ€...") |
|
|
|
|
|
response = requests.post(url, headers=headers, data=audio_bytes) |
|
|
|
|
|
if response.status_code == 200: |
|
result = response.json() |
|
print(f"[STT] μΈμ μ±κ³΅: {result}") |
|
return result |
|
else: |
|
print(f"[STT] API μ€λ₯ μλ΅: {response.status_code}, {response.text}") |
|
return {"error": f"API μ€λ₯: {response.status_code}", "details": response.text} |
|
|
|
except Exception as e: |
|
print(f"[STT] μμ±μΈμ μ²λ¦¬ μ€ μ€λ₯ λ°μ: {str(e)}") |
|
return {"error": "μμ±μΈμ μ²λ¦¬ μ€ν¨", "details": str(e)} |
|
|
|
def recognize_file(self, file_path, language="Kor"): |
|
""" |
|
μ€λμ€ νμΌμ ν
μ€νΈλ‘ λ³ν |
|
|
|
Args: |
|
file_path: μ€λμ€ νμΌ κ²½λ‘ |
|
language: μΈμ΄ μ½λ (κΈ°λ³Έκ°: 'Kor') |
|
|
|
Returns: |
|
μΈμλ ν
μ€νΈ λλ μ€λ₯ λ©μμ§ |
|
""" |
|
try: |
|
with open(file_path, "rb") as f: |
|
audio_bytes = f.read() |
|
return self.recognize(audio_bytes, language) |
|
except Exception as e: |
|
print(f"[STT] νμΌ μ½κΈ° μ€λ₯: {str(e)}") |
|
return {"error": "νμΌ μ½κΈ° μ€ν¨", "details": str(e)} |