Carnegie Mellon University의 오픈 소스 대규모 어휘, 화자 독립적 연속 음성 인식 엔진 중 하나인 PocketSphinx입니다.
비록 이것이 한때 연구 시스템이었음에도 불구하고 활발한 개발은 대부분 중단되었으며 최신 기술과는 매우 거리가 멀게 되었습니다. 그럼에도 불구하고 사람들이 사용하고 있고 빌드 시스템과 API에 수정해야 할 역사적 오류가 많이 있기 때문에 릴리스를 하고 있습니다.
사람들이 사용하고 있는 5prealpha라는 "릴리스"가 있었기 때문에 버전 번호가 이상하게 큽니다. 이제부터는 적절한 의미 체계 버전 관리를 사용하겠습니다.
사용 약관은 LICENSE 파일을 참조하세요.
이제 빌드에 CMake를 사용하므로 Linux와 Windows에서 합리적인 결과를 얻을 수 있습니다. Mac OS X에는 그런 것이 없기 때문에 확실하지 않습니다. 게다가 어떤 플랫폼에서도 실제로 제대로 구축되거나 작동하지 않았던 오디오 라이브러리가 간단히 제거되었습니다.
더 이상 SphinxBase에 대한 종속성이 없습니다. 더 이상 SphinxBase가 없습니다. 이것은 당신이 찾고 있는 SphinxBase가 아닙니다. 귀하의 모든 SphinxBase는 우리 소유입니다.
가상 환경에 Python 모듈을 설치하려면( ~/ve_pocketsphinx
생성하려는 가상 환경으로 대체) 최상위 디렉터리에서 다음을 수행하세요.
python3 -m venv ~/ve_pocketsphinx . ~/ve_pocketsphinx/bin/activate pip install .
C 라이브러리 및 바인딩을 설치하려면(/usr/local에 대한 액세스 권한이 있다고 가정하고 그렇지 않은 경우 -DCMAKE_INSTALL_PREFIX
사용하여 아래 첫 번째 cmake
명령에서 다른 접두사를 설정하십시오):
cmake -S . -B build cmake --build build cmake --build build --target install
pocketsphinx
명령줄 프로그램은 표준 입력 또는 하나 이상의 파일에서 단일 채널 16비트 PCM 오디오를 읽고 기본 음향 및 언어 모델을 사용하여 음성 인식을 시도합니다. 아마도 신경 쓰지 않을 많은 수의 옵션, 기본적으로 live
로 설정되는 명령 , 하나 이상의 입력( align
모드 제외) 또는 -
표준 입력에서 읽기를 허용합니다.
"speech.wav"라는 단일 채널 WAV 파일이 있고 그 파일에서 음성을 인식하려는 경우 다음을 시도해 볼 수 있습니다(결과가 좋지 않을 수 있음).
pocketsphinx single speech.wav
입력이 다른 형식인 경우 아래 설명된 대로 sox
로 변환하는 것이 좋습니다.
명령은 다음과 같습니다:
help
: 관심 없는 옵션의 긴 목록을 인쇄합니다.
config
: 구성을 JSON으로 표준 출력으로 덤프합니다( -config
옵션을 사용하여 로드할 수 있음).
live
: 각 입력에서 음성 세그먼트를 감지하고 인식을 실행하고(관심하지 않는 옵션을 사용하여) 결과를 줄로 구분된 JSON의 표준 출력에 씁니다. 나는 이것이 가장 아름다운 형식은 아니지만 확실히 XML보다 낫다는 것을 알고 있습니다. 각 줄에는 다음 필드가 포함된 JSON 개체가 포함되어 있으며, 줄을 더 쉽게 읽을 수 있도록 짧은 이름이 있습니다.
b
: 스트림 시작 부분부터의 시작 시간(초)
d
: 지속 시간(초)
p
: 인식 결과의 추정 확률, 즉 모델에 따른 입력 가능성을 나타내는 0~1 사이의 숫자
t
: 인식결과 전문
w
: 세그먼트 목록(일반적으로 단어). 각 세그먼트에는 시작, 끝, 확률 및 단어 텍스트에 대한 b
, d
, p
및 t
필드가 포함됩니다. -phone_align yes
가 전달되면 동일한 형식의 전화 분할이 포함된 w
필드가 표시됩니다.
single
: 각 입력을 단일 발화로 인식하고 위에서 설명한 것과 동일한 형식으로 JSON 개체를 작성합니다.
align
: 단일 입력 파일(또는 표준 입력의 -
)을 단어 시퀀스에 정렬하고 위에서 설명한 것과 동일한 형식으로 JSON 개체를 작성합니다. 첫 번째 위치 인수는 입력이며, 이후의 모든 인수는 인용하는 것을 잊어버렸을 때 놀라움을 피하기 위해 연결되어 텍스트를 만듭니다. 구두점, 대문자, 지네 등을 제거하기 위해 텍스트를 정규화하는 일은 귀하의 책임입니다. 예를 들면 다음과 같습니다.
pocketsphinx align goforward.wav "go forward ten meters"
기본적으로 단어 수준 정렬만 수행됩니다. 전화 정렬을 얻으려면 플래그에 -phone_align yes
전달하십시오. 예:
pocketsphinx -phone_align yes align audio.wav $text
이렇게 하면 특히 읽기 쉬운 출력이 생성되지 않지만 jq를 사용하여 정리할 수 있습니다. 예를 들어 다음과 같이 단어 이름과 시작 시간만 얻을 수 있습니다.
pocketsphinx align audio.wav $text | jq '.w[]|[.t,.b]'
또는 다음과 같이 전화 이름과 통화 시간을 얻을 수 있습니다.
pocketsphinx -phone_align yes align audio.wav $text | jq '.w[]|.w[]|[.t,.d]'
물론 다른 가능성도 많이 있습니다.
soxflags
: 적절한 입력 형식을 생성하는 인수를 sox
에 반환합니다. sox
명령줄은 약간 특이하기 때문에 항상 파일 이름이나 -d
( sox
마이크에서 읽도록 지시하는) 뒤에 와야 합니다. 다음과 같이 실시간 인식을 실행할 수 있습니다.
sox -d $(pocketsphinx soxflags) | pocketsphinx -
또는 다음과 같이 "audio.mp3"라는 파일에서 디코딩합니다.
sox audio.mp3 $(pocketsphinx soxflags) | pocketsphinx -
기본적으로 오류만 표준 오류로 인쇄되지만 더 많은 정보를 원할 경우 -loglevel INFO
전달할 수 있습니다. 부분적인 결과는 인쇄되지 않습니다. 나중에 인쇄될 수도 있지만 숨을 멈추지 마십시오.
프로그래밍의 경우 C 및 Python의 라이브러리 사용에 대한 다양한 예제를 보려면 예제 디렉터리를 참조하세요. Python API 또는 C API에 대한 설명서를 읽을 수도 있습니다.
PocketSphinx는 궁극적으로 Kevin Lenzo의 노력 덕분에 BSD와 유사한 라이선스에 따라 무료 소프트웨어로 출시된 Carnegie Mellon University의 일부 이전 시스템을 기반으로 한 Sphinx-II
를 기반으로 합니다. 특히 디코더의 대부분은 Ravishankar Mosur가 작성했지만(코멘트에서 "rkm"을 찾아보세요) 다양한 다른 사람들도 기여했습니다. 자세한 내용은 AUTHORS 파일을 참조하세요.
David Huggins-Daines(이 문서의 작성자)는 다양한 속도와 메모리 최적화, 고정 소수점 계산, JSGF 지원, 다양한 플랫폼으로의 이식성 및 다소 일관된 API를 추가한 PocketSphinx
만드는 일을 담당하고 있습니다. 그 후 그는 잠시 사라졌다.
그 후 꽤 오랫동안 Nickolay Shmyrev가 유지 관리를 맡았고 Alexander Solovets, Vyacheslav Klimkov 등이 많은 코드를 기여했습니다.
현재 이것은 David Huggins-Daines가 다시 관리하고 있습니다.