Bunun oldukça yaygın bir sorun olduğunu düşünüyorum ancak henüz uygun bir yanıt bulamadım. İnsan sesinin birçok ses dosyası var, kelimeler üzerinde kırmak istiyorum, bu da dalga formunda duraklamalara bakarak sezgisel olarak yapılabilir, ancak herkes beni otomatik olarak yapan bir işlev/kütüphaneye yönlendirebilir mi?Konuşma ses dosyasını python'daki sözcüklere bölme
cevap
Bunu yapmanın daha kolay bir yolu pydub modülünü kullanmaktır. silent utilities'un son eklenmesi, setting up silence threahold
, setting up silence length
gibi tüm ağır kaldırma işlemlerini gerçekleştirir. vb. ve belirtilen diğer yöntemlerin aksine kodları önemli ölçüde basitleştirir.
İşte here
Ayarlar Bir demo uygulaması, ilham kaynağıdır:
ben dosya "a-z.wav" içinde Z
için A
den konuşulan ingilizce harflerle bir ses dosyası vardı. Geçerli çalışma dizininde bir alt dizin splitAudio
oluşturuldu. Demo kodu çalıştırıldıktan sonra dosyalar her bir heceyi saklayan her ses dosyasıyla 26 ayrı dosyaya bölünmüştür.
Gözlemler: hece bazıları muhtemelen aşağıdaki parametrelerin değişiklik ihtiyacı, kesildi, silence_thresh=-16
Bir min_silence_len=500
kişinin kendi ihtiyacına ayarlamak bu isteyebilirsiniz.
Demo Kodu:
from pydub import AudioSegment
from pydub.silence import split_on_silence
sound_file = AudioSegment.from_wav("a-z.wav")
audio_chunks = split_on_silence(sound_file,
# must be silent for at least half a second
min_silence_len=500,
# consider it silent if quieter than -16 dBFS
silence_thresh=-16
)
for i, chunk in enumerate(audio_chunks):
out_file = ".//splitAudio//chunk{0}.wav".format(i)
print "exporting", out_file
chunk.export(out_file, format="wav")
Çıktı:
Python 2.7.9 (default, Dec 10 2014, 12:24:55) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>>
exporting .//splitAudio//chunk0.wav
exporting .//splitAudio//chunk1.wav
exporting .//splitAudio//chunk2.wav
exporting .//splitAudio//chunk3.wav
exporting .//splitAudio//chunk4.wav
exporting .//splitAudio//chunk5.wav
exporting .//splitAudio//chunk6.wav
exporting .//splitAudio//chunk7.wav
exporting .//splitAudio//chunk8.wav
exporting .//splitAudio//chunk9.wav
exporting .//splitAudio//chunk10.wav
exporting .//splitAudio//chunk11.wav
exporting .//splitAudio//chunk12.wav
exporting .//splitAudio//chunk13.wav
exporting .//splitAudio//chunk14.wav
exporting .//splitAudio//chunk15.wav
exporting .//splitAudio//chunk16.wav
exporting .//splitAudio//chunk17.wav
exporting .//splitAudio//chunk18.wav
exporting .//splitAudio//chunk19.wav
exporting .//splitAudio//chunk20.wav
exporting .//splitAudio//chunk21.wav
exporting .//splitAudio//chunk22.wav
exporting .//splitAudio//chunk23.wav
exporting .//splitAudio//chunk24.wav
exporting .//splitAudio//chunk25.wav
exporting .//splitAudio//chunk26.wav
>>>
kullanın IBM STT. timestamps=true
'u kullanarak, sistemin konuşulduğunu algıladığında, sözcüklerin parçalanmasını sağlayabilirsiniz.
word_alternatives_threshold
gibi başka pek çok harika özellik, sözcüklerin başka bir deyişle, sistemin sistem tarafından tahmin edilmesine yönelik güvenin sağlanması için başka sözcük seçenekleri ve word_confidence
olsun. Gerçek bir fikir edinmek için word_alternatives_threshold
'u (0.1 ve 0.01) arasında ayarlayın.
Bu, kullanıcı adı ve oluşturulan parolayı kullanabildiğiniz aşağıdaki oturum açma işlemi gerektirir.
IBM STT, söz konusu konuşma yeniden tanıma modülünün bir parçasıdır, ancak zaman damgasını almak için işlevi değiştirmeniz gerekecektir.
Bir çıkarılan ve benzeri modifiye formu görünür: Bunu [ `SpeechRecognition`] (https://pypi.python.org/pypi/SpeechRecognition/), açıkça bir örnek olan aradığınız
def extracted_from_sr_recognize_ibm(audio_data, username=IBM_USERNAME, password=IBM_PASSWORD, language="en-US", show_all=False, timestamps=False,
word_confidence=False, word_alternatives_threshold=0.1):
assert isinstance(username, str), "``username`` must be a string"
assert isinstance(password, str), "``password`` must be a string"
flac_data = audio_data.get_flac_data(
convert_rate=None if audio_data.sample_rate >= 16000 else 16000, # audio samples should be at least 16 kHz
convert_width=None if audio_data.sample_width >= 2 else 2 # audio samples should be at least 16-bit
)
url = "https://stream-fra.watsonplatform.net/speech-to-text/api/v1/recognize?{}".format(urlencode({
"profanity_filter": "false",
"continuous": "true",
"model": "{}_BroadbandModel".format(language),
"timestamps": "{}".format(str(timestamps).lower()),
"word_confidence": "{}".format(str(word_confidence).lower()),
"word_alternatives_threshold": "{}".format(word_alternatives_threshold)
}))
request = Request(url, data=flac_data, headers={
"Content-Type": "audio/x-flac",
"X-Watson-Learning-Opt-Out": "true", # prevent requests from being logged, for improved privacy
})
authorization_value = base64.standard_b64encode("{}:{}".format(username, password).encode("utf-8")).decode("utf-8")
request.add_header("Authorization", "Basic {}".format(authorization_value))
try:
response = urlopen(request, timeout=None)
except HTTPError as e:
raise sr.RequestError("recognition request failed: {}".format(e.reason))
except URLError as e:
raise sr.RequestError("recognition connection failed: {}".format(e.reason))
response_text = response.read().decode("utf-8")
result = json.loads(response_text)
# return results
if show_all: return result
if "results" not in result or len(result["results"]) < 1 or "alternatives" not in result["results"][0]:
raise Exception("Unknown Value Exception")
transcription = []
for utterance in result["results"]:
if "alternatives" not in utterance:
raise Exception("Unknown Value Exception. No Alternatives returned")
for hypothesis in utterance["alternatives"]:
if "transcript" in hypothesis:
transcription.append(hypothesis["transcript"])
return "\n".join(transcription)
- 1. Metin-konuşma (ses üretimi) ve konuşma-metin (ses tanıma) API'ları?
- 2. HTML5 Konuşma Sentezi API ses/dil desteği
- 3. mikrofon yerine ses dosyasından konuşma tanıma
- 4. Dizin yolundaki pythondaki boşluklar
- 5. Google Ana Sayfası - Ses dosyasını sunucudan çalın
- 6. iki ses dosyasını karşılaştırır. ses eşleşmesi
- 7. Android: Konuşma Tanıma temp ses dosyası nerede kaydedilir?
- 8. Sessiz parçalar ile video veya ses bölme
- 9. Ses dosyasını sqlite'de nasıl saklayabilirim ..?
- 10. c ses dosyasını çalma programı
- 11. Ben Android konuşma tanıma ses dosyası analiz sistemi olup mikrofondan varsayılan gelen sesli istediğiniz konuşma-metin tanıma
- 12. Konuşma girişini deşifre etme
- 13. Metin-konuşma "konuşma" yöntemi için birim nasıl ayarlanır?
- 14. Android için konuşma tanıma
- 15. python'da wav dosyası bölme
- 16. Bir dize bölme()
- 17. Android telefon görüşmesi sırasında ses dosyasını çalma
- 18. Android'de farklı bir adımla ses dosyasını kaydedin
- 19. javascript kullanarak ses dosyasını base64'e dönüştürme
- 20. web konuşma api konuşma sentezi - sesli liste alma
- 21. Pyttsx ses üretmiyor
- 22. Konuşma Tanıma (Metin Konuşma) android 4.2.2
- 23. Sesli Konuşma kullanarak Metin-Konuşma Sesler
- 24. Büyük bir dosya sözcüklere nasıl bölünür?
- 25. Konuşma çevirisi
- 26. Konuşma tanıma API Android
- 27. Büyük bir zip dosyasını birden çok cihaza bölme nasıl?
- 28. Ses Algılama C#
- 29. Bir ses dosyasındaki ses ısırması örneklerini bulma
- 30. Google'ın Konuşma Tanıma API'si Kullanım Sınırları
[ses dosyalarını transkripsiyona adanmış] (https://github.com/Uberi/speech_recognition/blob/master/examples/audio_transcribe.py). Bir dahaki sefere, Google ilk olarak :) –
Ben transkribe edebilecek bir işlev istemedim, ama daha çok transkripsiyonda örtük olsa da, aynı şey değil kelimelerdeki bir ses dosyasını bölebilirsiniz. SpeechRecognition paketine aşinayım. – user3059201
Gerçek konuşmadaki kelimeler arasında sınır yoktur, akustik ipuçları olmadan tek bir yığın olarak "nasılsınız" diyorsunuz. Eğer kelimeler üzerinde bölünmek istiyorsanız, transkripsiyon yapmalısınız. –