Mô tả vấn đề
Tôi muốn sử dụng nhận dạng giọng nói như một phần của dự án phần cứng mà tôi muốn hoàn toàn tự chứa (Tôi đang sử dụng các thiết bị tốc độ thấp, năng lượng thấp như Arduino và Raspberry Pi, Kinects, v.v., không chạy máy tính truyền thống với một hệ điều hành có liên quan. Vì vậy, một dự án khép kín / tự chứa).
Nhận dạng giọng nói có thể rất phức tạp tùy thuộc vào mức độ tinh tế mà bạn mong muốn. Tôi có những gì tôi tin rằng một bộ yêu cầu tương đối đơn giản. Tôi chỉ muốn nhận ra giọng nói của chính mình và tôi có một từ điển nhỏ gồm 20 từ hoặc hơn những từ tôi muốn nhận ra. Do đó, tôi không yêu cầu các thư viện nhận dạng giọng nói và văn bản phức tạp hoặc bất kỳ phần mềm bên thứ 3 tuyệt vời nào tôi tìm thấy thông qua các công cụ tìm kiếm Internet (không thiếu những thứ này!). Tôi tin rằng các yêu cầu của tôi là "đủ đơn giản" (trong lý do) để tôi có thể mã hóa giải pháp của riêng mình. Tôi tự hỏi nếu có ai đã viết quy trình của riêng họ như thế này, và phương pháp của tôi có bị sai sót ồ ạt không? Có cách nào tốt hơn để làm điều này mà không đòi hỏi trình độ toán học cao hay phải viết một thuật toán phức tạp không? Đó là giải pháp tôi đã cố gắng nghĩ ra dưới đây.
Mô tả giải pháp
Tôi sẽ viết bài này bằng C nhưng tôi muốn thảo luận về một quá trình bất khả tri ngôn ngữ, tập trung vào quá trình tự nó. Vì vậy, hãy bỏ qua điều đó nếu chúng ta có thể.
1. Tôi sẽ ghi lại từ điển các từ của mình để khớp với những từ đang được nói. Chúng ta có thể tưởng tượng tôi có 20 bản ghi âm của 20 từ khác nhau của tôi, hoặc có thể là cụm từ ngắn hoặc câu của hai hoặc ba từ. Tôi tin rằng điều này làm cho quá trình so sánh hai tệp ghi âm dễ dàng hơn thực tế chuyển đổi âm thanh thành văn bản và so sánh hai chuỗi.
2. Một micrô được kết nối với thiết bị phần cứng của tôi chạy mã của tôi. [1]. Mã này liên tục lấy các mẫu có chiều dài cố định, ví dụ độ dài 10msec và lưu trữ 10 mẫu liên tiếp, ví dụ, theo kiểu ghi nhật ký tròn. [2]. (Tôi đang phát minh ra những số liệu này trên đỉnh đầu để chúng chỉ là ví dụ để mô tả quá trình).
[1] Điều này có thể sẽ được kết nối thông qua bộ lọc thông dải và op-amp, cũng như các bản ghi từ điển sẽ được thực hiện, để giữ cho các mẫu âm thanh được lưu trữ và thu thập nhỏ hơn.
[2] Tôi không chắc chắn chính xác mình sẽ lấy mẫu như thế nào, tôi cần tìm ra một phương thức mặc dù tôi đã tạo ra một hình số (số nguyên / float / double) đại diện cho âm thanh của mẫu 10msec (có lẽ là giá trị CRC hoặc MD5 tổng vv của mẫu âm thanh) hoặc luồng hình (có thể là luồng đọc âm thanh tần số). Cuối cùng, một "mẫu" sẽ là một con số hoặc số liệu. Phần này sẽ liên quan đến phần cứng nhiều hơn nên không thực sự thảo luận ở đây.
3. Mã nhìn vào nó được lưu trữ 10 mẫu liên tiếp và tìm cách tăng âm lượng để chỉ ra một từ hoặc cụm từ đang được nói (một khoảng nghỉ từ im lặng) và sau đó tăng là thu thập mẫu liên tiếp để nói 500 mẫu chẳng hạn. Điều đó có nghĩa là nó thu được 5 giây âm thanh trong 10 mẫu msec.
Đó là những mẫu hoặc "lát" được so sánh giữa âm thanh được lưu trữ và âm thanh thu được. Nếu một tỷ lệ đủ cao của các mẫu được chụp khớp với các mẫu được lưu trữ tương đương, mã sẽ giả sử cùng một từ.
The start of a store recording of the world "hello" for example,
stored words are split into 10 msec samples also
Stored Sample No | 1| 2| 3| 4| 5| 6| 7| 8|
Stored Sample Value |27|38|41|16|59|77|200|78|
Incoming audio (me saying "hello") with some "blank" samples
at the start to symbolise silence
Incoming Sample No | 1| 2| 3| 4| 5| 6| 7| 8| 9|10| 11|12|
Incoming Sample Value | | | |20|27|38|46|16|59|77|200|78|
4 . Khi mã đã thu thập một luồng mẫu đầy đủ, sau đó nó sẽ loại bỏ các mẫu trống khi bắt đầu để tạo bản ghi âm thanh sau. Nó cũng có thể di chuyển mẫu được đặt ngược và chuyển tiếp một vài vị trí để căn chỉnh tốt hơn với mẫu được lưu trữ.
Điều này tạo ra một bộ mẫu như sau:
Stored Sample No | 1| 2| 3| 4| 5| 6| 7| 8|
Stored Sample Value |27|38|41|16|59|77|200|78|
Incoming Sample No |-1| 1| 2| 3| 4| 5| 6| 7| 8|
Incoming Sample Value |20|27|38|46|16|59|81|201|78|
5. Tôi tin rằng bằng cách có giá trị phần trăm cho mỗi mẫu phải gần nhau, vì vậy mẫu 7 khác với giá trị 1 nhỏ hơn% 1 và giá trị phần trăm cho tổng số mẫu phải nằm trong tỷ lệ phần trăm khớp mẫu của chúng , mã có mức độ chính xác dễ điều chỉnh.
Tôi chưa bao giờ làm bất cứ điều gì như thế này với âm thanh trước đây, nó có thể là rất nhiều công việc. Đây là lý do tại sao tôi hỏi câu hỏi này, nếu bạn có thể đã biết câu trả lời cho câu hỏi này là rõ ràng (câu trả lời đó có thể là gì). Tôi hy vọng đây sẽ không phải là một nhiệm vụ lớn về mặt tính toán vì một số phần cứng tôi sẽ sử dụng sẽ là những thứ thấp. Trong hàng trăm Megahertz (Có thể là 1Ghz khi sử dụng Rasp Pi quá xung nhịp). Vì vậy, đây là một cách khá thô để khớp các mẫu âm thanh sử dụng công suất tính toán thấp hơn. Tôi không nhắm đến kết quả tức thì, nhưng chưa đến 30 giây cho một bằng chứng xác thực.
PS Tôi không có đại diện để gắn thẻ này với một thẻ mới như "âm thanh", "nhận dạng âm thanh", "giọng nói", "nhận dạng giọng nói", v.v.