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

时间:2018-12-14 12:22:03

标签: python speech-recognition sftp paramiko

我想以我仍然是Paramiko的傻瓜这个事实作为开头,因此这可能完全是不可能的。

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

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

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" 

Windows 10上的Python 2.7

2 个答案:

答案 0 :(得分:1)

adjust_for_ambient_noiseAudioSource的实现作为参数。您正在传递类似文件的对象。

我相信您可以改用AudioSource的{​​{3}}实现。可以使用类似文件的对象创建AudioFile

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

答案 1 :(得分:0)

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

sftp.get(filepath, localpath)