์ด ๋ฌธ์๋ Speech-to-Text ์ฌ์ฉ์ ๋ํ ๊ธฐ๋ณธ์ฌํญ์ ์ค๋ช ํ๋ ๊ฐ์ด๋์ ๋๋ค. ์ด ๊ฐ๋ ๊ฐ์ด๋๋ Speech-to-Text์ ๋ณด๋ผ ์ ์๋ ์์ฒญ ์ ํ, ํด๋น ์์ฒญ ์์ฑ ๋ฐฉ๋ฒ, ์๋ต ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค. Speech-to-Text์ ๋ชจ๋ ์ฌ์ฉ์๋ ์ด API๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ์ด ๊ฐ์ด๋์ ๊ด๋ จ ๊ฐ์ด๋ ์ค ํ๋๋ฅผ ์ฝ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ง์ ์ฌ์ฉํด ๋ณด๊ธฐ
Google Cloud๋ฅผ ์ฒ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๊ณ์ ์ ๋ง๋ค์ด ์ค์ ์๋๋ฆฌ์ค์์ Speech-to-Text์ ์ฑ๋ฅ์ ํ๊ฐํฉ๋๋ค. ์ ๊ท ๊ณ ๊ฐ์๊ฒ๋ ์ํฌ๋ก๋๋ฅผ ์คํ, ํ ์คํธ, ๋ฐฐํฌํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ $300์ ๋ฌด๋ฃ ํฌ๋ ๋ง์ด ์ ๊ณต๋ฉ๋๋ค.
๋ฌด๋ฃ๋ก Speech-to-Text ์ฌ์ฉํด ๋ณด๊ธฐ์์ฑ ์์ฒญ
Speech-to-Text์๋ ์์ฑ ์ธ์์ ์ํํ๋ ์ธ ๊ฐ์ง ์ฃผ์ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ์ด๋ค ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋๊ธฐ ์ธ์(REST, gRPC)์ ์ค๋์ค ๋ฐ์ดํฐ๋ฅผ Speech-to-Text API๋ก ๋ณด๋ด๊ณ , ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ธ์ํ๊ณ , ๋ชจ๋ ์ค๋์ค๊ฐ ์ฒ๋ฆฌ๋ ํ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํฉ๋๋ค. ๋๊ธฐ์ ์ธ์ ์์ฒญ ๋์์ ๊ธธ์ด๊ฐ 1๋ถ ์ดํ์ธ ์ค๋์ค ๋ฐ์ดํฐ๋ก ์ ํ๋ฉ๋๋ค.
๋น๋๊ธฐ ์ธ์(REST ๋ฐ gRPC)์ ์ค๋์ค ๋ฐ์ดํฐ๋ฅผ Speech-to-Text API๋ก ๋ณด๋ด๊ณ , ์ฅ๊ธฐ ์คํ ์์ ์ ์์ํฉ๋๋ค. ์ด ์์ ์ ์ฌ์ฉํ์ฌ ์ฃผ๊ธฐ์ ์ผ๋ก ์ธ์ ๊ฒฐ๊ณผ๋ฅผ ํด๋งํ ์ ์์ต๋๋ค. ์ต๋ 480๋ถ ๊ธธ์ด์ ์ค๋์ค ๋ฐ์ดํฐ์๋ ๋น๋๊ธฐ์ ์์ฒญ์ ์ฌ์ฉํ์ธ์.
์คํธ๋ฆฌ๋ฐ ์ธ์(gRPC๋ง ํด๋น)์ gRPC ์๋ฐฉํฅ ์คํธ๋ฆผ์ ์ ๊ณต๋๋ ์ค๋์ค ๋ฐ์ดํฐ๋ฅผ ์ธ์ํฉ๋๋ค. ์คํธ๋ฆฌ๋ฐ ์์ฒญ์ ๋ง์ดํฌ์์ ๋ผ์ด๋ธ ์ค๋์ค ์บก์ฒ ์ฉ๋์ ๊ฐ์ ์ค์๊ฐ ์ธ์ ์ฉ๋๋ก ์ค๊ณ๋์์ต๋๋ค. ์คํธ๋ฆฌ๋ฐ ์ธ์์ ์ค๋์ค ์บก์ฒ ์ค์ ์ค๊ฐ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํ๋ฏ๋ก, ์ฌ์ฉ์๊ฐ ๊ณ์ ๋งํ๋ ์ค์๋ ๊ฒฐ๊ณผ๋ฅผ ํ์ํ ์ ์์ต๋๋ค.
์์ฒญ์๋ ์ค๋์ค ๋ฐ์ดํฐ๋ ๋ฌผ๋ก ๊ตฌ์ฑ ๋งค๊ฐ๋ณ์๋ ํฌํจ๋ฉ๋๋ค. ๋ค์ ์น์ ์ ์ด๋ฌํ ์ ํ์ ์ธ์ ์์ฒญ, ์์ฒญ์ด ์์ฑํ๋ ์๋ต, ํด๋น ์๋ต ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ ์์ธํ๊ฒ ์ค๋ช ํฉ๋๋ค.
Speech-to-Text API ์ธ์
Speech-to-Text API ๋๊ธฐ์ ์ธ์ ์์ฒญ์ ์์ฑ ์ค๋์ค ๋ฐ์ดํฐ ์ธ์์ ์ํํ๋ ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ๋๋ค. Speech-to-Text๋ ๋๊ธฐ์ ์์ฒญ์ผ๋ก ์ ์ก๋ ์์ฑ ์ค๋์ค ๋ฐ์ดํฐ(์ต๋ 1๋ถ ๊ธธ์ด)๋ฅผ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. Speech-to-Text๋ ์ค๋์ค๋ฅผ ๋ชจ๋ ์ฒ๋ฆฌํ๊ณ ์ธ์ํ ํ ์๋ต์ ๋ฐํํฉ๋๋ค.
๋๊ธฐ์ ์์ฒญ์ ์ฐจ๋จ ์์ฒญ์ด๋ฏ๋ก Speech-to-Text๊ฐ ์๋ต์ ๋ฐํํ ํ์์ผ ๋ค์ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. Speech-to-Text๋ ์ผ๋ฐ์ ์ผ๋ก ์ค์๊ฐ๋ณด๋ค ๋น ๋ฅด๊ฒ ์ค๋์ค๋ฅผ ์ฒ๋ฆฌํ๋ฉฐ, 30์ด ๊ธธ์ด์ ์ค๋์ค๋ฅผ ํ๊ท 15์ด ๋ด์ ์ฒ๋ฆฌํฉ๋๋ค. ์ค๋์ค ํ์ง์ด ๋์๋ฉด ์ธ์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋ฐ ์๊ฐ์ด ์๋นํ ์ค๋ ๊ฑธ๋ฆด ์ ์์ต๋๋ค.
Speech-to-Text์๋ Speech-to-Text API ๋๊ธฐ์ ๋ฐ ๋น๋๊ธฐ์ ์์ฒญ์ ํธ์ถํ๋ REST ๋ฐ gRPC ๋ฉ์๋ ๋ชจ๋๊ฐ ์์ต๋๋ค. API์ ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ์ ๋ณด์ฌ์ฃผ๊ณ ์ค๋ช ํ๋ ๊ฒ์ด ๋ ๊ฐ๋จํ๋ฏ๋ก, ์ด ๋ฌธ์๋ REST API๋ฅผ ๋ณด์ฌ์ค๋๋ค. ๊ทธ๋ฌ๋ REST ๋๋ gRPC ์์ฒญ์ ๊ธฐ๋ณธ ๊ตฌ์ฑ์ ๋งค์ฐ ์ ์ฌํฉ๋๋ค. ์คํธ๋ฆฌ๋ฐ ์ธ์ ์์ฒญ ์ gRPC์์๋ง ์ง์๋ฉ๋๋ค.
๋๊ธฐ์ ์์ฑ ์ธ์ ์์ฒญ
๋๊ธฐ์ Speech-to-Text API ์์ฒญ์ ์์ฑ ์ธ์ ๊ตฌ์ฑ๊ณผ ์ค๋์ค ๋ฐ์ดํฐ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ์ํ ์์ฒญ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
{ "config": { "encoding": "LINEAR16", "sampleRateHertz": 16000, "languageCode": "en-US", }, "audio": { "uri": "gs://bucket-name/path_to_audio_file" } }
๋ชจ๋ Speech-to-Text API ๋๊ธฐ ์ธ์ ์์ฒญ์๋ ์์ฑ ์ธ์ config
ํ๋(RecognitionConfig ์ ํ)๊ฐ ํฌํจ๋์ด์ผ ํฉ๋๋ค. RecognitionConfig
์๋ ๋ค์๊ณผ ๊ฐ์ ํ์ ํ๋๊ฐ ์์ต๋๋ค.
encoding
- (ํ์) ์ ๊ณต๋ ์ค๋์ค์ ์ธ์ฝ๋ฉ ์ฒด๊ณ๋ฅผAudioEncoding
์ ํ์ผ๋ก ์ง์ ํฉ๋๋ค. ์ฝ๋ฑ์ ์ ํํ ์ ์๋ ๊ฒฝ์ฐ, ์ต์์ ์ฑ๋ฅ์ ์ํ๋ค๋ฉดFLAC
๋๋LINEAR16
๊ณผ ๊ฐ์ ๋ฌด์์ค ์ธ์ฝ๋ฉ์ ์ ํํ๋ ๊ฒ์ด ์ข์ต๋๋ค. (์์ธํ ๋ด์ฉ์ ์ค๋์ค ์ธ์ฝ๋ฉ์ ์ฐธ์กฐํ์ธ์.) ํ์ผ ํค๋์ ์ธ์ฝ๋ฉ์ด ํฌํจ๋FLAC
๋ฐWAV
ํ์ผ์ ๊ฒฝ์ฐencoding
ํ๋๋ ํ์๊ฐ ์๋ ์ ํ์ฌํญ์ ๋๋ค.sampleRateHertz
- (ํ์) ์ ๊ณต๋ ์ค๋์ค์ ์ํ๋ง ๋ ์ดํธ(Hz)๋ฅผ ์ง์ ํฉ๋๋ค. (์ํ๋ง ๋ ์ดํธ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์๋์ ์ํ๋ง ๋ ์ดํธ๋ฅผ ์ฐธ์กฐํ์ธ์.) ํ์ผ ํค๋์ ์ํ๋ง ๋ ์ดํธ๊ฐ ํฌํจ๋FLAC
๋ฐWAV
ํ์ผ์ ๊ฒฝ์ฐsampleRateHertz
ํ๋๋ ํ์๊ฐ ์๋ ์ ํ์ฌํญ์ ๋๋ค.languageCode
- (ํ์) ์ ๊ณต๋ ์ค๋์ค์ ์์ฑ ์ธ์์ ์ฌ์ฉํ ์ธ์ด์ ๋ฆฌ์ /์ง์ญ์ ํฌํจํฉ๋๋ค. ์ธ์ด ์ฝ๋๋ BCP-47 ์๋ณ์์ฌ์ผ ํฉ๋๋ค. ์ธ์ด ์ฝ๋๋ ์ผ๋ฐ์ ์ผ๋ก ์ธ์ด๋ฅผ ๋ํ๋ด๋ ๊ธฐ๋ณธ ์ธ์ด ํ๊ทธ์ ๋ณด์กฐ ๋ฆฌ์ ํ์ ํ๊ทธ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค(์: ์์ ์์์ 'en'์ ์์ด๋ฅผ, 'US'๋ ๋ฏธ๊ตญ์ ๋ํ๋). (์ง์๋๋ ์ธ์ด ๋ชฉ๋ก์ ์ง์๋๋ ์ธ์ด๋ฅผ ์ฐธ์กฐํ์ธ์.)maxAlternatives
- (์ ํ์ฌํญ, ๊ธฐ๋ณธ๊ฐ์1
) ์๋ต์์ ์ ๊ณตํ ๋์ฒด ๋ณํ ํ ์คํธ ์๋ฅผ ๋ํ๋ ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก Speech-to-Text API๋ ๊ธฐ๋ณธ ํ ์คํธ ๋ณํ ํ ๊ฐ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ค๋ฅธ ๋์ฒด ๋ณํ ํ ์คํธ๋ฅผ ํ๊ฐํ๋ ค๋ฉดmaxAlternatives
๋ฅผ ๋ ๋์ ๊ฐ์ผ๋ก ์ค์ ํฉ๋๋ค. ์ธ์์๊ฐ ๋์ฒด ๋ณํ ํ ์คํธ ํ์ง์ด ์ ์ ํ๋ค๊ณ ํ๋จํ๋ฉด Speech-to-Text๋ ๋์ฒด ๋ณํ ํ ์คํธ๋ง ๋ฐํํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋์ฒด ๋ณํ ํ ์คํธ๋ ์ฌ์ฉ์ ์๊ฒฌ์ด ํ์ํ ์ค์๊ฐ ์์ฒญ(์: ์์ฑ ๋ช ๋ น)์ ๋ ์ ํฉํ๋ฏ๋ก ์คํธ๋ฆฌ๋ฐ ์ธ์ ์์ฒญ์ ์๋ง์ต๋๋ค.profanityFilter
- (์ ํ์ฌํญ) ๋ชจ์์ ์ธ ๋จ์ด ๋๋ ๊ตฌ๋ฌธ ํํฐ๋ง ์ฌ๋ถ๋ฅผ ๋ํ๋ ๋๋ค. ํํฐ๋ง๋ ๋จ์ด๋ ์ฒซ ๋ฒ์งธ ๋ฌธ์์ ๋ณํ(๋๋จธ์ง ๋ฌธ์)๋ก ํ์๋ฉ๋๋ค(์: f***). ์์ค ํํฐ๋ ๋จ์ผ ๋จ์ด์ ์ ์ฉ๋์ง๋ง ๊ตฌ๋ฌธ ๋๋ ๋จ์ด ์กฐํฉ์ผ๋ก ๋ ์์ค์ด๋ ๊ณต๊ฒฉ์ ์ธ ์์ฑ์ ๊ฐ์งํ์ง ์์ต๋๋ค.speechContext
- (์ ํ์ฌํญ) ์ด ์ค๋์ค๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ํ์ํ ์ถ๊ฐ ๋ฌธ๋งฅ ์ ๋ณด๋ฅผ ํฌํจํฉ๋๋ค. ์ปจํ ์คํธ์๋ ๋ค์๊ณผ ๊ฐ์ ํ์ ํ๋๊ฐ ์์ต๋๋ค.boost
- ์ง์ ๋ ๋จ์ด ๋๋ ๊ตฌ๋ฌธ ์ธ์์ ๊ฐ์ค์น๋ฅผ ํ ๋นํ๋ ๊ฐ์ ํฌํจํฉ๋๋ค.phrases
- ์์ฑ ์ธ์ ์์ ์ ํํธ๋ฅผ ์ ๊ณตํ๋ ๋จ์ด์ ๊ตฌ๋ฌธ์ ๋ชฉ๋ก์ ํฌํจํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ์์ฑ ์ ์์ ์ ๋ณด๋ฅผ ์ฐธ์กฐํ์ธ์.
์ค๋์ค๋ RecognitionAudio ์ ํ์ audio
๋งค๊ฐ๋ณ์๋ฅผ ํตํด Speech-to-Text์ ์ ๊ณต๋ฉ๋๋ค. audio
ํ๋์๋ ๋ค์ ํ์ ํ๋ ์ค ํ๋๊ฐ ํฌํจ๋ฉ๋๋ค.
content
๋ ์์ฒญ์ ์ฝ์ ๋ ํํ์ ํ๊ฐ ๋์ ์ค๋์ค์ ๋๋ค. ์์ธํ ๋ด์ฉ์ ์๋์ ์ค๋์ค ์ฝํ ์ธ ์ฝ์ ์ ์ฐธ์กฐํ์ธ์. ์ด ํ๋์์ ์ง์ ์ ๋ฌ๋๋ ์ค๋์ค ๊ธธ์ด๋ 1๋ถ์ผ๋ก ์ ํ๋ฉ๋๋ค.uri
์๋ ์ค๋์ค ์ฝํ ์ธ ๋ฅผ ๊ฐ๋ฆฌํค๋ URI๊ฐ ํฌํจ๋ฉ๋๋ค. gzip ๋ฑ์ผ๋ก ์์ถ๋์ง ์์ ํ์ผ์ด์ด์ผ ํฉ๋๋ค. ํ์ฌ ์ด ํ๋์๋ Google Cloud Storage URI(gs://bucket-name/path_to_audio_file
ํ์)๊ฐ ํฌํจ๋์ด์ผ ํฉ๋๋ค. ์๋์ URI๋ก ์ค๋์ค ์ฐธ์กฐ ์ ๋ฌ์ ์ฐธ์กฐํ์ธ์.
์ด๋ฌํ ์์ฒญ๊ณผ ์๋ต ๋งค๊ฐ๋ณ์์ ๋ํ ์์ธํ ๋ด์ฉ์ ์๋์ ์์ต๋๋ค.
์ํ๋ง ๋ ์ดํธ
์์ฒญ ๊ตฌ์ฑ์ sampleRateHertz
ํ๋์์ ์ค๋์ค์ ์ํ๋ง ๋ ์ดํธ๋ฅผ ์ง์ ํฉ๋๋ค. ์ด ์ํ๋ง ๋ ์ดํธ๋ ๊ด๋ จ๋ ์ค๋์ค ์ฝํ
์ธ ๋๋ ์คํธ๋ฆผ์ ์ํ๋ง ๋ ์ดํธ์ ์ผ์นํด์ผ ํฉ๋๋ค. Speech-to-Text์์๋ 8000Hz์ 48000Hz ์ฌ์ด์ ์ํ๋ง ๋ ์ดํธ๊ฐ ์ง์๋ฉ๋๋ค. sampleRateHertz
ํ๋๋ฅผ ์ฌ์ฉํ๋ ๋์ ํ์ผ ํค๋์ FLAC
๋๋ WAV
ํ์ผ์ ์ํ๋ง ๋ ์ดํธ๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
Speech-to-Text API์ ์ ์ถํ๋ ค๋ฉด FLAC
ํ์ผ์ FLAC
ํค๋์ ์ํ๋ง ๋ ์ดํธ๊ฐ ํฌํจ๋์ด์ผ ํฉ๋๋ค.
์์ค ์๋ฃ๋ฅผ ์ธ์ฝ๋ฉํ ๋ ์ ํํ ์ ์๋ค๋ฉด 16,000Hz ์ํ๋ง ๋ ์ดํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋์ค๋ฅผ ์บก์ฒํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ฐ์ด ์ด ๊ฐ๋ณด๋ค ๋ฎ์ผ๋ฉด ์์ฑ ์ธ์ ์ ํ๋๊ฐ ์์๋ ์ ์์ต๋๋ค. ๋ ๋ฒจ์ด ๋์๋ ์์ฑ ์ธ์ ํ์ง์ ํฐ ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์ค๋์ค ๋ฐ์ดํฐ๊ฐ 16,000Hz๊ฐ ์๋ ๊ธฐ์กด ์ํ๋ง ๋ ์ดํธ๋ก ์ด๋ฏธ ๋ น์๋ ๊ฒฝ์ฐ์๋ ์ค๋์ค๋ฅผ 16,000Hz๋ก ๋ค์ ์ํ๋งํ์ง ๋ง์ธ์. ์๋ฅผ ๋ค์ด, ๋๋ถ๋ถ์ ์ด์ ์ ํ ํต์ ์ค๋์ค๋ 8,000Hz ์ํ๋ง ๋ ์ดํธ๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ๊ฒฐ๊ณผ ์ ํ๋๊ฐ ๋จ์ด์ง ์ ์์ต๋๋ค. ์ด๋ฌํ ์ค๋์ค๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ, Speech API์ ์๋ ์ํ๋ง ๋ ์ดํธ๋ก ์ค๋์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ธ์ด
Speech-to-Text์ ์ธ์ ์์ง์ ๋ค์ํ ์ธ์ด์ ๋ฐฉ์ธ์ ์ง์ํฉ๋๋ค. ์์ฒญ ๊ตฌ์ฑ์ languageCode
ํ๋์์ BCP-47 ์๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋์ค ์ธ์ด(๊ทธ๋ฆฌ๊ณ ๊ตญ๊ฐ ๋๋ ์ง์ญ ๋ฐฉ์ธ)๋ฅผ ์ง์ ํฉ๋๋ค.
์ธ์ด ์ง์ ํ์ด์ง์์ ๊ฐ ๊ธฐ๋ฅ์ ์ง์๋๋ ์ธ์ด์ ์ ์ฒด ๋ชฉ๋ก์ ํ์ธํ ์ ์์ต๋๋ค.
์์ฐจ(ํ์์คํฌํ)
Speech-to-Text์๋ ์ ๊ณต๋ ์ค๋์ค์์ ์ธ์๋๋ ๊ฐ ๋ง์ ์์ ๋ถ๋ถ๊ณผ ๋ ๋ถ๋ถ์ ์์ฐจ ๊ฐ(ํ์์คํฌํ)์ด ํฌํจ๋ ์ ์์ต๋๋ค. ์์ฐจ ๊ฐ์ ์ค๋์ค ์์ ๋ถ๋ถ์์ ๊ฒฝ๊ณผ๋ ์๊ฐ์ 100ms ๋จ์๋ก ๋ํ๋ ๋๋ค.
์์ฐจ๋ ํนํ ๊ธด ์ค๋์ค ํ์ผ์ ๋ถ์ํ๋ ๊ฒฝ์ฐ, ์ฆ ์ธ์๋ ํ
์คํธ์์ ํน์ ๋จ์ด๋ฅผ ๊ฒ์ํ๊ณ ์๋ณธ ์ค๋์ค์์ ์ฐพ์์ผ ํ๋ ๊ฒฝ์ฐ์ ์ ์ฉํฉ๋๋ค. ์์ฐจ๋ recognize
, streamingrecognize
, longrunningrecognize
๋ฑ ๋ชจ๋ ์ธ์ ๋ฐฉ๋ฒ์์ ์ง์๋ฉ๋๋ค.
์ธ์ ์๋ต์ ์ ๊ณต๋ ์ฒซ ๋ฒ์งธ ๋์ฒด ํ ์คํธ ๋ณํ์ ์์ฐจ ๊ฐ๋ง ํฌํจ๋ฉ๋๋ค.
์์ฒญ ๊ฒฐ๊ณผ์ ์์ฐจ๋ฅผ ํฌํจํ๋ ค๋ฉด ์์ฒญ ๊ตฌ์ฑ์์ enableWordTimeOffsets
๋งค๊ฐ๋ณ์๋ฅผ true๋ก ์ค์ ํฉ๋๋ค. REST API ๋๋ ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ์์๋ ์์ฐจ(ํ์์คํฌํ) ์ฌ์ฉ์ ์ฐธ์กฐํ์ธ์.
์๋ฅผ ๋ค์ด, ๋ค์๊ณผ ๊ฐ์ด ์์ฒญ ๊ตฌ์ฑ์ enableWordTimeOffsets
๋งค๊ฐ๋ณ์๋ฅผ ํฌํจํ ์ ์์ต๋๋ค.
{ "config": { "languageCode": "en-US", "enableWordTimeOffsets": true }, "audio":{ "uri":"gs://gcs-test-data/gettysburg.flac" } }
Speech-to-Text API์์ ํ์ธํ ๊ฒฐ๊ณผ์๋ ๋ค์๊ณผ ๊ฐ์ด ์ธ์๋ ๊ฐ ๋จ์ด์ ๋ํ ์์ฐจ ๊ฐ์ด ํฌํจ๋ฉ๋๋ค.
{ "name": "6212202767953098955", "metadata": { "@type": "type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeMetadata", "progressPercent": 100, "startTime": "2017-07-24T10:21:22.013650Z", "lastUpdateTime": "2017-07-24T10:21:45.278630Z" }, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeResponse", "results": [ { "alternatives": [ { "transcript": "Four score and twenty...(etc)...", "confidence": 0.97186122, "words": [ { "startTime": "1.300s", "endTime": "1.400s", "word": "Four" }, { "startTime": "1.400s", "endTime": "1.600s", "word": "score" }, { "startTime": "1.600s", "endTime": "1.600s", "word": "and" }, { "startTime": "1.600s", "endTime": "1.900s", "word": "twenty" }, ... ] } ] }, { "alternatives": [ { "transcript": "for score and plenty...(etc)...", "confidence": 0.9041967, } ] } ] } }
๋ชจ๋ธ ์ ํ
Speech-to-Text๋ ์ฌ๋ฌ ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ ์ค ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋์ค ํ์ผ์ ํ ์คํธ๋ฅผ ๋ณํํ ์ ์์ต๋๋ค. Google์ ์ด๋ฌํ ์์ฑ ์ธ์ ๋ชจ๋ธ์ ํน์ ์ค๋์ค ์ ํ ๋ฐ ์์ค๋ฅผ ํ์ต์์ผฐ์ต๋๋ค.
Speech-to-Text์ ์ค๋์ค ํ ์คํธ ๋ณํ ์์ฒญ์ ๋ณด๋ด๋ ๊ฒฝ์ฐ ์๋ณธ ์ค๋์ค ์์ค๋ฅผ ์ง์ ํ๋ฉด ๋ ํฅ์๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด Speech-to-Text API๋ ํน์ ์์ค ์ ํ์ ์์ฑ ์ค๋์ค๋ฅผ ์ธ์ํ๋๋ก ํ์ต๋ ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ์ค๋์ค ํ์ผ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
์์ฑ ์ธ์ ๋ชจ๋ธ์ ์ง์ ํ๋ ค๋ฉด ์์ฒญ์ RecognitionConfig
๊ฐ์ฒด์ model
ํ๋๋ฅผ ํฌํจํ์ฌ ์ฌ์ฉํ ๋ชจ๋ธ์ ์ง์ ํฉ๋๋ค.
์ฌ์ฉ ๊ฐ๋ฅํ ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ์ Speech-to-Text ํ ์คํธ ๋ณํ ๋ชจ๋ธ ๋ชฉ๋ก์ ์ฐธ์กฐํ์ธ์.
์ฝ์ ๋ ์ค๋์ค ์ฝํ ์ธ
์์ฒญ์ audio
ํ๋ ๋ด์ content
๋งค๊ฐ๋ณ์๋ฅผ ์ ๋ฌํ๋ฉด ์ฝ์
๋ ์ค๋์ค๊ฐ ์์ฑ ์ธ์ ์์ฒญ์ ํฌํจ๋ฉ๋๋ค. gRPC ์์ฒญ ๋ด์์ ์ฝํ
์ธ ๋ก ์ ๊ณต๋๋ ์ฝ์
๋ ์ค๋์ค์ ๊ฒฝ์ฐ, ํด๋น ์ค๋์ค๋ Proto3 ์ง๋ ฌํ์ ํธํ๋๊ณ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ก ์ ๊ณต๋์ด์ผ ํฉ๋๋ค. REST ์์ฒญ ๋ด์์ ์ฝํ
์ธ ๋ก ์ ๊ณต๋๋ ์ฝ์
๋ ์ค๋์ค์ ๊ฒฝ์ฐ, ํด๋น ์ค๋์ค๋ JSON ์ง๋ ฌํ์ ํธํ๋๊ณ ๋จผ์ Base64๋ก ์ธ์ฝ๋ฉ๋์ด์ผ ํฉ๋๋ค. (์์ธํ ๋ด์ฉ์ ์ค๋์ค๋ฅผ Base64 ์ธ์ฝ๋ฉ์ ์ฐธ์กฐํ์ธ์.)
Google Cloud ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์์ฒญ์ ์์ฑํ๋ ๊ฒฝ์ฐ, ์ผ๋ฐ์ ์ผ๋ก ์ด ๋ฐ์ด๋๋ฆฌ(๋๋ base-64๋ก ์ธ์ฝ๋ฉ๋) ๋ฐ์ดํฐ๋ฅผ content
ํ๋์ ์ง์ ์์ฑํฉ๋๋ค.
URI ์ฐธ์กฐ๋ก ์ค๋์ค ์ ๋ฌ
๋ณด๋ค ์ผ๋ฐ์ ์ผ๋ก๋ ์์ฑ ์์ฒญ์ audio
ํ๋์ Google Cloud Storage์ ์๋ ๋ค์ ํ์์ ์ค๋์ค ํ์ผ(base64๊ฐ ์๋ ๋ฐ์ด๋๋ฆฌ ํ์)์ ๊ฐ๋ฆฌํค๋ uri
๋งค๊ฐ๋ณ์๋ฅผ ์ ๋ฌํฉ๋๋ค.
gs://bucket-name/path_to_audio_file
์๋ฅผ ๋ค์ด, ์์ฑ ์์ฒญ์ ๋ค์ ๋ถ๋ถ์ ๋น ๋ฅธ ์์์์ ์ฌ์ฉ๋๋ ์ํ ์ค๋์ค ํ์ผ์ ์ฐธ์กฐํฉ๋๋ค.
... "audio": { "uri":"gs://cloud-samples-tests/speech/brooklyn.flac" } ...
๋ค์ ์ค ํ๋์ ๊ฐ์ด Google Cloud Storage ํ์ผ์ ์ฝ์ ์ ์๋ ์ ์ ํ ์ก์ธ์ค ๊ถํ์ด ์์ด์ผ ํฉ๋๋ค.
- ๊ณต๊ฐ์ ์ผ๋ก ์ฝ๊ธฐ ๊ฐ๋ฅ(์: Google ์ํ ์ค๋์ค ํ์ผ)
- ์๋น์ค ๊ณ์ ์น์ธ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์๋น์ค ๊ณ์ ์์ ์ฝ๊ธฐ ๊ฐ๋ฅ
- ์ฌ์ฉ์ ๊ณ์ ์น์ธ์ 3-legged OAuth๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ฌ์ฉ์ ๊ณ์ ์์ ์ฝ๊ธฐ ๊ฐ๋ฅ
Google Cloud Storage์ ์ก์ธ์ค ๊ด๋ฆฌ์ ๋ํ ์์ธํ ๋ด์ฉ์ Google Cloud Storage ๋ฌธ์์ ์ก์ธ์ค ์ ์ด ๋ชฉ๋ก ์์ฑ ๋ฐ ๊ด๋ฆฌ๋ฅผ ์ฐธ์กฐํ์ธ์.
Speech-to-Text API ์๋ต
์์์ ์ค๋ช ํ ๊ฒ์ฒ๋ผ ๋๊ธฐ์ Speech-to-Text API ์๋ต์ ์ ๊ณต๋ ์ค๋์ค ๊ธธ์ด์ ๋น๋กํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ๋ ๋ฐ ๋ค์์ ์๊ฐ์ ์๋ชจํ ์ ์์ต๋๋ค. ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋๋ฉด API๋ ๋ค์๊ณผ ๊ฐ์ด ์๋ต์ ๋ฐํํฉ๋๋ค.
{ "results": [ { "alternatives": [ { "confidence": 0.98267895, "transcript": "how old is the Brooklyn Bridge" } ] } ] }
๋ค์์ ํ๋์ ๋ํ ์ค๋ช ์ ๋๋ค.
results
์๋ ๊ฒฐ๊ณผ(SpeechRecognitionResult
ํ์) ๋ชฉ๋ก์ด ํฌํจ๋ฉ๋๋ค. ์ฌ๊ธฐ์ ๊ฐ ๊ฒฐ๊ณผ๋ ํน์ ์ค๋์ค ์ธ๊ทธ๋จผํธ์ ํด๋น๋๊ณ , ์ค๋์ค ์ธ๊ทธ๋จผํธ๋ ๊ตฌ๋์ ์ผ๋ก ๊ตฌ๋ถ๋ฉ๋๋ค. ๊ฐ ๊ฒฐ๊ณผ๋ ๋ค์ ํ๋ ์ค ํ๋ ์ด์์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.alternatives
์๋SpeechRecognitionAlternatives
ํ์์ ๋ณํ ํ ์คํธ ๋ชฉ๋ก์ด ํฌํจ๋ฉ๋๋ค. ๋์ฒด ๋ณํ ํ ์คํธ๊ฐ ๋ ๊ฐ ์ด์ ๋ํ๋ ์ง ์ฌ๋ถ๋maxAlternatives
๋ฅผ1
๋ณด๋ค ํฐ ๊ฐ์ผ๋ก ์ค์ ํ์ฌ ๋์ฒด ๋ณํ ํ ์คํธ๋ฅผ ๋ ๊ฐ ์ด์ ์์ฒญํ๋์ง ์ฌ๋ถ์ Speech-to-Text๊ฐ ์ถฉ๋ถํ ๋์ ํ์ง์ ๋์ฒด ๋ณํ ํ ์คํธ๋ฅผ ์์ฑํ๋์ง ์ฌ๋ถ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค. ๊ฐ ๋์ฒด ๋ณํ ํ ์คํธ๋ ๋ค์ ํ๋๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.transcript
์๋ ๋ณํ ํ ์คํธ๊ฐ ํฌํจ๋ฉ๋๋ค. ์๋์ ๋ณํ ํ ์คํธ ์ฒ๋ฆฌ๋ฅผ ์ฐธ์กฐํ์ธ์.confidence
์๋ ํน์ ๋ณํ ํ ์คํธ์ ๋ํ Speech-to-Text์ ์ ๋ขฐ๋๋ฅผ ๋ํ๋ด๋ ๊ฐ(0~1)์ด ํฌํจ๋ฉ๋๋ค. ์๋์ ์ ๋ขฐ๊ฐ ํด์์ ์ฐธ์กฐํ์ธ์.
์ ๊ณต๋ ์ค๋์ค์์ ์์ฑ์ ์ธ์ํ ์ ์๋ ๊ฒฝ์ฐ, ๋ฐํ๋ results
๋ชฉ๋ก์ ํญ๋ชฉ์ด ์์ต๋๋ค.
์์ฑ์ ์ธ์ํ์ง ๋ชปํ๋ ์ด์ ๋ ์ผ๋ฐ์ ์ผ๋ก ์ค๋์ค ํ์ง์ด ๋งค์ฐ ๋์๊ฑฐ๋ ์ธ์ด ์ฝ๋, ์ธ์ฝ๋ฉ ๋๋ ์ํ๋ง ๋ ์ดํธ ๊ฐ์ด ์ ๊ณต๋ ์ค๋์ค์ ์ผ์นํ์ง ์๊ธฐ ๋๋ฌธ์
๋๋ค.
๋ค์ ์น์ ์ ์ด ์๋ต์ ๊ตฌ์ฑ์์๋ฅผ ์ค๋ช ํฉ๋๋ค.
Speech-to-Text API์ ๊ฐ ๋๊ธฐ ์๋ต์ ์ธ์๋ ๋ชจ๋ ์ค๋์ค๊ฐ ํฌํจ๋ ๋จ์ผ ๊ฒฐ๊ณผ๊ฐ ์๋ ์ฌ๋ฌ ๊ฒฐ๊ณผ ๋ชฉ๋ก์ ๋ฐํํฉ๋๋ค. ์ธ์๋ ์ค๋์ค ๋ชฉ๋ก(transcript
์์ ๋ด)์ ์ฐ์ ์์๋ก ๋ํ๋ฉ๋๋ค.
๋์ฒด ๊ฐ ์ ํ
์ฑ๊ณต์ ์ธ ๋๊ธฐ ์ธ์ ์๋ต ๋ด์ ๊ฐ ๊ฒฐ๊ณผ์๋ alternatives
๊ฐ ํ๋ ์ด์ ํฌํจ๋ ์ ์์ต๋๋ค(์์ฒญ์ maxAlternatives
๊ฐ์ด 1
๋ณด๋ค ํฐ ๊ฒฝ์ฐ). Speech-to-Text๊ฐ ๋์ฒด ๋ณํ ํ
์คํธ์ ์ ๋ขฐ๊ฐ์ด ์ถฉ๋ถํ๋ค๊ณ ํ๋จํ๋ฉด ์๋ต์ ์ด ๋์ฒด ๋ณํ ํ
์คํธ๊ฐ ํฌํจ๋ฉ๋๋ค. ์๋ต์ ์ฒซ ๋ฒ์งธ ๋์ฒด ๋ณํ ํ
์คํธ๋ ํญ์ ์ต๊ณ ์(๊ฐ๋ฅ์ฑ์ด ๊ฐ์ฅ ๋์) ๋์ฒด ๋ณํ ํ
์คํธ์
๋๋ค.
maxAlternatives
๋ฅผ 1
๋ณด๋ค ํฐ ๊ฐ์ผ๋ก ์ค์ ํ๋๋ผ๋ ๋์ฒด ํ
์คํธ ๋ณํ์ด ์ฌ๋ฌ ๊ฐ ๋ฐํ๋๋ค๊ณ ์์ํ๊ฑฐ๋ ๋ณด์ฅํ์ง ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์คํธ๋ฆฌ๋ฐ ์ธ์ ์์ฒญ์ ํตํด ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ค๋ ์ฌ์ฉ์์๊ฒ ์ค์๊ฐ ์ต์
์ ์ ๊ณตํ๊ธฐ ์ํด์๋ ํ ๊ฐ ์ด์์ ๋์ฒด ํ
์คํธ ๋ณํ์ด ๋ ์ ํฉํฉ๋๋ค.
ํ ์คํธ ๋ณํ ์ฒ๋ฆฌ
์๋ต ๋ด์์ ์ ๊ณต๋๋ ๊ฐ ๋์ฒด ํ
์คํธ ๋ณํ์๋ ์ธ์๋ ํ
์คํธ๋ฅผ ํฌํจํ๋ transcript
๊ฐ ํฌํจ๋ฉ๋๋ค. ๋์ฒด ํ
์คํธ ๋ณํ์ด ์์ฐจ์ ์ผ๋ก ์ ๊ณต๋๋ฉด ์ด๋ฌํ ํ
์คํธ ๋ณํ์ ํจ๊ป ์ฐ๊ฒฐํด์ผ ํฉ๋๋ค.
๋ค์ Python ์ฝ๋๋ ๊ฒฐ๊ณผ ๋ชฉ๋ก์์ ๋ฐ๋ณต๋๊ณ ํ ์คํธ ๋ณํ์ ํจ๊ป ์ฐ๊ฒฐํฉ๋๋ค. ์ด๋ ํ ๊ฒฝ์ฐ์๋ ์ฒซ ๋ฒ์งธ ๋์ฒด ํ ์คํธ ๋ณํ(0๋ฒ์งธ)์ ์ทจํฉ๋๋ค.
response = service_request.execute() recognized_text = 'Transcribed Text: \n' for i in range(len(response['results'])): recognized_text += response['results'][i]['alternatives'][0]['transcript']
์ ๋ขฐ๊ฐ
confidence
๊ฐ์ 0.0๊ณผ 1.0 ์ฌ์ด์ ์ถ์ ์น์ด๋ฉฐ, ์ค๋์ค์ ๊ฐ ๋จ์ด์ ํ ๋น๋ '๊ฐ๋ฅ์ฑ' ๊ฐ์ ์ง๊ณํ์ฌ ๊ณ์ฐ๋ฉ๋๋ค. ์ซ์๊ฐ ํด์๋ก ๊ฐ ๋จ์ด๊ฐ ์ ํํ๊ฒ ์ธ์๋์์ ๊ฐ๋ฅ์ฑ์ด ๋์์ง๋๋ค. ์ด ํ๋๋ ์ผ๋ฐ์ ์ผ๋ก ์ต์์ ๊ฐ์ค์๋ง ์ ๊ณต๋๋ฉฐ is_final=true
์ธ ๊ฒฐ๊ณผ์ ๋ํด์๋ง ์ ๊ณต๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, confidence
๊ฐ์ ์ฌ์ฉํ์ฌ ๋์ฒด ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฉ์์๊ฒ ํ์ํ ์ง ์๋๋ฉด ์ฌ์ฉ์์๊ฒ ํ์ธ์ ์์ฒญํ ์ง๋ฅผ ๊ฒฐ์ ํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์ด ๋ชจ๋ธ์ confidence
์ ์๋ฟ๋ง ์๋๋ผ ๋ฌธ์ฅ ์ปจํ
์คํธ์ ๊ฐ์ ๋ค๋ฅธ ์ฌ๋ฌ ๊ฐ์ง ์ ํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ฌ '์ต์์' ๊ฒฐ๊ณผ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
์ด๋ฌํ ์ด์ ๋ก ์ต์์ ๊ฒฐ๊ณผ์ ์ ๋ขฐ๋ ์ ์๊ฐ ์ต๊ณ ์ ์ด ์๋ ๊ฒฝ์ฐ๊ฐ ์์ ์ ์์ต๋๋ค. ๋์ฒด ๊ฒฐ๊ณผ๋ฅผ ์ฌ๋ฌ ๊ฐ ์์ฒญํ์ง ์์ ๊ฒฝ์ฐ ๋ฐํ๋ ํ๋์ '์ต์์' ๊ฒฐ๊ณผ๋ ์์๋ณด๋ค ๋ฎ์ ์ ๋ขฐ๊ฐ์ ๊ฐ์ง ์ ์๋๋ฐ, ์๋ฅผ ๋ค์ด ๋ง์ด ์ฐ์ด์ง ์๋ ๋จ์ด๊ฐ ์ฌ์ฉ๋์์ ๋ ์ด๋ฌํ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ํฌ๊ท์ด๋ ์ฌ๋ฐ๋ฅด๊ฒ ์ธ์๋๋๋ผ๋ ๋ฎ์ '๊ฐ๋ฅ์ฑ' ๊ฐ์ ๊ฐ์ง ์ ์์ต๋๋ค. ์ปจํ
์คํธ์ ๋ฐ๋ผ ํฌ๊ท์ด๊ฐ ๊ฐ์ฅ ์ ํฉํ ์ต์
์ผ๋ก ๊ฒฐ์ ๋๋ฉด ๋์ฒด ์ต์
๋ณด๋ค confidence
๊ฐ์ด ๋ฎ๋๋ผ๋ ์ต์์์ ๊ฒฐ๊ณผ๊ฐ ํ์๋ฉ๋๋ค.
๋น๋๊ธฐ์ ์์ฒญ ๋ฐ ์๋ต
LongRunningRecognize ๋ฉ์๋์ ๋ํ ๋น๋๊ธฐ์ Speech-to-Text API ์์ฒญ์ ๋๊ธฐ์ Speech-to-Text API ์์ฒญ๊ณผ ํ์์ด ๋์ผํฉ๋๋ค. ํ์ง๋ง ๋น๋๊ธฐ์ ์์ฒญ์ ์๋ต์ ๋ฐํํ๋ ๋์ ์ฅ๊ธฐ ์คํ ์์ (์์ ์ ํ)์ ์์ํ๊ณ ์ด ์์ ์ ํผํธ์ถ์์๊ฒ ์ฆ์ ๋ฐํํฉ๋๋ค. ๊ธธ์ด๊ฐ ์ต๋ 480๋ถ์ธ ์ค๋์ค์ ๋น๋๊ธฐ์ ์์ฑ ์ธ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ผ๋ฐ์ ์ธ ์์ ์๋ต์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
{ "name": "operation_name", "metadata": { "@type": "type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeMetadata" "progressPercent": 34, "startTime": "2016-08-30T23:26:29.579144Z", "lastUpdateTime": "2016-08-30T23:26:29.826903Z" } }
์์ง ๊ฒฐ๊ณผ๊ฐ ๋ํ๋์ง ์์ต๋๋ค. Speech-to-Text๋ ์ค๋์ค๋ฅผ ๊ณ์ ์ฒ๋ฆฌํ๊ณ ์ด ์์
์ ์ฌ์ฉํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํฉ๋๋ค. LongRunningRecognize
์์ฒญ์ด ์๋ฃ๋ ๋ ๋ฐํ๋๋ ์์
์ response
ํ๋์ ๊ฒฐ๊ณผ๊ฐ ํ์๋ฉ๋๋ค.
์์ฒญ ์๋ฃ ํ ์ ์ฒด ์๋ต์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
{ "name": "1268386125834704889", "metadata": { "lastUpdateTime": "2016-08-31T00:16:32.169Z", "@type": "type.googleapis.com/google.cloud.speech.v1.LongrunningRecognizeMetadata", "startTime": "2016-08-31T00:16:29.539820Z", "progressPercent": 100 } "response": { "@type": "type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeResponse", "results": [{ "alternatives": [{ "confidence": 0.98267895, "transcript": "how old is the Brooklyn Bridge" }]}] }, "done": True, }
done
์ด True
๋ก ์ค์ ๋์๊ณ ์์
์ response
์ SpeechRecognitionResult ์ ํ์ ๊ฒฐ๊ณผ ์งํฉ์ด ํฌํจ๋ฉ๋๋ค. ์ด ๊ฒฐ๊ณผ ์ ํ์ ๋๊ธฐ์ Speech-to-Text API ์ธ์ ์์ฒญ์์ ๋ฐํ๋๋ ์ ํ๊ณผ ๋์ผํฉ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๋น๋๊ธฐ REST ์๋ต์ done
์ ๊ธฐ๋ณธ๊ฐ์ธ False
๋ก ์ค์ ํฉ๋๋ค. ํ์ง๋ง JSON์ ํ๋ ๋ด์ ๊ธฐ๋ณธ๊ฐ์ด ์กด์ฌํ๋๋ก ์๊ตฌํ์ง ์์ผ๋ฏ๋ก, ์์
์๋ฃ ์ฌ๋ถ ํ
์คํธ ์ done
ํ๋๊ฐ ์กด์ฌํ๊ณ True
๋ก ์ค์ ๋์ด ์๋์ง ๋ชจ๋ ํ
์คํธํด์ผ ํฉ๋๋ค.
์คํธ๋ฆฌ๋ฐ Speech-to-Text API ์ธ์ ์์ฒญ
์คํธ๋ฆฌ๋ฐ Speech-to-Text API ์ธ์ ํธ์ถ์ ์๋ฐฉํฅ ์คํธ๋ฆผ ๋ด์์ ์ค๋์ค์ ์ค์๊ฐ ์บก์ฒ ๋ฐ ์ธ์์ ์ํด ์ค๊ณ๋์์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฒญ ์คํธ๋ฆผ์์ ์ค๋์ค๋ฅผ ๋ณด๋ด๊ณ ์๋ต ์คํธ๋ฆผ์์ ์ค๊ฐ ๋ฐ ์ต์ข ์ธ์ ๊ฒฐ๊ณผ๋ฅผ ์ค์๊ฐ์ผ๋ก ๋ฐ์ ์ ์์ต๋๋ค. ์ค๊ฐ ๊ฒฐ๊ณผ๋ ํน์ ์ค๋์ค ์น์ ์ ํ์ฌ ์ธ์ ๊ฒฐ๊ณผ๋ฅผ ๋ํ๋ด๋ฉฐ, ์ต์ข ์ธ์ ๊ฒฐ๊ณผ๋ ํด๋น ์ค๋์ค ์น์ ์ ๊ฐ์ฅ ๋์ ์ต์ข ์ถ์ธก์ ๋ํ๋ ๋๋ค.
์คํธ๋ฆฌ๋ฐ ์์ฒญ
๋จ์ผ ์์ฒญ ๋ด์์ ๊ตฌ์ฑ ๋ฐ ์ค๋์ค ๋ชจ๋ ๋ณด๋ด๋ ๋๊ธฐ ๋ฐ ๋น๋๊ธฐ ํธ์ถ๊ณผ ๋ฌ๋ฆฌ ์คํธ๋ฆฌ๋ฐ Speech API๋ฅผ ํธ์ถํ๋ ค๋ฉด ์์ฒญ์ ์ฌ๋ฌ ๊ฐ ์ ์กํด์ผ ํฉ๋๋ค. ์ฒซ ๋ฒ์งธ StreamingRecognizeRequest
์๋ ์ค๋์ค ์์ด StreamingRecognitionConfig ์ ํ์ ๊ตฌ์ฑ์ด ํฌํจ๋์ด์ผ ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋์ผํ ์คํธ๋ฆผ์ ํตํด ์ ์ก๋๋ ํ์ StreamingRecognizeRequest
๋ ์์ ์ค๋์ค ๋ฐ์ดํธ์ ์ฐ์ ํ๋ ์์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
StreamingRecognitionConfig
๋ ๋ค์ ํ๋๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
config
- (ํ์) RecognitionConfig ์ ํ์ ์ค๋์ค ๊ตฌ์ฑ ์ ๋ณด๋ฅผ ํฌํจํ๋ฉฐ ๋๊ธฐ์ ๋ฐ ๋น๋๊ธฐ์ ์์ฒญ์ ํ์๋๋ ๊ฒ๊ณผ ๋์ผํฉ๋๋ค.single_utterance
- (์ ํ์ฌํญ, ๊ธฐ๋ณธ๊ฐ์false
) ์์ฑ์ด ๋ ์ด์ ๊ฐ์ง๋์ง ์์ผ๋ฉด ์ด ์์ฒญ์ ์๋์ผ๋ก ์ข ๋ฃํ ์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ ๋๋ค. ์ด ํ๋๊ฐ ์ค์ ๋๋ฉด Speech-to-Text๊ฐ ์ผ์์ค์ง, ๋ฌด์ ๋๋ ๋น์์ฑ ์ค๋์ค๋ฅผ ๊ฐ์งํ์ฌ ์ธ์์ ์ข ๋ฃํ ์๊ธฐ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ์ค์ ๋์ง ์์ผ๋ฉด ์คํธ๋ฆผ์ด ์ง์ ๋ซํ๊ฑฐ๋ ์คํธ๋ฆผ ์ ํ ๊ธธ์ด๊ฐ ์ด๊ณผ๋ ๋๊น์ง ์คํธ๋ฆผ์ด ์ค๋์ค๋ฅผ ๊ณ์ ๋ฆฌ์จํ๊ณ ์ฒ๋ฆฌํฉ๋๋ค.single_utterance
๋ฅผtrue
๋ก ์ค์ ํ๋ฉด ์์ฑ ๋ช ๋ น ์ฒ๋ฆฌ์ ์ ์ฉํฉ๋๋ค.interim_results
- (์ ํ์ฌํญ, ๊ธฐ๋ณธ๊ฐ์false
) ์ด ์คํธ๋ฆผ ์์ฒญ์ด ๋์ค์ ์ถ๊ฐ ์ค๋์ค ์ฒ๋ฆฌ ํ ์ธ๋ถํํ ์ ์๋ ์์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํด์ผ ํจ์ ๋ํ๋ ๋๋ค.is_final
์false
๋ก ์ค์ ํ๋ฉด ์ค๊ฐ ๊ฒฐ๊ณผ๊ฐ ์๋ต ๋ด์ ๊ธฐ๋ก๋ฉ๋๋ค.
์คํธ๋ฆฌ๋ฐ ์๋ต
์คํธ๋ฆฌ๋ฐ ์์ฑ ์ธ์ ๊ฒฐ๊ณผ๋ StreamingRecognitionResponse ํ์์ ์ผ๋ จ์ ์๋ต ๋ด์์ ๋ฐํ๋ฉ๋๋ค. ์ด๋ฌํ ์๋ต์ ๋ค์ ํ๋๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
speechEventType
์ SpeechEventType ์ ํ์ ์ด๋ฒคํธ๋ฅผ ํฌํจํฉ๋๋ค. ์ด๋ฌํ ์ด๋ฒคํธ ๊ฐ์ ๋จ์ผ ๋ฐํ๊ฐ ์๋ฃ๋ ๊ฒ์ผ๋ก ํ๋จ๋๋ ์์ ์ ๋ํ๋ ๋๋ค. ์์ฑ ์ด๋ฒคํธ๋ ์คํธ๋ฆผ ์๋ต ๋ด์์ ๋ง์ปค๋ก ์๋ํฉ๋๋ค.results
์๋ StreamingRecognitionResult ํ์์ ์ค๊ฐ ๋๋ ์ต์ข ๊ฒฐ๊ณผ์ธ ๊ฒฐ๊ณผ ๋ชฉ๋ก์ด ํฌํจ๋ฉ๋๋ค.results
๋ชฉ๋ก์๋ ๋ค์๊ณผ ๊ฐ์ ํ์ ํ๋๊ฐ ์์ต๋๋ค.alternatives
์๋ ๋์ฒด ๋ณํ ํ ์คํธ ๋ชฉ๋ก์ด ํฌํจ๋ฉ๋๋ค.isFinal
์ ์ด ๋ชฉ๋ก ํญ๋ชฉ์์ ์ป์ ๊ฒฐ๊ณผ๊ฐ ์ค๊ฐ ๋๋ ์ต์ข ๊ฒฐ๊ณผ์ธ์ง ๋ํ๋ ๋๋ค. Google์ ๋จ์ผ ์์คํ ์ ์ฒด์์ ์ฌ๋ฌisFinal=true
๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ ์ ์์ง๋ง ์ฐ๊ธฐ ์์คํ ์ด ๋ซํ(์ ๋ฐ ๋ซํ) ํ์๋งisFinal=true
๊ฒฐ๊ณผ๊ฐ ๋ณด์ฅ๋ฉ๋๋ค.stability
๋ ์ง๊ธ๊น์ง ์ป์ ๊ฒฐ๊ณผ์ ๋ณ๋์ฑ์ ๋ํ๋ ๋๋ค.0.0
์ ์์ ํ ๋ถ์์ ์ฑ์ ๋ํ๋ด๊ณ1.0
์ ์์ ํ ์์ ์ฑ์ ๋ํ๋ ๋๋ค. ๋ณํ ํ ์คํธ์ ์ ํ๋๋ฅผ ํ๊ฐํ๋ ์ ๋ขฐ๋์ ๋ฌ๋ฆฌstability
๋ ์ฃผ์ด์ง ๋ถ๋ถ ๊ฒฐ๊ณผ์ ๋ณ๊ฒฝ ์ฌ๋ถ๋ฅผ ์ถ์ ํฉ๋๋ค.isFinal
์ดtrue
๋ก ์ค์ ๋๋ฉด,stability
๋ ์ค์ ๋์ง ์์ต๋๋ค.