메시로 천천히 얘기해 봤어요.

입문


프로그래밍 경력이 얕지만 IoT 장치를 만지기 위해 MESH 인감 센서를 구매하기로 결심했습니다.
인감 센서라서 반응할 때마다 뭐라 말하고 싶었어요.
그리고 말씀드리자면 천천히 말씀해 주시기 바랍니다... 사용자 정의 라벨을 만들었기 때문에 비망록으로 실었습니다.

원래 메시가 뭐예요?


ESH는 무선으로 연결된 IoT 디바이스로 다음과 같은 주요 특징을 가지고 있습니다.(MESH 공식 홈페이지)
  • 시각적 프로그래밍 응용 프로그램이 있어 프로그래밍을 모르더라도 간단하게 MESH를 만드는 행위 절차(MESH 레시피)
    이것은 응용 프로그램으로 만든 MESH 식단으로 라벨이라고 불리는 것을 연결하여 행동을 결정한다.
  • SDK, 자체 코드 제작 가능(사용자 정의 라벨)
  • MESH Hub를 통해 Raspberry Pi에서 코드 이동 가능
  • 메시에게 반응하면 천천히 말할 때까지


    MESH Hub를 사용하여 MESH의 인감 센서에 반응할 때마다 Raspberry Pi가 천천히 말을 하는 사용자 정의 라벨을 만들었습니다.
    대략적인 물살이 여기에 있다
    1. Raspberry Pi에서 WebAPI 서버 시작
    2. MESH의 사용자 정의 레이블에서 WebAPI에 HTTP 요청 보내기
    3. WebAPI에서 subprocess를 통해 AquesTalk 명령 실행
    주요 참조소니 메시 허브에서 믹 씨가 돌아오라고 했어요..
    천천히 말하라고 해서 OpenJTalk를 사용하던 곳을 AquesTalk로 바꿨어요.
    라즈파에서 천천히 말한 부분은 참고했다라즈베리 파이로 음성 대화를 해보도록 하겠습니다..
    start.py
    #!/usr/bin/perl
    # -*- coding:utf-8 -*-
    
    import subprocess
    
    from flask import Flask, request
    app = Flask(__name__)
    
    def aquestalk(speech):
      cmd = '/home/pi/aquestalkpi/AquesTalkPi -s 80 ' + speech.decode('utf-8') + '| aplay';
    
      // コマンドを実行する
      // 実行が成功すると0が返り、失敗するとCalledProcessErrorが生じる 
      // 詳しくは https://docs.python.jp/3/library/subprocess.html
      output = subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
      print(str(output))
      return True
    
    def say(speech):
      aquestalk(speech)
      return speech
    
    // ルーティングをしてURLとPOSTメソッドを紐づける
    @app.route('/talk', methods=['POST'])
    def handleSay():
      speech = request.form['speech'].encode('utf-8')
      return say(speech)
    
    def main():
      // WebAPIサーバーを起動する
      app.run('127.0.0.1')
    
    if __name__ == '__main__':
      main()
    
    
    맞춤형 라벨 제작 방법소니 메시 허브에서 믹 씨가 돌아오라고 했어요.이 상세하기 때문에 사랑을 끊는다.
    Execute 방법을 실시할 때, 루트 디코더의 매개 변수를 속성 설정과 일치시켜야 합니다.
    태그 속성 사용자 정의

    사용자 정의 태그 실행 방법
    Execute
    // AjaxでアクセスするURL
    // routeデコレーターの引数と合わせる
    var url = "http://localhost:5000/talk";
    
    // URLに送信したいデータオブジェクト
    // PropatyのRefarence Nameと合わせる
    var speech = {
        "speech" : properties.talk,
    };
    
    // Ajaxで非同期通信を行う
    // 詳しくは https://meshprj.com/sdk/doc/ja/
    ajax({
        url: url,
        type: 'post',
        data: speech,
        timeout: 5000,
        success: function(success) {
            log(success);
            callbackSuccess({
                resultType: 'continue' // 次のメソッドを呼ぶ
            });
        },
        error: function(request, error) {
            log(error);
            callbackSuccess({
                resultType: 'continue' // 次のメソッドを呼ぶ
            });
        }
    });
    
    // Ajaxは非同期通信であるためイベントハンドラが実行されるまで待つ
    return {
        resultType: 'pause' // 次のメソッドを呼ばない
    };
    
    
    완성되면 천천히 말하는 꼬리표가 여기 있습니다.

    식단은 간단하게 말해 보았다.
    속성 설정을 통해 식단의 라벨에서 말하는 내용을 바꿀 수 있다.

    다음 명령을 누르면 MESH의 센서가 반응하면 천천히 말을 합니다.야트!
    $ python start.py
    
    MESH와 RasPi로 천천히 말해볼게요 pic.twitter.com/lE7cWc2Mhx - nori (@nori0_)2018년 10월 14일

    반한 곳


    • MESH Hub는 Raspbian(Stretch)일 뿐

      (오랜만에 라스파를 움직여서 라스비안 제시에서 멈췄어요sudo apt-get update, 그래서 여러 번 수행했는데...)
    • MESH Hub 사용 시 iOS 버전의 MESH 응용 프로그램만 지원(2018/9/12 현재)


    • 매개변수subprocess.check_output가 나열되면 CalledProcessError
    • 가 생성됩니다.

    
    # CalledProcessError:Command return non-zero exit status 154が発生
    cmd = '/home/pi/aquestalkpi/AquesTalkPi -s 80 ' + speech.decode('utf-8') + '| aplay';
      output = subprocess.check_output(cmd.split(), stderr=subprocess.STDOUT, shell=True)
    

    subprocess에서 셸=True로 목록을 제시할 때의 행동에 따라 shell=True를 지정하면 목록이 아닌 문자열을 지정하지 않으면 파라미터를 정확하게 전달할 수 없습니다p>

    도전하다


    • "python start.py"로 WebAPI를 시작하는 것은 번거로운 문제
    • 최초의 네 글자 정도의 문제를 천천히 말해라

      (Property Value에'천천히'를 넣으면'천천히'가 들리고 라즈파는 천천히하지 않는다)

      따라서 Property Value가 "천천히 천천히 가"이면 "천천히 가"라는 말이 들립니다.

      자신의 환경 문제일 수도 있지만 해결 방법을 모른다del>

    좋은 웹페이지 즐겨찾기