Nhận diện giọng nói là một trong những tính năng hữu ích nhất trong nhiều ứng dụng như tự động hóa nhà (home automation), AI, v.v. Phần này sẽ thấy cách thực hiện nhận diện giọng nói sử dụng Python và Google Speech API.
Trong trường hợp này, chúng ta sẽ đưa âm thanh qua microphone để nhận diện. Để cấu hình microphone, có một số tham số.
Để sử dụng module này, phải cài đặt module SpeechRecognition. Có module khác gọi là pyaudio, tùy chọn. Dùng pyaudio ta có thể thiết lập các chế độ âm thanh khác nhau.
sudo pip3 install SpeechRecognition sudo apt-get install python3-pyaudio
Đối với Microphone ngoài hoặc USB, cần cung cấp microphone chính xác để tránh khó khăn. Trên Linux, gõ lsusb để xem thông tin thiết bị USB.
Tham số thứ hai là Chunk Size (kích thước khối). Dùng để chỉ định lượng dữ liệu muốn đọc một lần. Là số là lũy thừa của 2, như 1024 hoặc 2048.
Cũng phải chỉ định sampling rate (tần số lấy mẫu) để xác định tần suất ghi dữ liệu để xử lý.
Vì có thể có tiếng ồn không tránh khỏi trong môi trường xung quanh, ta phải điều chỉnh ambient Noise (nhiễu xung quanh) để lấy chính xác giọng nói.
Các bước nhận diện giọng nói
- Thu thập thông tin liên quan đến microphone.
- Cấu hình microphone: chunk size, sampling rate, điều chỉnh ambient noise, v.v.
- Chờ một lúc để nhận giọng nói.
- Khi giọng nói được nhận diện, cố gắng chuyển thành văn bản, nếu không thì báo lỗi.
- Dừng quy trình.
Mã ví dụ (dùng Microphone)
import speech_recognition as spreg
# Thiết lập sampling rate và kích thước dữ liệu
sample_rate = 48000
data_size = 8192
recog = spreg.Recognizer()
with spreg.Microphone(sample_rate=sample_rate, chunk_size=data_size) as source:
recog.adjust_for_ambient_noise(source)
print('Hãy nói gì đó: ')
speech = recog.listen(source)
try:
text = recog.recognize_google(speech)
print('Bạn đã nói: ' + text)
except spreg.UnknownValueError:
print('Không thể nhận diện âm thanh')
except spreg.RequestError as e:
print("Lỗi yêu cầu từ dịch vụ Google Speech Recognition; {}".format(e))
Kết quả
$ python3 318.speech_recognition.py Hãy nói gì đó: Bạn đã nói: here we are considering the asymptotic notation Pico to calculate the upper bound of the time complexity so then the definition of the big O notation is like this one
Không dùng microphone, ta cũng có thể lấy file âm thanh làm đầu vào để chuyển thành giọng nói.
Mã ví dụ (từ file âm thanh)
import speech_recognition as spreg
sound_file = 'sample_audio.wav'
recog = spreg.Recognizer()
with spreg.AudioFile(sound_file) as source:
speech = recog.record(source) # dùng record thay vì listen
try:
text = recog.recognize_google(speech)
print('File chứa: ' + text)
except spreg.UnknownValueError:
print('Không thể nhận diện âm thanh')
except spreg.RequestError as e:
print("Lỗi yêu cầu từ dịch vụ Google Speech Recognition; {}".format(e))
Kết quả
$ python3 318a.speech_recognition_file.py The file contains: staying ahead of the curve demand planning new technology it also helps you progress in your career