Spaces:
Paused
Paused
""" | |
๋ค์ด๋ฒ ํด๋ก๋ฐ ์์ฑ์ธ์(STT) API ์ฐ๋ ๋ชจ๋ | |
""" | |
import os | |
import json | |
import requests | |
import logging | |
from typing import Dict, Any | |
from dotenv import load_dotenv | |
# .env ํ์ผ ๋ก๋ | |
load_dotenv() | |
# ๋ก๊น ์ค์ | |
logger = logging.getLogger("ClovaSTT") | |
class ClovaSTT: | |
""" | |
๋ค์ด๋ฒ ํด๋ก๋ฐ ์์ฑ์ธ์(STT) API ํด๋์ค | |
""" | |
def __init__(self): | |
""" | |
ํด๋ก๋ฐ STT ํด๋ผ์ด์ธํธ ์ด๊ธฐํ | |
""" | |
# .env ํ์ผ์์ ์ค์ ๊ฐ์ ธ์ค๊ธฐ | |
self.client_id = os.getenv("NAVER_CLIENT_ID", "") | |
self.client_secret = os.getenv("NAVER_CLIENT_SECRET", "") | |
# ํด๋ผ์ด์ธํธ ID์ Secret ๊ฒ์ฆ | |
if not self.client_id or not self.client_secret: | |
logger.warning("๋ค์ด๋ฒ ํด๋ก๋ฐ API ํค๊ฐ ์ค์ ๋์ง ์์์ต๋๋ค.") | |
logger.warning(".env ํ์ผ์ NAVER_CLIENT_ID์ NAVER_CLIENT_SECRET๋ฅผ ์ค์ ํด์ฃผ์ธ์.") | |
else: | |
logger.info("๋ค์ด๋ฒ ํด๋ก๋ฐ STT API ์ค์ ์๋ฃ") | |
def recognize(self, audio_bytes, language="Kor") -> Dict[str, Any]: | |
""" | |
์ค๋์ค ๋ฐ์ดํฐ๋ฅผ ํ ์คํธ๋ก ๋ณํ | |
Args: | |
audio_bytes: ์ค๋์ค ํ์ผ ๋ฐ์ดํธ ๋ฐ์ดํฐ | |
language: ์ธ์ด ์ฝ๋ (๊ธฐ๋ณธ๊ฐ: 'Kor') | |
Returns: | |
์ธ์๋ ํ ์คํธ ๋๋ ์ค๋ฅ ๋ฉ์์ง | |
""" | |
if not self.client_id or not self.client_secret: | |
logger.error("API ํค๊ฐ ์ค์ ๋์ง ์์์ต๋๋ค.") | |
return {"success": False, "error": "API ํค๊ฐ ์ค์ ๋์ง ์์์ต๋๋ค."} | |
try: | |
# API ์๋ํฌ์ธํธ URL | |
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" | |
} | |
logger.info("๋ค์ด๋ฒ ํด๋ก๋ฐ STT ์์ฒญ ์ ์ก ์ค...") | |
# API ์์ฒญ ์ ์ก | |
response = requests.post(url, headers=headers, data=audio_bytes, timeout=30) | |
# ์๋ต ์ฒ๋ฆฌ | |
if response.status_code == 200: | |
result = response.json() | |
recognized_text = result.get("text", "") | |
logger.info(f"์ธ์ ์ฑ๊ณต: {recognized_text[:50]}...") | |
return { | |
"success": True, | |
"text": recognized_text, | |
"result": result | |
} | |
else: | |
logger.error(f"API ์ค๋ฅ ์๋ต: {response.status_code}, {response.text}") | |
return { | |
"success": False, | |
"error": f"API ์ค๋ฅ: {response.status_code}", | |
"details": response.text | |
} | |
except Exception as e: | |
logger.error(f"์์ฑ์ธ์ ์ฒ๋ฆฌ ์ค ์ค๋ฅ ๋ฐ์: {str(e)}") | |
return { | |
"success": False, | |
"error": "์์ฑ์ธ์ ์ฒ๋ฆฌ ์คํจ", | |
"details": str(e) | |
} |