Обнаружение слова пробуждения в porcupine

#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 значение just pass , значение None возвращается. Так почему же вы ожидаете handle.process(None) , что будете работать? Согласно исходному коду , pcm аргумент должен быть «Кадром звуковых сэмплов»., а не None . Причина, по которой в этом примере есть pass in get_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, и объясните эту часть. Вы все равно можете связать остальные.