[Day 51] STT(Speech-To-Text)에 대해
STT(Speech-To-Text) 기능을 iOS 앱에 적용해보기!
STT가 뭐야? 🤔
Speech-To-Text, 줄여서 STT는
“사용자의 음성을 인식해서 실시간으로 텍스트로 변환해주는 기능”이에요!
우리가 Siri에게 “내일 날씨 알려줘”라고 말했을 때,
그 말이 글자로 변환되어 처리되는 게 바로 STT 덕분이죠 😎
사용 방법
STT를 구현할 땐 크게 다음과 같은 단계를 따라가요:
Speech
프레임워크 임포트- 마이크와 음성 인식 권한 요청
SFSpeechRecognizer
로 음성 인식기 준비AVAudioEngine
으로 실시간 오디오 캡처- 인식 결과를 실시간으로 텍스트로 받아오기
1
2
3
4
5
6
7
8
9
10
11
// 음성 인식 언어
private let speechRecognizer = SFSpeechRecognizer(locale: Locale.init(identifier: "ko-KR"))
// 음성인식 요청
private var recognitionRequest: SFSpeechAudioBufferRecognitionRequest?
// 음성인식 요청결과
private var recognitionTask: SFSpeechRecognitionTask?
// 순수 소리만 인식하는 오디오 엔진
private let audioEngine = AVAudioEngine()
이렇게 기본적으로 있는데 얘네들을 알아보자~
SFSpeechRecognizer
이 친구는 음성을 인식할 수 있는 음성 인식기를 생성하는 친구인데 locale: Locale(identifier: "ko-KR"))
이렇게 해주면 한국어 음성을 인식할 수 있고, 영어는 en-US
이런식으로 값을 주면돼
이 객체가 실제로 음성을 인식하고, recognitionTask를 통해 결과를 돌려준답니다.
SFSpeechAudioBufferRecognitionRequest
이 친구는 음성 인식에 필요한 오디오 버퍼 요청 객체 마이크로 부터 들어오는 데이터를 이 객체에 담아서 recognitionTask로 넘겨줘요
텍스트로 변환할 데이터 스트림을 만드는 역할
SFSpeechRecognitionTask
이 친구는 음성인식을 실제로 수행하는 작업(Task)!!
이게 실행되면 음성을 텍스트로 바꾸는 작업이 비동기적으로 시작돼요.
recognitionRequest를 전달받아, 실시간으로 결과를 계속 업데이트주고, 중간에 취소하거나 다시 시작할 수 있도록 var로 선언하는 것이 일반적이랍니다.
AVAudioEngine
이 친구는 마이크 입력을 받아서 오디오 스트림을 생성해주는 객체!
실시간 오디오 데이터를 녹음하고, recognitionRequest에 전달하기 위한 장치
인풋노드 (inputNode)에서 오디오 데이터를 받아 installTap(onBus:)를 통해 녹음 가능
전체 흐름 간단 요약
1
2
3
4
5
6
7
8
// 1. 마이크 입력 설정
audioEngine.inputNode → 음성 데이터 생성
// 2. 데이터 담기
recognitionRequest ← 오디오 버퍼로 데이터 전달
// 3. 음성 인식 시작
recognitionTask ← speechRecognizer.recognitionTask(...) 시작
다음 Part.2 에서는 기능을 구현해보는 시간을 가져봐용!
맺으며: 춘식이와 함께하는 스마트한 개발
처음 해보는 STT지만 생각보다 쉽고 강력했어요!! 마이크 한 줄만 열어도, 정말 똑똑하게 인식해주는 iOS의 힘… 감탄했습니다…
오늘도 오류 내며 자란 춘식이였습니다. 🐾 더 열심히 노력 해서 좋은 iOS Developer가 되자!
혹시 이 글을 보시는 분들 중 더 유용한 팁이 있다면 댓글로 많이 알려주세요!