RAG_voice / clova_stt.py
jeongsoo's picture
Add application file
b12512e
"""
๋„ค์ด๋ฒ„ ํด๋กœ๋ฐ” ์Œ์„ฑ์ธ์‹(STT) API ์—ฐ๋™ ๋ชจ๋“ˆ
"""
import os
import json
import requests
import tempfile
# config.py์—์„œ ์„ค์ • ๊ฐ€์ ธ์˜ค๊ธฐ
from config import NAVER_CLIENT_ID, NAVER_CLIENT_SECRET
class ClovaSTT:
"""
๋„ค์ด๋ฒ„ ํด๋กœ๋ฐ” ์Œ์„ฑ์ธ์‹(STT) API ํด๋ž˜์Šค
"""
def __init__(self):
"""
ํด๋กœ๋ฐ” STT ํด๋ผ์ด์–ธํŠธ ์ดˆ๊ธฐํ™”
"""
self.client_id = NAVER_CLIENT_ID
self.client_secret = NAVER_CLIENT_SECRET
# ํด๋ผ์ด์–ธํŠธ ID์™€ 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:
# 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"
}
print("[STT] ๋„ค์ด๋ฒ„ ํด๋กœ๋ฐ” STT ์š”์ฒญ ์ „์†ก ์ค‘...")
# API ์š”์ฒญ ์ „์†ก
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)}