Аудио, записанное на Raspberry Pi, имеет более высокий темп и много поломок - PullRequest
0 голосов
/ 11 декабря 2018

Я пытаюсь записать голос, используя python.Для этого я использовал Uberi speech_recognition.

Используя код, показанный ниже, когда я запускаю его на своем Mac, я вижу, что звук довольно чистый и в нормальном темпе.Но когда я запускаю код на Raspberry Pi, скорость звука увеличивается, а также между звуком возникает какая-то поломка.

Может кто-нибудь подсказать, почему это происходит и как я могу исправить, чтобы он работал натоже raspberry pi.

Примечание * - в этом файле .

* 1012 присутствуют определения функций, такие как listen (), get_raw_data () и т. д., которые вызываются в следующем коде.* Аудио файлы присутствуют здесь .Файл1 записан на Mac, файл2 и файл3 записаны на Raspberry Pi.

Спасибо

Пример кода:

import speech_recognition as sr
import logging
import requests
from argparse import ArgumentParser
import json
import datetime
import os
import RPi.GPIO as GPIO

logging.basicConfig(filename='assistant3_logs.log', level=logging.INFO,
                    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
                    datefmt='%m/%d/%Y %I:%M:%S %p')
logger = logging.getLogger(__name__)

r = sr.Recognizer()
m = sr.Microphone()

GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(18,GPIO.OUT)

def forwardRequestToPfivaSpeechClient(serverAddress, audioRawFilename, api, language, user):
    try:
        url = 'http://' + serverAddress + '/data/ingestion/speech-to-text'
        with open(audioRawFilename, 'rb') as f:
            files = {'file' : f}
            requests.post(url, files=files, data={"api": api, "language": language, "user": user})
        #requests.post(url, data={"fileName": fileName, "api": api, "language": language, "user": user})
        logger.info('Request forwarded to PFIVA server')
    except requests.ConnectionError as e:
        logger.error('Error forwarding request to PFIVA server {0}'. format(e))


def parseLanguageForSpeech(speechLanguage):
    speechLanguage = speechLanguage.lower();

    if speechLanguage == 'english':
        return 'en-US'
    elif speechLanguage == 'german':
        return 'de-DE'
    elif speechLanguage == 'french':
        return 'fr-FR'
    elif speechLanguage == 'hindi':
        return 'hi-IN'
    else:
        logger.error('Language not supported')
        exit()


def main(speechLanguage, api, user, serverAddress):
    try:
        audioDirectoryPath = '/Users/john/audioDumps'
        try:
            if not os.path.exists(audioDirectoryPath):
                os.mkdir(audioDirectoryPath)
                logger.info('Audio directory does not exists, created')
            else:
                logger.info('Audio directory already exists')
        except OSError:
            logger.info('Error creating directory ' + audioDirectoryPath)
            exit()

        logger.info('Initiating speech recognition.')
        with m as source: r.adjust_for_ambient_noise(source)
        logger.info('Setting minimum energy threshold to [' + format(r.energy_threshold) + ']')
        while True:
            GPIO.output(18,GPIO.HIGH)
            logger.info('Waiting for user query')
            # After 5 secs, cut off listening
            with m as source: audio = r.listen(source, phrase_time_limit=5)
            if audio is not None:
                GPIO.output(18,GPIO.LOW)
                logger.info('Audio captured, getting raw and wav data.')
                rawData = audio.get_raw_data(convert_rate=16000, convert_width=2)
                wavData = audio.get_wav_data(convert_rate=16000, convert_width=2)

                currentDateTime = datetime.datetime.now().strftime("%Y-%m-%dT%H_%M_%S")
                try:
                    path = audioDirectoryPath + '/' + currentDateTime
                    logger.info('Creating directory : ' + path) 
                    os.mkdir(path)
                except OSError:
                    logger.info('Error creating directory ' + path)
                    exit()

                outputRawFilename = path + "/" + currentDateTime + ".raw"
                outputRawFile = open(outputRawFilename,"wb")
                outputRawFile.write(rawData)
                outputRawFile.close()
                logger.info('Audio data written to a raw file')

                outputWavFilename = path + "/" + currentDateTime + ".wav"
                outputWavFile = open(outputWavFilename,"wb")
                outputWavFile.write(wavData)
                outputWavFile.close()
                logger.info('Audio data written to a wav file')

                #forwardRequestToPfivaSpeechClient(serverAddress, currentDateTime, api, parseLanguageForSpeech(speechLanguage), user)
                forwardRequestToPfivaSpeechClient(serverAddress, outputRawFilename, api, parseLanguageForSpeech(speechLanguage), user)
    except KeyboardInterrupt:
        pass


if __name__ == '__main__':
    parser = ArgumentParser()
    parser.add_argument("--language", dest="language", help="Specify language for voice assistant", required=False, default="english")
    parser.add_argument("--api", dest="api", help="Specify API for voice assistant", required=False, default="GoogleCloudSpeech")
    parser.add_argument("--serverAddress", dest="serverAddress", help="Specify address for PFIVA server", required=False, default="rasp-pf.de")
    parser.add_argument("--user", dest="user", help="Specify user for voice assistant", required=True)
    args = parser.parse_args()
    logger.info('Language : ' + str(args.language))
    logger.info('API : ' + str(args.api))
    logger.info('User : ' + str(args.user))
    logger.info('PFIVA server address : ' + str(args.serverAddress))
    main(args.language, args.api, args.user, args.serverAddress)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...