RAG_voice / clova_stt.py
jeongsoo's picture
Add application file
8370b61
raw
history blame
3.13 kB
"""
넀이버 ν΄λ‘œλ°” μŒμ„±μΈμ‹(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", "")
# ν΄λΌμ΄μ–ΈνŠΈ 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)}