SIerによるSIerのためのRaspberry Pi 入門 2(OpenJTalk+tweepy)

6,187 views

Published on

2013/11/15 勉強会資料
サイト
http://77sites.appspot.com/2/page1.html

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
6,187
On SlideShare
0
From Embeds
0
Number of Embeds
1,272
Actions
Shares
0
Downloads
17
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

SIerによるSIerのためのRaspberry Pi 入門 2(OpenJTalk+tweepy)

  1. 1. SIerによるSIerのための Raspberry Pi 入門2 OSセットアップ方法の紹介 Tweet pi(無線lan + OpenJTalk + Twitter) 2013/11/15 catmoney http://77sites.appspot.com/2/page1.html
  2. 2. 2 本日のアジェンダ  ・OSセットアップ  ・tweet Piを作ろう ~次回の勉強会ネタも決める~
  3. 3. 3 Raspberry Piを使用するための準備 本体以外に必要なもの ● 電源ケーブル(5Vで700mA以上の電流を供給できる microUSB電源) ● LANケーブル or 無線LANアダプタ ● USBキーボード、マウス ● 8GB以上のSDHCカード(Class10以上がお勧め) ● HDMIもしくはRCAケーブル、対応したディスプレイ ※アクセサリ一覧 http://77sites.appspot.com/2/page2.html ※動作確認されている周辺機器 http://elinux.org/RPi_VerifiedPeripherals
  4. 4. 4 NOOBSのインストール方法 ● 1.「SD Formatter」のダウンロード https://www.sdcard.org/downloads/formatter_4/eula_windows/  SDカードのフォーマット ● NOOBS (offline and network install)をダウンロー ド。本日はofflineでのインストール http://www.raspberrypi.org/downloads ※2013/10/12時点の最新バージョン、NOOBS_v1_3_2.zip(1.1GB) ● NOOBSを解凍したものをSDカードにコピー ● Raspberry Piの起動
  5. 5. 5 NOOBSでインストールできるOS OS 説明 Raspbian ラズベリーパイのために最適化されたDebian OS RISC OS 非常に速く、コンパクトなOS。1987年に、ARMの初のRISC(reduced instruction set computer, ) チップが登場したとき、作成されたOS。 Open ELEC XBMC(XBox Media Center)。メディアプレイヤー。テレビ、インターネッ トビデオストリーミング、音楽や写真が見れる。 Arch ARMデバイス用のアーチのLinux。Arch Linuxは、Linuxディストリビュー ションの1つ。シンプリシティ、ミニマリズム、エレガンスさ、コードの正しさ に焦点を当てて開発されているOS。 RaspBMC XBMC。ラズベリーパイのために最適化されたメディアプレイヤー・
  6. 6. 6 OS 説明 Pidora ラズベリーパイのために最適化されたFedora OS Sugar 子どもの学習のためのlinux OS。40カ国で約300万以上の子供たち が学校で利用されている。 Puppy Linux USBスティックやメモリカードから実行するように設計された小型の Linux OS。 Raspberry Piで使えるOS
  7. 7. 7 Raspbianの初期設定(raspi-config) No 項目 内容 1 Expand the Filesystem ファイルシステムのサイズ拡張。、最初は先頭の 3GB 程 度の パーティションを使うだけになっている。SDカードの 容量全体を使うように設定できる。 2 Change the user password デフォルトユーザpiのパスワード変更 3 Enable Boot to Desktop/Scratch 起動時の設定。下記の3つから選択できる。 1.コンソールでログイン(デフォルト) 2.GUIな画面(Xのデスクトップを表示) 3. Scratch のプログラミング環境
  8. 8. 8 Raspbianの初期設定(raspi-config) No 項目 内容 4 Internationalisation options locale,time zone、keyboardなどが設定できる。 localeは、「ja_JP.UTF-8 UTF-8」を選択するとメニューな どが 日本語化される。最初は日本語フォントがインストー ルされていないため、 文字化けします。日本語フォントをイ ンストールしたあとでせっていしましょう。 time zoneは 「Asia」、「Tokyo」 と指定します。 5 Enable Camera Raspberry Pi Cameraの設定 6 Add to RasTrack Rastrack http://rastrack.co.uk/ への登録を行う。自分のpi をマップに登録できます。 7 Overclock CPU、GPU、メモリのクロックの初期設定はそれぞれ 700MHz、250MHz、 400MHzです。高負荷になった場合、 オーバークロックして最大CPUは 1GHz、GPU は 500MHz、メモリは 600MHz まで高速化する事が出来ま す。詳細は http://elinux.org/RPi_Overclocking 8 Advanced Option Overscan(画面の周囲を少し空ける設定)、Hostnameの設 定、Memory Split(CPUとGPUへのメモリの配分の変更) SSHの設定、SPIの設定、Updateの取得 9 About raspi-config raspi-configツールの情報を表示 参考サイト http://www.mztn.org/rpi/rpi24.html
  9. 9. 9 Raspbianを利用するにあたって ● Raspberry Piは、電源ボタンがありません。 電源の切り方は、シャットダウンコマンド(sudo halt)を実行後、電源ケーブルを抜いてくださ い。電源ケーブルをつなげた際に起動します。 ● デフォルトアカウントは、ユーザ名:pi パスワード:raspberry ● 初期は、rootパスワードなし。$ sudo sh  # passwdで設定。 ● GUIを使う場合 $ startx ● 日本語導入 ロケールをja_JP.UTF-8に変更 $sudo apt-get install jfbterm (日本語パッケージのインストール) $jfbterm -q(jfbtermの実行) $ls -l(”合計”という文字が出ていれば成功)
  10. 10. 10 Tweet Piを作ろう サービス内容: Twitterの特定アカウントのツイートを読み上げる 利用するハード Raspberry Pi Type B 512MB SDHCカード レゴ 基本セット 青いバケツ USBハブ USBハブ USBスピーカー アクセサリ一覧 http://77sites.appspot.com/2/page2.html
  11. 11. 11 Tweet Piを作ろう No . 作業項目 作業内容 1 セットアップ OS(Raspbian)インストール、無線LAN導入、 USBスピーカの設定、音声合成の導入、起動 時にIPアドレス読み上げ、FTP,Webサーバの 設定、python-twitter 2 UIの設計 スマフォからブラウザ経由でTweetの設定 3 プログラム作成 実装 4 ケース作成 レゴでケース作り ● 作業分担表 今日、手伝って くれる人募集!! 実施済み
  12. 12. 12 1.セットアップ(無線LAN化) ● Raspberry PiのUSBポートに無線LANアダプタをさして、電源をいれて Raspbianを起動。 ● 認識されているかどうか確認。sudo lsusb または sudo ifconfig ● psk事前共有鍵の作成(ssidとpassword自分の環境の値を設定してください) $sudo wpa_passphrase ssid password ● psk、ssidをwpa_supplicant.conf に記述 $vi /etc/wpa_supplicant/wpa_supplicant.conf ● インターフェースの設定 $sudo vi /etc/network/interfaces ● 無線LAN起動確認 $sudo ifup wlan0 ● 問題なければLANケーブルを抜いて再起動 $sudo reboot 詳細はこちら http://d.hatena.ne.jp/catmoney/20131103/p1
  13. 13. 13 1.セットアップ(USBスピーカの設定) ● $ sudo vi /etc/modprobe.d/alsa-base.conf 下記を先頭に#をつけてコメントアウトする。 #options snd-usb-audio index=-2 一番したの行に以下を追加する。 options snd-usb-audio index=0 ● $ sudo reboot 再起動 ● 再起動後 snd_usb_audio が “0″ となっていることを確認する。 $ cat /proc/asound/modules 0 snd_usb_audio 1 snd_bcm2835 詳細はこちら http://d.hatena.ne.jp/catmoney/20131103/p1
  14. 14. 14 1.セットアップ(スピーカ確認方法) ● Alsamixer (音量確認) 参考サイト Alsamixer http://d.hatena.ne.jp/kakurasan/20070907/p1 ● 音のテスト $ aplay /usr/share/sounds/alsa/Front_Center.wav
  15. 15. 15 1.セットアップ(音声合成の導入) 参考サイト http://shokai.org/blog/archives/6893 http://skalldan.wordpress.com/2013/02/19/raspberry-pi-%E3%81%A7%E9%81%8A%E3%81%B6-2-open-jtalk-%E3%81%A7%E5%96%8B%E3%81%A3%E3%81%A6%E3%82%8 ● OpenJTalkをインストールする $sudo apt-get install open-jtalk open-jtalk-mecab-naist-jdic htsengine libhtsengine-dev hts-voice-nitech-jp-atr503-m001 ● デフォルトの声を変更 $ wget http://downloads.sourceforge.net/project/mmdagent/MMDAgen t_Example/MMDAgent_Example-1.3/MMDAgent_Example- 1.3.zip $ unzip MMDAgent_Example-1.3.zip $ sudo cp -R MMDAgent_Example-1.3/Voice/* /usr/share/hts- voice/
  16. 16. 16 1.セットアップ(音声合成の導入) ● $ cd ● $ mkdir bin ● $ sudo vi /home/pi/bin/jsay ● $ chmod +x /home/pi/bin/jsay ● /home/pi/bin/jsay "テスト" 詳細はこちら http://d.hatena.ne.jp/catmoney/20131103/p1 #!/bin/sh TMP=/tmp/jsay.wav #cd /usr/share/hts-voice/nitech-jp-atr503-m001 cd /usr/share/hts-voice/mei_happy echo "$1" | open_jtalk -td tree-dur.inf -tf tree-lf0.inf -tm tree-mgc.inf -md dur.pdf -mf lf0.pdf -mm mgc.pdf -dm mgc.win1 -dm mgc.win2 -dm mgc.win3 -df lf0.win1 -df lf0.win2 -df lf0.win3 -dl lpf.win1 -ef tree-gv-lf0.inf -em tree-gv-mgc.inf -cf gv-lf0.pdf -cm gv-mgc.pdf -k gv-switch.inf -s 20000 -p 110 -a 0.05 -u 0.0 -jm 1.0 -jf 1.0 -jl 1.0 -x /var/lib/mecab/dic/open-jtalk/naist-jdic -ow $TMP && aplay -D plughw:0,0 -q $TMP rm -f $TMP # ends here
  17. 17. 17 1.セットアップ(起動時にIPアドレス読み上げ) ● wlan0 のIPアドレスを抽出するスクリプト ● $ sudo vi /home/pi/bin/ip.sh ● $ chmod +x /home/pi/bin/ip.sh ● $ sudo vi /home/pi/bin/starting.sh ● $ chmod +x ~/bin/starting.sh ● $sudo vi /etc/rc.local 下記を追記 /home/pi/bin/starting.sh ● 再起動 $ sudo reboot 動画はこちら http://www.youtube.com/watch?v=aEEMFEkVpPo #!/bin/bash /home/pi/bin/jsay "ラズビアン。起動しました。ipアドレスは" /home/pi/bin/jsay `/home/pi/bin/ip.sh`"です" #!/bin/bash echo `sudo ifconfig wlan0 | grep 'inet addr:' | sed -e 's/^.*inet addr://' -e 's/ .*//'`;
  18. 18. 18 1.セットアップ(vsftpdインストール) ● $ sudo apt-get install vsftpd ● $ sudo service vsftpd stop ● $ sudo cp /etc/vsftpd.conf /etc/vsftpd.conf-ORG ● $ sudo vi /etc/vsftpd.conf ● $ su - ● # echo pi >> /etc/vsftpd.chroot_list ● # exit ● ftpの起動 ● $ sudo service vsftpd start ● プロセスの確認方法 ● $ ps -ef | grep vsftpd | grep -v grep 参考サイトはこちら http://assimane.blog.so-net.ne.jp/2013-04-14 ---- 変更箇所 anonymous_enable=NO #匿名ユーザー(anonymous)のログイン禁止 local_enable=YES #ローカルユーザーを許可 write_enable=YES #書き込み許可 local_umask=022 #ファイル作成時のパーミッション755 xferlog_file=/var/log/vsftpd.log #logファイルの設定 ascii_upload_enable=YES ascii_download_enable=YES ## アクセスディレクトリ関係 chroot_local_user=YES #ローカルユーザの制限 chroot_list_enable=YES #リストにより制限を行う chroot_list_file=/etc/vsftpd.chroot_list #リストのパス ## ユーザ制限関係 userlist_enable=YES #ユーザ制限 userlist_deny=NO #リストに書かれていないユーザは制限 userlist_file=/etc/vsftpd.user_list #ユーザリストのパス ls_recurse_enable=YES #一括アップロード・ダウンロード許可
  19. 19. 19 1.セットアップ(vsftpd自動起動設定) ● $ sudo update-rc.d vsftpd defaults ● $ cd /etc/init.d ● $ sudo cp vsftpd vsftpd.org ● $ sudo chmod 666 vsftpd.org ● $ sudo vi vsftpd ● $ sudo update-rc.d vsftpd remove ● $ sudo update-rc.d vsftpd defaults ● 再起動 ● $ sudo shutdown -r now ● $ ps -ef | grep vsftpd | grep -v grep 参考サイトはこちら http://assimane.blog.so-net.ne.jp/2013-04-14
  20. 20. 20 1.セットアップ(Webサーバー) ● $ sudo vi /home/pi/bin/starting.sh ● $ sudo reboot ● sudo ps -ef | grep CGI #プロセスの確認 ● $ vi /home/pi/index.html ● ブラウザから http://192.168.1.101/ にアクセス ● vi /home/pi/cgi-bin/test.py ● ブラウザからhttp://192.168.1.101/cgi-bin/test.py にアクセス #!/bin/bash /home/pi/bin/jsay "ラズビアン。起動しました。ipアドレスは" /home/pi/bin/jsay `/home/pi/bin/ip.sh`"です" cd /home/pi python -m CGIHTTPServer 80 <html> <head><title>HelloWorld</title> </head> <body> Hello World!! </body> </html> #!/usr/bin/env python print "Content-type: text/htmln" print "Hello World" Hello Worldが表示されたらOK
  21. 21. 21 1.セットアップ(tweepy) 参考サイトはこちら http://mba-hack.blogspot.jp/2013/05/twitteruser-stream.html ● $ cd /usr/local/src ● $ sudo wget https://pypi.python.org/packages/source/s/simplejson/simplejson- 3.3.1.tar.gz ● $ sudo tar zxvf simplejson-3.3.1.tar.gz ● $ cd simplejson-3.3.1 ● $ sudo python setup.py install ● $ sudo easy_install pip ● $ sudo pip install tweepy ● アプリケーションを登録する https://dev.twitter.com/apps
  22. 22. 22 1.セットアップ(tweepy) ● 動作確認スクリプト #!/usr/bin/python import sys import tweepy from tweepy import Stream, TweepError import logging import urllib import os CONSUMER_KEY='XXXXX' CONSUMER_SECRET='XXXXX' ACCESS_TOKEN='XXXXX' ACCESS_TOKEN_SECRET='XXXXX' auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET) auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET) class CustomStreamListener(tweepy.StreamListener): def on_status(self, status): try: cmd = "/home/pi/bin/jsay '" + status.author.name + " " + status.text + "'" os.system(cmd.encode('utf_8')) except Exception, e: print >> sys.stderr, 'Encountered Exception:', e pass def on_error(self, status_code): print >> sys.stderr, 'Encountered error with status code:', status_code return True # Don't kill the stream def on_timeout(self): print >> sys.stderr, 'Timeout...' return True # Don't kill the stream tweet.py
  23. 23. 23 1.セットアップ(tweepy) def on_timeout(self): print >> sys.stderr, 'Timeout...' return True # Don't kill the stream class UserStream(Stream): def user_stream(self, follow=None, track=None, async=False, locations=None): self.parameters = {"delimited": "length", } self.headers['Content-type'] = "application/x-www-form-urlencoded" if self.running: raise TweepError('Stream object already connected!') self.scheme = "https" self.host = 'userstream.twitter.com' self.url = '/2/user.json' if follow: self.parameters['follow'] = ','.join(map(str, follow)) if track: self.parameters['track'] = ','.join(map(str, track)) if locations and len(locations) > 0: assert len(locations) % 4 == 0 self.parameters['locations'] = ','.join(['%.2f' % l for l in locations]) self.body = urllib.urlencode(self.parameters) logging.debug("[ User Stream URL ]: %s://%s%s" % (self.scheme, self.host, self.url)) logging.debug("[ Request Body ] :" + self.body) self._start(async) def main(): stream = UserStream(auth, CustomStreamListener()) stream.timeout = None stream.user_stream() if __name__ == "__main__": main()
  24. 24. 24 1.セットアップ(tweepy) ● クーロンに登録 ● $ crontab -e 下記を追加 @reboot /usr/bin/python /home/pi/cgi-bin/tweet.py >> log.txt 2>&1

×