直接从 SFTP 服务器(使用 Paramiko SFTPClient)将音频文件加载到 Python 的语音识别模块

Loading audio file to Speech recognition module for Python directly from SFTP server (using Paramiko SFTPClient)

我想先说明一下,我仍然是 Paramiko 的菜鸟,所以这可能是完全不可能的。

我想从我的计算机打开服务器上的 .wav 文件,以便对其进行一些语音识别。为此,我使用 Paramiko 创建了一个 Transport,并用它来打开服务器上的音频文件。然后我将此文件设置为我的来源并使用 SpeechRecognition 打印音频文件中所说的任何内容。但是,当我打开位于 remotefilepath 的文件时,它不再被识别为音频文件,因为我收到错误消息 AssertionError: Source must be an audio source。打印 type(file) 我得到 <class 'paramiko.sftp_file.SFTPFile'>.

我只想打开服务器上的文件并对其进行语音识别,而不必先将文件保存到我自己的计算机上。我有什么办法可以做到这一点吗?非常感谢任何 help/advice

import paramiko
import speech_recognition as sr

remotefilepath = /path/to/file.wav
server_ip = 12.34.567.8
server_port = 22
transport = paramiko.Transport((server_ip, server_port))
transport.connect(username="foo", password="bar")
print "Connected to transport"
sftp = transport.open_sftp_client()
file = sftp.open(remotefilepath)

#print type(file)

r = sr.Recognizer()

with file as source:
    r.adjust_for_ambient_noise(source)
    audio = r.record(source)
    try:
        text = r.recognize_google(audio)
        print "You said: {}".format(text)
    except:
        print "Sorry, I could not understand."

file.close()
sftp.close()
transport.close()
print "Closed transport. Ending program" 

Python 2.7 Windows 10。

尝试将文件从源复制到本地并开始处理它。

sftp.get(filepath, localpath)

adjust_for_ambient_noise takes an implementation of AudioSource 作为参数。您正在传递类似文件的对象。

我相信您可以使用 AudioSourceAudioFile 实现。 AudioFile 可以用类文件对象创建:

with sftp.open(remotefilepath) as file:
    with AudioFile(file) as source:
        r.adjust_for_ambient_noise(source)