Tôi cảm thấy đây là một vấn đề khá phổ biến nhưng tôi chưa tìm thấy câu trả lời phù hợp. Tôi có nhiều tập tin âm thanh của bài phát biểu con người mà tôi muốn chia lời, có thể được thực hiện bằng cách xem xét tạm dừng trong dạng sóng, nhưng bất cứ ai có thể chỉ cho tôi một hàm/thư viện trong python tự động thực hiện điều này?Chia nhỏ tập tin âm thanh lời nói thành các từ trong python
Trả lời
Cách dễ dàng hơn để thực hiện việc này là sử dụng mô-đun pydub. bổ sung gần đây của silent utilities thực hiện tất cả việc nâng hạng nặng như setting up silence threahold
, setting up silence length
. vv và đơn giản hóa mã đáng kể như trái ngược với các phương pháp khác được đề cập.
Đây là một thực hiện demo, cảm hứng từ here
Setup:
Tôi đã có một tập tin âm thanh với chữ cái tiếng Anh nói từ A
để Z
trong file "một-z.wav". Một thư mục con splitAudio
đã được tạo trong thư mục làm việc hiện tại. Khi thực thi mã demo, các tệp được chia thành 26 tệp riêng biệt với mỗi tệp âm thanh lưu trữ từng âm tiết.
Quan sát: Một số âm tiết bị cắt đứt, có thể cần phải sửa đổi các thông số sau,
min_silence_len=500
silence_thresh=-16
Một có thể muốn điều chỉnh những yêu cầu riêng của mình.
Demo Code:
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")
Output:
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
>>>
Sử dụng IBM STT. Sử dụng timestamps=true
bạn sẽ nhận được từ chia tay cùng với khi hệ thống phát hiện chúng đã được nói.
Có rất nhiều tính năng thú vị khác như word_alternatives_threshold
để nhận các khả năng khác của từ và word_confidence
để có được sự tự tin mà hệ thống dự đoán từ đó. Đặt word_alternatives_threshold
ở giữa (0,1 và 0,01) để có ý tưởng thực sự.
Yêu cầu này đăng nhập, sau đó bạn có thể sử dụng tên người dùng và mật khẩu được tạo.
STT của IBM đã là một phần của mô-đun nhận dạng giọng nói được đề cập, nhưng để nhận được dấu thời gian từ, bạn sẽ cần sửa đổi hàm.
Một chiết xuất và hình thức sửa đổi trông giống như:
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. Regex được chia nhỏ trong khi đọc từ tập tin
- 2. Thuật toán để ghép nối âm thanh lời nói với âm thanh liên tục?
- 3. Bản ghi âm thanh thời gian miễn phí (lời nói thành văn bản)?
- 4. Chọn một tập tin âm thanh android
- 5. chơi tập tin âm thanh từ thư mục tài sản
- 6. PHP - Chia nhỏ từ thành mảng
- 7. Nhận dạng thời gian thực của âm thanh không lời nói, âm nhạc từ luồng micrô liên tục
- 8. chia mảng thành các phần nhỏ hơn
- 9. Âm thanh Python ("Chuông")
- 10. lời nói thành văn bản trong android
- 11. Hiển thị âm thanh/giọng nói
- 12. Đảo ngược tập tin âm thanh trong Android
- 13. Cách tải tuyến đường hoặc tập tin âm thanh của thiết bị âm thanh từ thiết bị trong Android?
- 14. Ghi âm thanh không để tập tin trên Android
- 15. Mẫu mã để ghi âm từ máy Mac trong Cocoa và lưu vào tập tin?
- 16. Lưu byte âm thanh [] vào tập tin wav
- 17. Tạo âm thanh sóng sin trong Python
- 18. Cách phát một tài nguyên Tập tin Âm thanh WPF
- 19. mã hóa nhị phân thành python âm thanh hoặc C
- 20. Phát âm thanh nhỏ trong trò chơi Java
- 21. mpg/mpeg thời gian tập tin âm thanh jquery
- 22. tập tin âm thanh Streaming và bộ nhớ đệm nó
- 23. Express Router undefined params với router.use khi chia nhỏ các tập tin
- 24. Văn bản thành lời nói (TTS) -Android
- 25. Chia biểu thức thành tập hợp các cụm từ
- 26. Trộn hai mẫu âm thanh từ các tệp MP3
- 27. âm thanh ghi lại tập tin bị hỏng vấn đề trong Actionscript
- 28. Cách đặt âm lượng cho phương thức "nói" từ văn bản thành giọng nói?
- 29. Tự động trả lời runas từ tập tin batch
- 30. Các loại biến có thể chia nhỏ - thành viên .value
Bạn đang tìm kiếm [ 'SpeechRecognition'] (https://pypi.python.org/pypi/SpeechRecognition/), mà rõ ràng có một ví dụ dành riêng cho [sao chép tệp âm thanh] (https://github.com/Uberi/speech_recognition/blob/master/examples/audio_transcribe.py). Lần sau, Google đầu tiên :) –
Tôi đã không yêu cầu một chức năng có thể phiên âm, nhưng thay vào đó có thể tách một tệp âm thanh trên các từ, mặc dù có thể tiềm ẩn trong phiên âm, không phải là điều tương tự. Tôi quen với gói SpeechRecognition. – user3059201
Không có ranh giới giữa các từ trong lời nói thực, bạn nói "bạn thế nào" như một đoạn đơn lẻ mà không có bất kỳ dấu hiệu âm thanh nào. Nếu bạn muốn chia nhỏ các từ, bạn cần phải phiên âm. –