首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让pocketsphinx识别关键短语

如何让pocketsphinx识别关键短语
EN

Stack Overflow用户
提问于 2019-05-16 08:11:25
回答 2查看 671关注 0票数 1

我试着用pocketsphinx库用python编写了一个简单的语音识别脚本。它应该是这样工作的:它不断地侦听,当它听到某个关键字时,它会输入if语句。

在谷歌上,带有关键词组的liveSpeech的唯一例子是这个:Python Voice Recognition Library - Always Listen?。但它只有一个关键词组。

我设法做了一些可以运行的东西,但是效果并不好。下面的代码在for循环中对我多次发音的每个单词进行迭代(它对每个假设进行迭代)。因为他这样做了,所以我不能用超过1个单词的关键短语,这是可怕的。

代码语言:javascript
复制
import os
from pocketsphinx import LiveSpeech, get_model_path

model_path = os.path.join(os.getcwd(), 'model')
liveSpeech = LiveSpeech(
    verbose=False,
    sampling_rate=16000,
    buffer_size=2048,
    no_search=False,
    full_utt=False,
    hmm=os.path.join(model_path, 'en-us'),
    lm=os.path.join(model_path, '8415.lm'),
    dic=os.path.join(model_path, '8415.dic'),
)

for phrase in liveSpeech:
    print('---')
    print(phrase.segments(detailed=True))
    liveText = phrase.hypothesis()
    print('conf', phrase.confidence())
    print(phrase.hypothesis())
    print('---')
    if liveText == 'SIRI START MUSIC':
        print('*** MUSIC ***')
    elif liveText == 'SIRI READ INBOX':
        print('*** READ ***')
    elif liveText == 'SIRI WRITE NEW EMAIL':
        print('*** WRITE ***')

我还将发布我为LiveSpeech object .dic创建的.dic和.lm文件

代码语言:javascript
复制
EMAIL   IY M EY L
INBOX   IH N B AA K S
MUSIC   M Y UW Z IH K
NEW N UW
NEW(2)  N Y UW
READ    R EH D
READ(2) R IY D
SIRI    S IH R IY
START   S T AA R T
WRITE   R AY T

和.lm

代码语言:javascript
复制
\1-grams:
-1.0280 </s> -0.3010
-1.0280 <s> -0.2583
-1.5051 EMAIL -0.2583
-1.5051 INBOX -0.2583
-1.5051 MUSIC -0.2583
-1.5051 NEW -0.2872
-1.5051 READ -0.2872
-1.0280 SIRI -0.2583
-1.5051 START -0.2872
-1.5051 WRITE -0.2872

\2-grams:
-0.3010 <s> SIRI 0.0000
-0.3010 EMAIL </s> -0.3010
-0.3010 INBOX </s> -0.3010
-0.3010 MUSIC </s> -0.3010
-0.3010 NEW EMAIL 0.0000
-0.3010 READ INBOX 0.0000
-0.7782 SIRI READ 0.0000
-0.7782 SIRI START 0.0000
-0.7782 SIRI WRITE 0.0000
-0.3010 START MUSIC 0.0000
-0.3010 WRITE NEW 0.0000

\3-grams:
-0.7782 <s> SIRI READ
-0.7782 <s> SIRI START
-0.7782 <s> SIRI WRITE
-0.3010 NEW EMAIL </s>
-0.3010 READ INBOX </s>
-0.3010 SIRI READ INBOX
-0.3010 SIRI START MUSIC
-0.3010 SIRI WRITE NEW
-0.3010 START MUSIC </s>
-0.3010 WRITE NEW EMAIL

这些都是用http://www.speech.cs.cmu.edu/tools/lmtool-new.html制作的

我想当我在麦克风前说"SIRI开始音乐“时会看到

代码语言:javascript
复制
*** MUSIC ***

在命令提示符下。但我看到重复的单词,就像这样(我假设的置信度是每个单词?):

代码语言:javascript
复制
conf 0.37786707159431465
SIRI

conf 0.4968430593575863
START NEW

conf 0.2751470548287679
NEW

conf 1.0
NEW

请告诉我,如何改进我的代码,以我需要的方式工作。谢谢!

EN

回答 2

Stack Overflow用户

发布于 2019-05-17 22:58:09

而不是

代码语言:javascript
复制
lm=os.path.join(model_path, '8415.lm'),

试一试

代码语言:javascript
复制
kws=os.path.join(model_path, 'kws.list'),
票数 0
EN

Stack Overflow用户

发布于 2021-04-19 23:54:43

假设当前目录中有一个名为kws.txt的文件,其内容如下:

代码语言:javascript
复制
siri start music /1e-40/
siri read inbox /1e-40/
siri write new email /1e-40/

此脚本加载到文件中,并监控关键短语的实时输入:

代码语言:javascript
复制
from pocketsphinx import LiveSpeech

speech = LiveSpeech(lm=False, kws="./kws.txt")
for phrase in speech:
    print(phrase.segments(detailed=True))

输出示例:

代码语言:javascript
复制
[('siri start music ', -874, 1857, 1984)]
[('siri read inbox ', -1120, 2018, 2157)]
[('siri write new email ', -1364, 2614, 2752)]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56159167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档