""" 네이버 클로바 음성인식(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)}