Mycroft-core: ๋กœ์ปฌ STT ๋Œ€์ฒด?

์— ๋งŒ๋“  2017๋…„ 01์›” 21์ผ  ยท  9์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: MycroftAI/mycroft-core

๋‚˜๋Š” ์ด๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ๋…ธ๋ ฅ์„ ๊ธฐ์šธ ์ผ์ง€ ๋˜๋Š” ์ด๊ฒƒ์— ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ๊ด€์‹ฌ์ด ์žˆ์„์ง€ ๋ชจ๋ฅธ๋‹ค.

์ผ๋ฐ˜์ ์ธ ๋กœ์ปฌ (์˜คํ”„๋ผ์ธ) STT ์‹œ์Šคํ…œ์ด ํ˜„์žฌ ์‚ฌ์šฉ๋˜๋Š” ์‹œ์Šคํ…œ๋งŒํผ ์ธ์‹์ด ์ข‹์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ์˜จ๋ผ์ธ ์„œ๋น„์Šค๊ฐ€ ์‘๋‹ตํ•˜๋Š” ๋ฐ ๋„ˆ๋ฌด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ๊ฒฝ์šฐ ๋Œ€์ฒด ์˜ต์…˜๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ์˜ต์…˜์ด ์—ฌ์ „ํžˆ ๋งˆ์Œ์— ๋“ญ๋‹ˆ๋‹ค. . (๋˜ํ•œ ์–ด๋–ค ์ด์œ ๋กœ ๋“  ์„œ๋น„์Šค๊ฐ€ ์ค‘๋‹จ๋˜๋Š” ๊ฒฝ์šฐ)

๊ฐœ์ธ์  ๋ฐฐ๊ฒฝ:

ํ™ˆ ์ธํ„ฐ๋„ท์€ ํ˜•ํŽธ์—†๊ณ , ๋•Œ๋กœ๋Š” ๊ธฐ๋ณธ ์š”์ฒญ์ด ํฌ๊ฒŒ ์ง€์—ฐ๋˜๊ณ , ๋•Œ๋กœ๋Š” ์—ฐ๊ฒฐ์ด ๋Š์–ด์ง‘๋‹ˆ๋‹ค (๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๊ฑฐ์˜ ๋ชจ๋“  ๊ฒƒ์ด ์˜จ๋ผ์ธ ๊ธฐ๋ฐ˜์ด์ง€๋งŒ ๊ฒฐ๊ตญ์—๋Š” ํ™ˆ ์˜คํ† ๋ฉ”์ด์…˜๊ณผ ๊ฐ™์€ ์˜คํ”„๋ผ์ธ ์ „์šฉ ๊ธฐ๋Šฅ์ด์žˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค).

์•”์‹œ:

  • ํ•˜๋‚˜ ์ด์ƒ์˜ ๋กœ์ปฌ ์ธ์‹ ๋„๊ตฌ์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • ์›๊ฒฉ ์„œ๋น„์Šค๊ฐ€ ์‘๋‹ตํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๋กœ์ปฌ ์ธ์‹์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด STT ์„ค์ •์— "๋Œ€์ฒด"์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค (์—ฐ๊ฒฐ๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ฐ X ์ดˆ ์ด์ƒ ์†Œ์š”๋จ).

์ด๊ฒƒ์œผ๋กœ ํ•ด๊ฒฐ ๋œ ๋ฌธ์ œ :

  • ๊ฐœ์ธ ์ •๋ณด
  • ์—ฐ๊ฒฐ ์ƒํƒœ๊ฐ€ ์ข‹์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ๊ณ„์† ์ž‘๋™ ( "์‘๋‹ต ์—†์Œ"๋ณด๋‹ค "๋ถˆ๋Ÿ‰ํ•œ ์‘๋‹ต"์„ ์„ ํ˜ธํ•˜๋Š” ์˜ต์…˜)
Enhancement - proposed help wanted

๋ชจ๋“  9 ๋Œ“๊ธ€

์ „์ ์œผ๋กœ ๋™์˜ํ–ˆ์Šต๋‹ˆ๋‹ค! ์‚ฌ์‹ค, ๋‚ด๊ฐ€ ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ / ๋‰ด์Šค ๋ ˆํ„ฐ ์ค‘ ํ•˜๋‚˜๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฝ์—ˆ๋‹ค๋ฉด์ด ๋ฒ”์œ„๊ฐ€ ํ™•์‹คํ•ด์•ผํ•œ๋‹ค๊ณ  ๋งํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”,

ํ’€ ์š”์ฒญ # 656 ๋ฐ ๊ด€๋ จ ๋ฌธ์ œ # 655๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. ๋กœ์ปฌ pocketsphinx๋ฅผ STT ์žฅ์น˜๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ํด๋ผ์ด์–ธํŠธ / ์Œ์„ฑ์— ํ•„์š”ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

์ŠคํŽ˜์ธ์–ด ๋‚ด์žฌํ™”๋กœ ๊ฐœ๋ฐœ๋˜๊ณ  ํ…Œ์ŠคํŠธ๋˜์—ˆ์ง€๋งŒ PocketSphinx์—์„œ ์ง€์›ํ•˜๋Š” ๋‹ค๋ฅธ ์–ธ์–ด์—๋„ ์œ ํšจํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ์—ฌ๊ธฐ ์œ„ํ‚ค ํŽ˜์ด์ง€๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. ํŠนํžˆ "์ŠคํŽ˜์ธ์–ด๋ฅผ ์ง€์›ํ•˜๋Š” STT ์„ ํƒ ๋ฐ ๊ตฌ์„ฑ"์ด๋ผ๋Š” ์žฅ์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

kaldi๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด pull request # 438๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ผ์ฆˆ๋ฒ ๋ฆฌ ํŒŒ์ด์—์„œ ์ž‘๋™ํ• ์ง€ ํ™•์‹  ํ•  ์ˆ˜ ์—†์ง€๋งŒ ๋‚ด ๋ฐ์Šคํฌํ†ฑ์—์„œ๋Š” ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋ช‡ ๋…„ ํ›„, ์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ์— ๋”ฐ๋ผ ์˜จ๋ผ์ธ ๋ฐ ์˜คํ”„๋ผ์ธ STT๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜๋Š” ์ตœ์ ํ™”๋˜์ง€ ์•Š์€ ๋ฐฉ๋ฒ•์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€๋ฅผ ๋„์šธ ์ˆ˜ ์žˆ๋‹ค๋ฉด. ๊ฐœ์ธ์ ์œผ๋กœ PocketSphinx๋ฅผ ์˜คํ”„๋ผ์ธ STT๋กœ ์‚ฌ์šฉ

mycroft.stt.__init__.py์—์„œ _from mycroft.util import connected_๋ฅผ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค.
๊ทธ๋Ÿฐ ๋‹ค์Œ create () ๋ฉ”์„œ๋“œ์—์„œ ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

if connected() is True: return PocketSphinxSTT() else: try : ...

๊ทธ๋Ÿฐ ๋‹ค์Œ mainskill.__init__.py์—์„œ ๋‹ค์Œ ํ˜ธ์ถœ์„ handle_boot_finished ๋ฉ”์†Œ๋“œ์— ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
self.schedule_repeating_event(self.check_connection_switchSTT, None, 30)
์ด๊ฒƒ์€ ์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ์„ ํ™•์ธํ•˜๋Š” check_connection_switchSTT๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ๋ณ€๊ฒฝ๋œ ๊ฒฝ์šฐ 30 ์ดˆ๋งˆ๋‹ค ์˜ค๋””์˜ค ์„œ๋น„์Šค๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
๋‚ด ๊ธฐ๋Šฅ์€ ๊ฐœ์ธ์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

def check_connection_switchSTT(self):

    if connected() is True:

        self.newstate = "yes"

    else:

        self.newstate = 'no'

    if self.prevstate != self.newstate:

        self.prevstate = self.newstate

        LOG.info("Internet connectivity changed")

        subprocess.call(['/path/to/stop-mycroft.sh', 'voice'])

        subprocess.call(['/path/to/start-mycroft.sh', 'voice'])

`
์Šคํ‚ฌ ์ดˆ๊ธฐํ™” ์ค‘ ์—ฐ๊ฒฐ์— ๋”ฐ๋ผ ์ด์ „์— self.prevstate๋ฅผ ์ •์˜ํ•œ ๊ฒฝ์šฐ

๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์•„๋‹ˆ์ง€๋งŒ ์ฃผ์ œ์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ๊ฒƒ์„ ์ฐพ์„ ์ˆ˜ ์—†์—ˆ๊ณ  ์ธํ„ฐ๋„ท์ด ๋‹ค์šด๋˜์—ˆ์„ ๋•Œ ํด ๋ฐฑ์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ง€๋‚œ 3 ๋…„ ๋™์•ˆ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ๋ˆ„๊ตฌ๋“ ์ง€ ๊ณต์œ ํ•ด์ฃผ์„ธ์š”.

pocketsphinx๋Š” ๋ง‰ ๋‹ค๋ฅธ ๊ณจ๋ชฉ, ํด๋ฐฑ์œผ๋กœ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์„ ์ •๋„๋กœ ์งœ์ฆ๋‚ฉ๋‹ˆ๋‹ค.

์˜คํ”„๋ผ์ธ pocketsphinx STT๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด https://github.com/MycroftAI/mycroft-core/pull/1184 ๋ฅผ ๋งŒ๋“ค์—ˆ์ง€ ๋งŒ ๋ผ์ด๋ธŒ ํ…Œ์ŠคํŠธ๋Š” ์ œ๊ฐ€ ํฌ๊ธฐํ•˜๊ณ  CLI๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ 99,9 %์˜ ์‹œ๊ฐ„์„ ๊ธฐ๋กํ–ˆ์Šต๋‹ˆ๋‹ค.

kaldi ๋ผ์ด๋ธŒ ์ŠคํŠธ๋ฆฌ๋ฐ์€ ์˜ต์…˜์ด๋ฉฐ ์•ฝ๊ฐ„ ๋” ์ž˜ ์ž‘๋™ํ•˜๋ฉฐ 75 % ๋งŒ ํฌ๊ธฐํ•ฉ๋‹ˆ๋‹ค!

์ตœ์„ ์˜ ์„ ํƒ์€ deepspeech / kaldi๋ฅผ ์ž์ฒด ํ˜ธ์ŠคํŠธํ•˜๋Š” ๊ฒƒ์ด์ง€๋งŒ, ๊ทธ๊ฒƒ์กฐ์ฐจ๋„ ํ™ฉ๊ธˆ ์‹œ๊ฐ„๋Œ€์— ์ค€๋น„๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค

๋‚ด pocketsphinx ๋กœ์ปฌ ๋ฆฌ์Šค๋„ˆ (์ œํ•œ๋œ ์–ดํœ˜๋„ ๊ดœ์ฐฎ์Œ)์™€

๊ทธ๊ฒƒ๋“ค์€ ๊ฐœ๋… ์ฆ๋ช…์ด์ง€๋งŒ ์‹ค์ œ๋กœ ์œ ์ง€๋˜๋Š” ํ”„๋กœ์ ํŠธ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. Pull Requests๋Š” ์ตœ์‹  ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

๋Œ€์ฒด STT๊ฐ€ ๋งŽ์€ ์˜๋ฏธ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ, ์ผ๋‹จ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ๊ฒƒ์ด ์žˆ์œผ๋ฉด ํ˜„์žฌ๋Š” ๋ฆฌ์†Œ์Šค ๋‚ญ๋น„์ž…๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ๋กœ pocketsphinx์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„ ์ •ํ™•๋„๊ฐ€ ๋‚ฎ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ์ธ์ ์œผ๋กœ https://github.com/jcsilva/docker-kaldi-gstreamer-server ์™€ ํ•จ๊ป˜ kaldi๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์ข‹์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ์‹œ๋„ํ•œ ๊ฒƒ์€ 2017 ๋…„ ์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ymmv, ๋ฐ”๋ผ๊ฑด๋Œ€ ๋‹ค์‹œ ๋ณผ ์‹œ๊ฐ„์ด ์ƒ๊ธฐ๋ฉด mycroft๊ฐ€ ๊ทธ๋ฆฌ์›Œ์š” :)

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ํ˜„์ง€ ์ฒญ์ทจ์ž๋Š” ์ฐธ์œผ๋กœ ๋งค์šฐ ํฅ๋ฏธ ๋กญ์Šต๋‹ˆ๋‹ค. ์—…๋ฐ์ดํŠธ๋กœ PRํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Vosk ๋Š” RPI์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ˜„์žฌ 16 ๊ฐœ ์–ธ์–ด์— ๋Œ€ํ•œ ์ž‘์€ (50MB) STT ๋ชจ๋ธ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ ์‹œ๋„ํ•ด ๋ณผ๊ฒŒ์š” ...

@domcross ๋Š” ์—ฌ๊ธฐ์—์„œ https://github.com/HelloChatterbox/speech2text/blob/dev/speech2text/engines/kaldi.py

# 2594๊ฐ€ ๋ณ‘ํ•ฉ๋˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. :)

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰