적당한 고통은 희열이다

- 댄 브라운 '다빈치 코드' 중에서

초보 iOS 개발자의 일상/개발 업무

[Swift iOS] Naver CLOVA Speech Recognition(CSR API) 음성인식

hongssup_ 2021. 12. 29. 17:56
반응형

NAVER CLOVA Speech Recognition API

: 사용자의 음성 입력을 스트리밍 형태로 입력받은 후 음성 인식 결과를 텍스트로 반환해주는 네이버의 STT 서비스.

HTTP 기반의 REST API 형태가 아니라 iOS SDK 형태로 CSR API 를 제공하고 있음. 

 

STT 중에서 제일 사용하기 까다로웠던 것 같다.. 

그렇다고 결과값이 그렇게 썩 좋은지도 모르겠음 ㅋㅋㅋ (구글이 짱!)

 

NAVER Cloud Platform - CLOVA Speech Recognition(CSR) 사용 가이드 를 참고하여 테스트해볼 수 있다.

테스트를 해보기 위해서는 일단 네이버 클라우드 플랫폼에 가입 후 콘솔에서 어플리케이션 등록 후 Client ID 를 발급받아야 한다.

어플리케이션 서비스 환경에 테스트할 프로젝트의 iOS Bundle ID 도 넣어줘야 함. 

카드 결제 정보도 등록해야하고 아무튼 까다롭다. 

 

github - naverspeech-sdk-ios 여기서 sdk 샘플을 다운받을 수 있다. 

발급받은 client id를 넣어 실행을 해보니 다음과 같은 에러가 떴다. 

Building for iOS, but the linked and embedded framework 'NaverSpeech.framework' was built for iOS + iOS Simulator.

Build Settings - Build Options - Validate Workspace - Yes 로 설정해주니 빌드가 된다. 

테스트 해보니 뭐 음성인식은 나름 잘 되는거 같은데, 어려운 말을 하면 골때리는 자동완성마냥 텍스트가 자꾸 바뀌는 듯한 문제가 있었다. 

뭐 그건 둘째치고, 다운받은 샘플 앱을 내가 만든 테스트 앱에서 실행을 하려니 문제가 생겼다. 

class AutoViewController: UIViewController {

    // MARK: - init
    required init?(coder aDecoder: NSCoder) {
        let configuration = NSKRecognizerConfiguration(clientID: ClientID)
        configuration?.canQuestionDetected = true
        self.speechRecognizer = NSKRecognizer(configuration: configuration)
        super.init(coder: aDecoder)
        
        self.speechRecognizer.delegate = self
    }
    
    // MARK: - property    
    fileprivate let speechRecognizer: NSKRecognizer
    ...
}

다운받은 샘플 앱은 위와 같이 viewcontroller에 NSCoder를 사용하여 초기화해주고 있는데, 스토리보드를 사용하여 문제가 없었는지 모르겠지만

내가 만든 테스트 앱은 xib를 사용하고 있어 navigationController로 넘겨주려면 뷰컨트롤러를 코드에서 인스턴스화 시켜야 하기 때문에.. 

방법을 찾다가 그냥 required init(coder aDecoder: NSCoder) 를 이용하여 초기화하는 부분을 다 빼버리고 다음과 같이 구성해주었다. 

class NaverSTTViewController: UIViewController {

    // MARK: - property
    fileprivate lazy var speechRecognizer = NSKRecognizer()
    
    // MARK: - override
    override func viewDidLoad() {
        super.viewDidLoad()

        let configuration = NSKRecognizerConfiguration(clientID: ClientID)
        configuration?.canQuestionDetected = true
        self.speechRecognizer = NSKRecognizer(configuration: configuration)
        self.speechRecognizer.delegate = self
        
        self.setupLanguagePicker()
    }
    ...
}

이렇게 변경해주니 다음과 같이 xib를 이용하여 화면을 잘 넘겨줄 수 있었다. 

let vc = NaverSTTViewController(nibName: "NaverSTTViewController", bundle: nil)
navigationController?.pushViewController(vc, animated: true)

 

 

참고 : https://guide.ncloud-docs.com/docs/ko/naveropenapiv3-speech-recognition-sdk

https://github.com/NaverCloudPlatform/naverspeech-sdk-ios

728x90
반응형