Rede oder nicht Rede-Erkennung in Python
Ich Schreibe ein Programm, dass erkennt Rede. Was es tut, ist es nimmt audio vom Mikrofon auf und wandelt Sie in text mit Sphinx. Mein problem ist, ich möchte die Aufnahme zu starten, nur audio, wenn etwas gesprochen wird, durch den Benutzer.
Experimentierte ich durch das Lesen der audio-Pegel vom Mikrofon und Aufnahme nur, wenn der Pegel über einen bestimmten Wert. Aber es ist nicht so effektiv. Das Programm startet die Aufnahme, wenn er entdeckt etwas laut. Dies ist der code, den ich verwendet
import audioop
import pyaudio as pa
import wav
class speech():
def __init__(self):
# soundtrack properties
self.format = pa.paInt16
self.rate = 16000
self.channel = 1
self.chunk = 1024
self.threshold = 150
self.file = 'audio.wav'
# intialise microphone stream
self.audio = pa.PyAudio()
self.stream = self.audio.open(format=self.format,
channels=self.channel,
rate=self.rate,
input=True,
frames_per_buffer=self.chunk)
def record(self)
while True:
data = self.stream.read(self.chunk)
rms = audioop.rms(data,2) #get input volume
if rms>self.threshold: #if input volume greater than threshold
break
# array to store frames
frames = []
# record upto silence only
while rms>threshold:
data = self.stream.read(self.chunk)
rms = audioop.rms(data,2)
frames.append(data)
print 'finished recording.... writing file....'
write_frames = wav.open(self.file, 'wb')
write_frames.setnchannels(self.channel)
write_frames.setsampwidth(self.audio.get_sample_size(self.format))
write_frames.setframerate(self.rate)
write_frames.writeframes(''.join(frames))
write_frames.close()
Gibt es eine Möglichkeit, die ich unterscheiden kann zwischen menschlicher Stimme und andere Geräusche in Python ? Hoffe, jemand kann mich finden eine Lösung.
- Ich Teste deinen code in ubuntu, von wo aus wav-Paket zum download & test ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, dass dein Problem ist, dass in dem moment, Sie versuchen aufzunehmen, ohne Anerkennung die Rede, so ist es nicht diskriminierend - erkennbare Sprache ist alles, was aussagekräftige Ergebnisse nach Anerkennung - also catch-22. Man könnte der Einfachheit halber von der Suche nach einer öffnung Schlüsselwort. Sie können auch filter auf Stimme Frequenzbereich als das menschliche Ohr und das Telefon-Unternehmen tun, und Sie können sich an der mark-space ratio - glaube ich, dass es einige Publikationen eine Weile wieder auf, aber sehen Sie aus - das variiert von Sprache zu Sprache. Eine schnelle Google-können sehr informativ. Sie können auch finden, diese Artikel interessant.
Ich denke was du suchst ist VAD (voice activity detection). VAD verwendet werden kann für die Vorverarbeitung von Sprache für die automatische Spracherkennung. Hier einige open-source-Projekt für Implementierung von VAD link. Möge es Ihnen helfen.
Dies ist ein Beispiel-Skript unter Verwendung eines VAD-Bibliothek.
https://github.com/wiseman/py-webrtcvad/blob/master/example.py