#python #python-3.x #ubuntu-20.04
#python #python-3.x #ubuntu-20.04
Вопрос:
Я пытаюсь реализовать porcupine wakeword на python и следовал инструкциям здесь
У меня есть следующий код:
import pvporcupine
### Porcupine wakeword
handle = pvporcupine.create(keywords=['computer', 'jarvis'])
def get_next_audio_frame():
pass
while True:
keyword_index = handle.process(get_next_audio_frame())
if keyword_index >= 0:
# Insert detection event callback here
print('Yes sir?')
pass
но я получаю следующую ошибку:
❯ python3 porcupine.py Traceback (most recent call last): File "porcupine.py", line 10, in <module>
keyword_index = handle.process(get_next_audio_frame()) File "/home/rupstar/Computer/lib/python3.8/site-packages/pvporcupine/porcupine.py", line 129, in process
if len(pcm) != self.frame_length: TypeError: object of type 'NoneType' has no len()
Комментарии:
1. Вы буквально определили
get_next_audio_frame
значение justpass
, значениеNone
возвращается. Так почему же вы ожидаетеhandle.process(None)
, что будете работать? Согласно исходному коду ,pcm
аргумент должен быть «Кадром звуковых сэмплов»., а неNone
. Причина, по которой в этом примере естьpass
inget_next_audio_frame
, заключается просто в том, что это пример. Вы должны на самом деле что — то делать , а не простоpass
.2. Спасибо @RandomDavis… Я очень новичок в этом, поэтому ваш комментарий очень полезен, чтобы заставить меня учиться. Итак, по сути, я должен сказать ему, чтобы он некоторое время слушал звук, а затем повторял, пока он не услышит пробуждающее слово? А потом я должен сказать своему голосовому помощнику, чтобы он слушал команды… Я думаю, что смогу легко интегрировать вторую часть, но я буду бороться с первой частью … По крайней мере, теперь у меня есть направление. Еще раз спасибо!
3. Это совсем не то, что я говорю. Я не знаю, что
pvporcupine
именно делает или как это работает. Все, что я говорю,get_next_audio_frame
должно возвращать аудио, то есть вы должны откуда-то его захватить. В Интернете могут быть существующие примеры того, как комбинироватьpvporcupine
с какой-либо другой библиотекой, которая записывает аудио.4. @RandomDavis спасибо за руководство, это было именно то, что мне было нужно! Теперь я записал звук и успешно внедрил его в свой голосовой помощник, так что никакой pvporcupine (который является детектором тревожных слов) теперь не слышит меня, когда я говорю «Джарвис» или «Компьютер», а затем я могу давать ему команды для выполнения каких-либо действий на моем компьютере с Windows 10; например, открывать приложения, возвращать записи в Википедии, сообщите мне время, дату, погоду в зависимости от местоположения, шутку и т. Д. И т. Д. … Все из командной строки ubuntu, работающей на WSL2!
5. Круто, рад, что помогло. Вы можете опубликовать свое решение в качестве ответа и принять его, если хотите.
Ответ №1:
Это может быть не идеально (это не так), но это показывает, как я создал персональный голосовой помощник на python в WSL2 под управлением Ubuntu 20.04 на компьютере с Windows 10. Голосовой помощник реагирует на слово пробуждения (Jarvis или Компьютер), а затем выполняет команды. К этому сообщению относится то, как вызывается porcupine:
#!/usr/bin/env python3
#Porcupine wakeword includes
import struct
import pyaudio
import pvporcupine
porcupine = None
pa = None
audio_stream = None
try:
porcupine = pvporcupine.create(keywords=["computer", "jarvis"])
pa = pyaudio.PyAudio()
audio_stream = pa.open(
rate=porcupine.sample_rate,
channels=1,
format=pyaudio.paInt16,
input=True,
frames_per_buffer=porcupine.frame_length)
while True:
pcm = audio_stream.read(porcupine.frame_length)
pcm = struct.unpack_from("h" * porcupine.frame_length, pcm)
keyword_index = porcupine.process(pcm)
if keyword_index >= 0:
print("Hotword Detected")
speak("Computer online")
Комментарии:
1. Рассмотрите возможность публикации только того кода, который имеет отношение к вопросу OP, и объясните эту часть. Вы все равно можете связать остальные.