【笔记】通过唤醒词唤醒Python程序

前言

通过唤醒词唤醒Python程序

通过Picovoice获取语音特征包

  • 获取用于唤醒的AI的语音特征包

  • 获取语音特征包

  • 下载对应平台的语音特征包

下载依赖

语音输入

  • 调用麦克风接收语音
1
2
brew install portaudio
pip3 install pyaudio

唤醒词检测

1
pip3 install pvporcupine

通过唤醒词唤醒程序

  • 将下载下来的语音特征包解压,并将整个目录放到Python项目根目录下

<PICOVOICE_ACCESS_KEY>:PicoVoice的密钥
./Hey-Loli_en_mac_v2_2_0/Hey-Loli_en_mac_v2_2_0.ppn:语音特征文件路径

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import struct

import pvporcupine
import pyaudio

PICOVOICE_ACCESS_KEY = "<PICOVOICE_ACCESS_KEY>"
KEYWORD_PATH = "./Hey-Loli_en_mac_v2_2_0/Hey-Loli_en_mac_v2_2_0.ppn"

porcupine = pvporcupine.create(
access_key=PICOVOICE_ACCESS_KEY,
keyword_paths=[KEYWORD_PATH]
)

voice_stream = pyaudio.PyAudio().open(
input_device_index=0,
rate=porcupine.sample_rate,
channels=1,
format=pyaudio.paInt16,
input=True,
frames_per_buffer=porcupine.frame_length
)

while True:
audio_object = voice_stream.read(porcupine.frame_length, exception_on_overflow=False)
audio_object_unpacked = struct.unpack_from("h" * porcupine.frame_length, audio_object)
# 检测唤醒词
keyword_idx = porcupine.process(audio_object_unpacked)
# 检测成功
if keyword_idx >= 0:
# DEBUG
print("唤醒成功")

# 停止对麦克风的占用
porcupine.delete()
voice_stream.close()
pyaudio.PyAudio().terminate()

完成

参考文献

哔哩哔哩——MedalCollector