라즈파이와 음성 인식으로 L 치카

htps : // 우에쿠에레 r. 네 t/2463
에서

라즈파이에서 L치카



이번에 준비한 것

  • OS(Raspbian)가 들어간 Raspberrypi3
  • 저항 330Ω 1개
  • 점퍼 와이어(수컷, 암컷) 2개
  • 청색 LED
  • 브레드 보드
  • USB 마이크(이번은 BUFFALO의 BSWHD06MBK를 사용)
    BUFFALO의 BSWHD06MBK는 마이크 내장 웹캠으로 1000 엔 정도이므로 추천

  • 2000엔 하지 않을 정도로 모두 준비할 수 있었습니다~(물론 라즈파이 이외)

     

    LED를 켜



    그럼 조속히, 간단하게 조립해 LED를 점등시켜 봅시다.

    점등 확인



    LED가 올바르게 빛나는지 확인합니다.
    핀 번호는 다음 이미지를 참고로 조립합니다.
    핀 번호

    GPIO 번호

  • 점퍼 와이어를 [a5-핀 번호 6]에 연결
  • 다른 하나를 [a1-핀 번호 1]에 연결
  • 저항을 [b1-b4]에 연결
  • LED를 [c4-c5]에 연결(긴 쪽이 c4)
    올바르게 연결하면 이렇게 LED가 붙었습니다 ...!
    확인이 끝나면 앞서 핀 번호 1번에 붙인 점퍼 와이어를 핀 번호 3번(GPIO:2)에 다시 연결합니다.
    다시 연결해도 LED는 계속 켜져 있어야합니다.


  •  

    파이썬으로 제어해보기



    이번에는 파이썬 라이브러리를 사용하여 지정된 GPIO 번호에 연결된 LED를 제어해 봅시다.

    라이브러리 설치



    터미널에서 다음 명령을 치십시오.
    $ sudo apt-get install python-rpi.gpio
    

    설치가 끝나면 파이썬 파일을 만들어 다음과 같은 프로그램을 작성합니다.

    led_l.py
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    import RPi.GPIO as GPIO
    
    GPIO.setmode(GPIO.BCM) # GPIO番号で指定
    GPIO.setup(2, GPIO.OUT) 
    GPIO.output(2, GPIO.LOW)
    

    실행합니다.
    $ python led_off.py
    

    사라졌습니다.

    점등도 똑같이 프로그램을 써서 실행하면 할 수 있습니다.

    led_h.py
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    import RPi.GPIO as GPIO
    
    GPIO.setmode(GPIO.BCM) # GPIO番号で指定
    GPIO.setup(2, GPIO.OUT) 
    GPIO.output(2, GPIO.HIGH)
    

    Julius 설치



    그런 다음 음성 인식 소프트웨어 Julius를 설치합니다.
    이 절차는 참고 문서를 따르십시오.
    Julius의 사용법(version 4.4.2 대응판)~라즈베리파이 연구실
    라즈파이가 사람의 목소리를 이해하게한다.

    USB 마이크 인식 설정



    julius 설치가 끝나면 usb 마이크를 라즈파이에 연결하십시오.
    다음을 참고로 usb의 우선 순위를 올려 재기동합니다.
    Raspberry Pi에서 Julius를 사용한 음성 인식 (1)

    음성 인식 확인



    그럼, 실행해 보자!
    $ sudo modprobe snd-pcm-oss  //これがないとうまく動作しない
    $ cd ~/julius/julius-kits/dictation-kit-v4.4/  //main.jconfがあるディレクトリに移動
    $ julius -C main.jconf -C am-gmm.jconf -demo  //実行
    

    아래와 같이 표시되면 성공입니다.


    자작 사전 만들기



    이 상태에서는, 모든 말을 인식해 줍니다만 느립니다.
    그래서 사전을 만들어 속도를 올리자.
    (「안녕하세요」의 1단어만의 사전을 만들면, 무엇을 말해도 「안녕하세요」라고 인식되게 된다.)

    이번에는 "붙여"와 "케 해"와 "텐메츠"의 3 단어를 기억합니다.

    denki.yomi
    つけて つけて
    けして けして 
    てんめつ てんめつ
    

    다음 명령으로 컴파일합니다.
    $ iconv -f utf8 -t eucjp denki.yomi | yomi2voca.pl | iconv -f eucjp -t utf8 > denki.phone
    

    다음과 같은 파일이 생겼습니다.

    denki.phone
    つけて   ts u k e t e
    けして   k e sh i t e
    てんめつ    t e N m e ts u
    

    다음으로 다음과 같은 두 개의 파일을 만듭니다.

    denki.grammar
    S : NS_B DENKI NS_E
    DENKI : TSUKETE
    DENKI : KESHITE
    DENKI : TENMETSU
    

    denki.voca
    % TSUKETE
    つけて ts u k e t e
    % KESHITE
    けして k e sh i t e
    % TENMETSU
    てんめつ t e N m e ts u
    % NS_B
    [s]             silB
    % NS_E
    [s]            silE
    

    이들을 다음 명령으로 컴파일합니다.
    $ mkdfa.pl denki
    

    잡혔다.

    음성으로 LED 조작



    계속해서 파이썬 프로그램을 작성하고 인식하여 LED를 제어합니다.
    다음 파일을 추가합니다.

    flash.py
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    import RPi.GPIO as GPIO //LED点滅のプログラム
    import time
    
    def main():
        GPIO.setmode(GPIO.BCM)
        GPIO.setup(2, GPIO.OUT)
        for i in range(10):
            GPIO.output(2, True)
            time.sleep(0.1)
            GPIO.output(2, False)
            time.sleep(0.1)
        GPIO.output(2, GPIO.LOW)
    

    juliustest.py
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    import socket
    import string
    import led_h as on
    import led_l as off
    import flash
    
    
    host = 'localhost'   # Raspberry PiのIPアドレス
    port = 10500         # juliusの待ち受けポート
    
    # パソコンからTCP/IPで、自分PCのjuliusサーバに接続
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect((host, port))
    
    data = ""
    while True:
    
        # "/RECOGOUT"を受信するまで、一回分の音声データを全部読み込む。
        while (string.find(data, "\n.") == -1):
            data = data + sock.recv(1024)
    
        # 音声XMLデータから、<WORD>を抽出して音声テキスト文に連結する。
        strTemp = ""
        for line in data.split('\n'):
            index = line.find('WORD="')
    
            if index != -1:
                line = line[index + 6:line.find('"', index + 6)]
                if line != "[s]":
                    strTemp = strTemp + line
    
        if strTemp != "":
            print("結果:" + strTemp)
        if strTemp == "つけて":
            on.main()
        if strTemp == "けして":
            off.main()
        if strTemp == "てんめつ":
            flash.main()
    
        data = ""
    

    인식하거나 시도해 봅시다.
    새 탭을 열고
    $ sudo modprobe snd-pcm-oss  //ねんのため
    $ julius -C ~/julius/julius-kits/grammar-kit-v4.1/hmm_mono.jconf -nostrip -input mic -gram ~/辞書があるディレクトリ/denki -module &
    $ python juliustest.py
    



    잘 작동했습니다 ...
    LED가 잘 작동합니다.
    너무 붙어서 국수처럼 보입니다.

    참고 기사


  • Julius의 사용법(version 4.4.2 대응판)~라즈베리파이 연구실
  • 라즈파이가 사람의 목소리를 이해하게한다.
  • Raspberry Pi에서 Julius를 사용한 음성 인식 (1)
  • Julius 독점 사전 작성 방법
  • 좋은 웹페이지 즐겨찾기