Today
-
Yesterday
-
Total
-
  • Jetson Nano Developer Kit Snowboy 설치
    Soliloquy 2019. 9. 26. 02:33

     

    NVIDIA로고

    Jetson Nano Developer Kit에다 음성인식 기능 프로그램으로 한 번 놀아보면 어떨까 해서 음성인식 프로그램들을 한 번 찾아보기로 했다. 그러다가 발견한 것이 Snowboy라는 프로그램이었다.

     

    이 프로그램은 구글 어시스턴트나 시리와 같은 문장을 단위로 인식하는 것이 아니라 Ok, google이나 Hey, siri와 같은 짧은 단어를 인식하는 프로그램으로, DNN 기반으로 작동했다. 개인이 IT기업 서비스를 통하지 않고 딥러닝 기술을 이렇게 쉽게 사용할 수 있다니... 물론 짧은 몇 단어 만이긴 하지만 키트에 올릴 프로그램으로 딱 좋은 것 같았다.

     

    이 프로그램의 특이한 점은 아래와 같았다.

     

    • 많은 환경 지원
      • 윈도우, 맥, 리눅스, 라즈베리파이, iOS와 안드로이드. ARM64(aarch64) 지원
      • C, Python, Perl 등 여러 언어 지원
    • 음성 인식 파일은 개인이 직접 프로그래밍으로 만들 수 있는 것이 아니라 Snowboy 웹사이트를 통해 만들어야 한다.
      • 음성 인식 파일은 pmdl과 umdl로 나눠진다.
      • pmdl은 개인 모델 파일이고 umdl은 공용 모델 파일이다. umdl은 보통 사람들 모두가 사용할 수 있고, pmdl은 한 사람만을 대상으로 하는 파일이다.
      • 개인 모델 파일은 Snowboy 웹사이트에 가입하고 직접 녹음을 하여 생성해야 한다.
      • 공용 모델 파일은 개인이 만들 수 있는 방법이 없다. 제작자 중 한 사람의 말로는 너무 많은 시간이 소요돼서 그렇다고 한다. [각주:1]
    • 아파치 라이센스
    • 그 외 오프라인으로 실행함으로써 얻을 수 있는 여러 가지 장점들

     

    프로그램 문서에서 라즈베리파이 용으로 미리 컴파일된 파일을 배포하길래 같은 ARM 계열에 우분투니까 바로 설치되겠지 했는데, 이게 웬걸... 뭐가 잘못됐는지 계속 에러가 난다.

     

    npm install snowboy를 해봐도 에러만 나오고 설치가 제대로 되지 않았았다. 하는 수 없이 소스를 받아와서 직접 빌드를 해보기로 했다.

     

    NVIDIA에서 배포하는 우분투에는 설치되어 있지 않은 프로그램이 있어서 먼저 설치를 한 후 빌드를 진행해야 했다. 그리고 Jetson Nano에 Snowboy를 올린 글을 찾지를 못해서 이와 비슷한 키트인 오렌지파이의 설명을 참조하면서 설치를 진행했다.

     

    설치

     

    설치는 아래와 같은 순서로 파이썬을 프로그램 언어로 사용한다는 전제하에 진행했다.

     

    1. 빌드에 필요한 파일 설치

     

    터미널에서 파이썬 오디오와 관련된 패키지를 설치한다.

     

    sudo apt-get install python-pyaudio python3-pyaudio sox
    pip install pyaudio

    하지만 여기서 pyaudio를 pip로 설치하면 아래와 같은 오류가 발생할 수 있다.

     

    $ pip install pyaudio
    Collecting pyaudio
    Using cached https://files.pythonhosted.org/packages/ab/42/b4f04721c5c5bfc196ce156b3c768998ef8c0ae3654ed29ea5020c749a6b/PyAudio-0.2.11.tar.gz
    Building wheels for collected packages: pyaudio
    Running setup.py bdist_wheel for pyaudio ... error
    ...
      src/_portaudiomodule.c:29:10: fatal error: portaudio.h: No such file or directory
       #include "portaudio.h"
                ^~~~~~~~~~~~~
      compilation terminated.
      error: command 'aarch64-linux-gnu-gcc' failed with exit status 1
    
      ----------------------------------------
      Failed building wheel for pyaudio
      Running setup.py clean for pyaudio
    Failed to build pyaudio
    Installing collected packages: pyaudio
    

     

    이때에는 portaudio19-dev를 설치한 뒤에 다시 pip로 설치하면 된다.

     

    sudo apt install portaudio19-dev

     

    Snowboy는 swig라는 프로그램으로 컴파일을 진행해야 하므로 swig를 설치한다. swig는 최소 3.0.10 버전 이상을 사용해야 하므로, 터미널 상에서 swig -version 을 입력해서 3.0.10 이하라면 다시 설치한다. [각주:2] [각주:3]

     

    git clone https://github.com/swig/swig.git
    cd swig
    ./autogen.sh
    ./configure
    make -j4
    sudo make install
    sudo ldconfig

    설치를 마친 후에 swig -version으로 swig 버전을 확인한다.

     

    Matrix 컴퓨팅을 위한 atlas 패키지를 설치한다.

     

    sudo apt-get install libatlas-base-dev

    여기까지가 깃허브 홈페이지에 나와 있는 기본 작업 내용이다.

     

    2. 깃허브 소스를 받아와서 빌드한다.

     

    git clone https://github.com/Kitt-AI/snowboy.git

    cd를 통해 snowboy 폴더 내의 swig/Python3 으로 이동한 후 make 명령어로 빌드를 한 번 해본다.

     

    cd ./snowboy/swig/Python3
    make

     

    Python.h 와 같은 Python 헤더 관련 문제가 발생한다면 아래와 같이 python3-dev 패키지를 설치해본다.

    sudo apt-get install python-dev
    sudo apt-get install python3-dev

     

    해당 패키지를 설치한 이후에도 아래와 같은 오류가 나서 빌드가 되지 않는다면 Makefile에다 arm64 관련 내용을 추가해야 한다.

     

    ../..//lib/ubuntu64/libsnowboy-detect.a: error adding symbols: File in wrong format
    collect2: error: ld returned 1 exit status

     

    추가해야 하는 내용은 아래의 각주가 추가된 부분이다. [각주:4]

     

      ifneq ("$(ldconfig -p | grep lapack_atlas)","")
        LDLIBS := -lm -ldl -lf77blas -lcblas -llapack_atlas -latlas
      else
        LDLIBS := -lm -ldl -lf77blas -lcblas -llapack -latlas
      endif
      SNOWBOYDETECTLIBFILE = $(TOPDIR)/lib/ubuntu64/libsnowboy-detect.a
      ifneq (,$(findstring arm,$(shell uname -m)))
        SNOWBOYDETECTLIBFILE = $(TOPDIR)/lib/rpi/libsnowboy-detect.a
        ifeq ($(findstring fc,$(shell uname -r)), fc)
          SNOWBOYDETECTLIBFILE = $(TOPDIR)/lib/fedora25-armv7/libsnowboy-detect.a
          LDLIBS := -L/usr/lib/atlas -lm -ldl -lsatlas    
        endif
      endif
    ##### 추가 ################ 
      ifneq (,$(findstring aarch64,$(shell uname -m)))
          SNOWBOYDETECTLIBFILE = $(TOPDIR)/lib/aarch64-ubuntu1604/libsnowboy-detect.a
      endif  
    ########################### 
    endif

     

    그러고 나서 다시 한번 터미널에서 make를 시도해 본다. 에러가 나지 않았으면 빌드에 성공한 것이다.

     

    3. 데모 파일 실행

     

    설치가 잘 되었는지 확인하기 위해 데모 파일을 실행할 차례이다.

     

    데모 파일은 snowboy 폴더의 examples/Python3 에 있다. 데모 실행 방법은 다음과 같다.

     

    cd /snowboy/examples/Python3
    python3 demo.py "resources/models/snowboy.umdl"

     

    마이크에 snowboy를 외쳐보자. 터미널에 아래와 같이 나오면 된다.

     

    $python3 demo.py "./resources/models/snowboy.umdl"
    Listening... Press Ctrl+C to exit
    INFO:snowboy:Keyword 1 detected at time: 2019-09-25 17:45:12
    INFO:snowboy:Keyword 1 detected at time: 2019-09-25 17:45:15
    

     

    만약 말을 했는데도 별 반응이 없다면 터미널 창에서 rec a.wav 를 입력해서 입력이 정상적으로 되는지 확인한다. 음성이 녹음되지 않았다면 인터넷에서 라즈베리파이 USB 마이크를 이용하는 방법을 찾아보면 마이크 입력 문제를 해결하는 방법을 찾을 수 있다.

     

    특이하게도 나의 경우에는 입력 문제를 해결하려고 하다가 USB 웹캠이 인덱스가 0이 아닌 2인 상태로 지정이 된 것을 알게 되었다. 해결방법에 사용된 0번으로 계속 시도를 했다가 2번으로 바꿔서 설정을 하니 마이크가 잘 작동함을 확인했다. 그리고 혹여나 마이크가 잘 작동하지 않을 때 마이크를 한 번 뺐다가 껴보니 되는 경우도 있었다.

     

    이 외에 snowboy 사용 설명은 인터넷을 돌아다니면서 찾아보면 될 것 같다. 파이썬에 관해서 잘 모르는 상태라 우선은 데모 파일에서 여러 개 음성을 인식하는 방법과 인식될 때 어떤 함수를 불러올 것인가 까지는 하는 방법까지 발견했다.

     

    [본문 SVG 파일]

    Nvidia_image_logo.svg
    0.00MB

     

    [대표 이미지]

    출처: https://snowboy.kitt.ai/

     

     

     

    댓글

어제는 이곳에 명이 다녀갔습니다.

Powered & Designed by Tistory