我试图使用Pocketsphinx库在python中制作一个简单的语音识别脚本。 它应该像这样工作:它会连续监听,并且在听到某个特定的短语时会进入if语句。
在Google上,带有密钥短语的liveSpeech的唯一示例是:Python Voice Recognition Library - Always Listen?。 但是它只有1个关键短语。
我设法制造出可以运行的东西,但是效果不好。下面的代码在for循环中针对我发音的多个单词进行多次迭代(针对每个假设进行迭代)。而且因为他这样做,我不能用超过1个单词来制作关键短语,这太可怕了。
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对象制作的.dic和.lm文件 .dic
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
\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 START MUSIC”上说出要
*** MUSIC ***
在命令提示符下。但是我看到重复的单词,像这样(我想每个单词的置信度是多少?):
conf 0.37786707159431465
SIRI
conf 0.4968430593575863
START NEW
conf 0.2751470548287679
NEW
conf 1.0
NEW
请,如何改善我的代码以按照我需要的方式工作。 谢谢!
答案 0 :(得分:0)
代替
lm=os.path.join(model_path, '8415.lm'),
尝试
kws=os.path.join(model_path, 'kws.list'),
答案 1 :(得分:0)
假设当前目录中有一个名为 kws.txt 的文件,内容如下:
siri start music /1e-40/
siri read inbox /1e-40/
siri write new email /1e-40/
此脚本加载文件并监控关键短语的实时输入:
from pocketsphinx import LiveSpeech
speech = LiveSpeech(lm=False, kws="./kws.txt")
for phrase in speech:
print(phrase.segments(detailed=True))
示例输出:
[('siri start music ', -874, 1857, 1984)]
[('siri read inbox ', -1120, 2018, 2157)]
[('siri write new email ', -1364, 2614, 2752)]