문제 설명
하드웨어 프로젝트의 일부로 음성 인식을 사용하고 싶습니다. 완전히 자체적으로 포함하고 싶습니다 (Arduino 및 Raspberry Pi와 같은 작은 저전력, 저속 장치, Kinects 등을 사용하고 있습니다. 운영 체제가 포함되어 있으므로 폐쇄 형 / 자체 포함 프로젝트).
정교함의 수준에 따라 음성 인식이 매우 복잡 할 수 있습니다. 나는 비교적 간단한 요구 사항을 믿습니다. 나는 내 자신의 목소리 만 인식하고 싶고 인식하고 싶은 단어 20 개 정도의 작은 사전을 가지고 있습니다. 따라서 복잡한 음성-텍스트 및 음성 인식 라이브러리 나 인터넷 검색 엔진을 통해 찾은 우수한 타사 소프트웨어가 필요하지 않습니다 (이 부족하지 않습니다!). 내 요구 사항이 "단순"(이유 내에서) 내 솔루션을 코딩 할 수 있다고 생각합니다. 누군가가 이와 같은 자체 프로세스를 작성했는지 궁금합니다. 내 방법에 큰 결함이 있습니까? 높은 수준의 수학이나 복잡한 알고리즘을 작성하지 않고도이 작업을 수행하는 더 좋은 방법이 있습니까? 그것이 내가 아래에서 생각하려고 한 해결책입니다.
솔루션 설명
나는 이것을 C로 작성할 것이지만 그 과정 자체에 중점을 둔 언어 불가지론 적 과정에 대해 논의하고 싶습니다. 우리가 할 수 있다면 그것을 무시하자.
1 . 나는 말하고있는 단어와 일치하도록 단어 사전을 미리 녹음 할 것입니다. 우리는 내가 20 개의 다른 단어들에 대한 20 개의 기록을 가지고 있거나 아마도 짧은 단어 나 두세 단어의 문장을 가지고 있다고 상상할 수 있습니다. 실제로 오디오를 텍스트로 변환하고 두 개의 문자열을 비교하는 것보다 두 개의 녹음 파일을 비교하는 프로세스가 더 쉬워집니다.
2. 내 코드를 실행하는 하드웨어 장치에 마이크가 연결되어 있습니다. [1]. 이 코드는 예를 들어 10msec 길이의 고정 길이 샘플을 지속적으로 가져오고 10 개의 연속 샘플을 순환 로깅 스타일로 저장합니다. [2]. (이 수치를 머리 꼭대기에서 발명하여 프로세스를 설명하는 예일뿐입니다).
[1] 사전 녹음과 마찬가지로 대역 통과 필터와 연산 증폭기를 통해 저장 및 수집 된 오디오 샘플을 더 작게 유지할 수 있습니다.
[2] 어떻게 샘플을 가져올 지 잘 모르겠습니다. 10msec 샘플의 오디오 (아마 CRC 값)를 나타내는 수치 (정수 / 부동 / 이중)를 생성했지만 방법을 찾아야합니다. 또는 오디오 샘플의 MD5 합계 등) 또는 그림 스트림 (주파수의 오디오 판독 스트림). 궁극적으로 "샘플"은 숫자 또는 숫자입니다. 이 부분은 훨씬 더 많은 하드웨어와 관련이 있으므로 여기서는 논의하지 않습니다.
삼 . 이 코드는 저장된 10 개의 연속 샘플을보고 단어 나 구가 말하고 있음을 나타 내기 위해 볼륨 증가를 찾습니다 (무음에서 분리). 그러면 증가는 예를 들어 500 개의 샘플을 말하는 연속 샘플 수집입니다. 즉, 10msec 샘플에서 5 초의 오디오를 캡처한다는 의미입니다.
저장된 사운드와 캡처 된 사운드를 비교하는 것은 이러한 샘플 또는 "슬라이스"입니다. 캡처 된 샘플의 비율이 충분히 높으면 저장된 샘플과 일치하는 경우 코드는 동일한 단어를 사용합니다.
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. 코드가 전체 샘플 스트림을 수집하면 처음에 블랭크 샘플을 잘라내어 다음과 같은 오디오 녹음을 생성합니다. 또한 저장된 샘플에 더 잘 맞도록 샘플 세트를 앞뒤로 움직일 수 있습니다.
다음과 같은 샘플 세트가 생성됩니다.
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. 각 샘플이 얼마나 근접 해야하는지에 대한 백분율 값을 가짐으로써 샘플 7은 % 1보다 작은 1의 값과 샘플 일치 백분율 내에 있어야하는 총 샘플 수의 백분율 값이 다릅니다 코드는 쉽게 조정 가능한 수준의 정확도를 갖습니다.
나는 이전에 오디오로 이런 일을 한 적이 없었습니다. 많은 일이 될 수 있습니다. 이 질문에 대한 대답이 이미 명확하다는 것을 이미 알고 있다면 (이 답변이 무엇이든간에)이 질문을하는 이유입니다. 내가 사용할 하드웨어 중 일부가 초 초 수준이기 때문에 이것이 계산적으로 큰 작업이 아니길 바라고 있습니다. 수백 메가 헤르츠 (오버 클럭킹 Rasp Pi를 사용하는 1Ghz). 따라서 이것은 낮은 계산 능력을 사용하여 오디오 샘플을 일치시키는 다소 조잡한 방법입니다. 나는 즉각적인 결과를 목표로하지 않지만 적절한 개념 증명을 위해 30 초 미만을 목표로합니다.
추신 : 나는 "오디오", "오디오 인식", "음성", "음성 인식"등과 같은 새로운 태그로 태그를 지정하는 담당자가 없습니다.