Windows10のAWS CLI経由でAmazon Pollyを使用してみる

Windows10のAWS CLIを使ってAmazon Pollyを使用してみる

先日、JAWS-UG名古屋の勉強会に行ってきました。久々のCLIという感じだったのですが、RaspberryPiを触っているので何とかなるだろうと思っていたのですが、Windows10のBash環境からの前提だったためか、Webの画面からのコピー&ペーストがうまくいかず泣きたくなりました。

jawsug-nagoya.doorkeeper.jp

CLIの使い方に関しては勉強にはなりましたが、コマンドラインヘルパーみたいなものがないと正直厳しいなあと感じました。

Windows10のBash環境はさすがにアレなので、それ以外の方法を探してみたらふつうにあるんすね>標準のCLIインストーラ。ってことで復習もかねてWindows10でAWS CLIをインストールして、さらに最近Amazonの方が会社に来られたときにPollyっていうのもあるんですよと言われていたので、CLI経由で試してみることにしました。(基本はRESTでの使用ではなく、SDK経由の利用っぽいですけど。)

f:id:ueponx:20170827155118j:plain

Amazon Pollyとは?

Amazon Pollyは、文章をリアルな音声に変換するサービスで、話すことができるアプリケーションを作成でき、まったく新しいカテゴリの音声対応製品を構築できます。Amazon Polly は、高度なディープラーニング技術を使用したテキスト読み上げサービスで、人間の声のような音声を合成します。

引用元 aws.amazon.com

TTS+ディープラーニングという感じのようです。抑揚の部分なんかがディープラーニングの効果なんでしょうかね。

AWS CLIのインストール

AWS コマンドラインインターフェイスAWS CLI)のインストーラは以下のリンクからダウンロードできます。

aws.amazon.com

リンクを開くと以下のような画面になると思います。

f:id:ueponx:20170827155126j:plain

画面の右のほうにインストーラのダウンロードリンクがありますので、OSのbit数にあわせてインストーラをダウンロードします。自分は64bit版を選択しました。

f:id:ueponx:20170827155141j:plain

Windows10のBash環境やそのほかのOSではPythonpipを使ってインストールできます。どっちが簡単かというと…難しいところですね。(Windows10のBash環境でコピペができなかったのはWindowsのビルドに関係しているような気がします。) ダウンロードが終わったらインストーラを起動します。

インストーラが起動したら【Next】ボタンをクリックします。

f:id:ueponx:20170827155152j:plain

続いてライセンス確認の画面になるので、下にある【I accept the terms in the License Agreement】にチェックを入れて、【Next】ボタンをクリックします。

f:id:ueponx:20170827155158j:plain

次はインストールする場所の設定画面になります。デフォルトのロケーションはC:\Program Files\Amazon\AWSCLI\になりますので、変更する際は【Browse…】を押して変更を行ってください。問題ない場合には【Next】ボタンをクリックします。

f:id:ueponx:20170827155204j:plain

あとはインストールを行うだけです。ここまでで問題なければ【Install】ボタンをクリックします。

f:id:ueponx:20170827155211j:plain

進捗がプログレスバーに表示されます。

f:id:ueponx:20170827155218j:plain

以下の画面がでればインストールは完了です。【Finish】をクリックしてインストーラを終了させます。

f:id:ueponx:20170827155229j:plain

あとは実行の確認です。powershellを起動し、以下のように打ち込みます。

PS C:\> aws --version
aws-cli/1.11.141 Python/2.7.9 Windows/8 botocore/1.6.8

CLIのバージョン情報がでていれば問題ありません。(Windows10なのになぜWindows8ってなるのだろうか?)

f:id:ueponx:20170827155312j:plain

インストーラでセットアップを行うとpowershellだけでなくcmdでもAWS CLIを使用できます。

f:id:ueponx:20170827155238j:plain

(注意)PowerShellのCodePageをchcpコマンドで変更していると実行できないようです。

PS > aws configure
Traceback (most recent call last):
  File "aws", line 27, in <module>
  File "aws", line 23, in main
  File "awscli\clidriver.pyc", line 56, in main
  File "awscli\clidriver.pyc", line 192, in main
  File "awscli\argparser.pyc", line 100, in parse_known_args
LookupError: unknown encoding: cp65001

このようになったら

PS > chcp 932
現在のコード ページ: 932

として変更してください。つまりShift_JIS環境でしか使えないということです。cmdでの実行には関係はありません。

Amazon Pollyを使用するためのIAMの設定する

AWS CLIでは使用する際に認証情報を設定しないといけないのでAWSマネージメントコンソールからIAMを設定し、CLIに設定する必要があります。ここからはその設定になります。ここからはあまり自分も詳しくないのでつらい…

IAMの画面からユーザの追加を選択します。今回のユーザー名はpolly_userとして【プログラムによるアクセス】にチェックを入れ、画面下の【次のステップ:アクセス権限】ボタンをクリックします。

f:id:ueponx:20170827155532j:plain

作成されたpolly_userの権限を追加する画面です。

f:id:ueponx:20170827155540j:plain

アクセス権限に【既存のポリシーを直接アタッチ】を選択し、フィルターの検索ボックスにpollyと入力して検索をします。

f:id:ueponx:20170827155550j:plain

すると検索されたリストに

  • AmazonPollyFullAccess
  • AmazonPollyReadOnlyAccess

がでてくるので、今回はAmazonPollyFullAccessにチェックをいれて、【次のステップ:確認】ボタンをクリックします。

(注意)実際には、適切な権限を与えるようにしてください。

ボタンをクリックすると、作成内容の確認画面になります。問題なければ【ユーザの作成】ボタンをクリックします。

f:id:ueponx:20170827155558j:plain

成功すると以下のような画面に遷移します。

f:id:ueponx:20170827155655j:plain

ユーザ名、アクセスキーID、シークレットアクセスキーが表示されますが、画面の中ほどにある【.csvのダウンロード】ボタンをクリックすれば、表示された情報が含まれたCSVファイルがダウンロードできるのでそれをダウンロードしておきます。この情報をあとの手順で使用します。

Amazon PollyをAWS CLIから使用する

CLIに先ほど作成したユーザ名のIAM情報を登録します。 powershell上から以下のコマンドを実行します。

PS C:\> aws configure 
AWS Access Key ID : <ダウンロードしたCSVに記載>
AWS Secret Access Key :<ダウンロードしたCSVに記載>
Default region name :ap-northeast-1
Default output format :json

これで設定できました。 早速、pollyコマンドを実行してみたいと思います。 以下の情報を参考にしています。

docs.aws.amazon.com

すると…

PS C:\> aws polly synthesize-speech --output-format mp3 --voice-id Joanna --text 'Hello,
earned about the W3C on 10/3 of last year.' hello.mp3

Could not connect to the endpoint URL: "https://polly.ap-northeast-1.amazonaws.com/v1/speech"

APIのエンドポイントに接続できないといわれました。 先ほどの設定ではデフォルトのリージョンをap-northeast-1にしていました。このリージョンはpollyに対応していないので対応しているリージョンに変更する必要があります。環境変数で指定してもいいのですが、今回はデフォルト値を変更することにしました。

再度、awsコマンドで設定を行います。デフォルトのリージョンをus-west-2に変更しています。あとは入力せずEnterで前回の設定値が引き継がれます。

これを行わなくても良いようです。Optionスイッチに以下を追加すれば都度リージョンを変更できます。 --region us-west-2

PS C:\> aws polly synthesize-speech --region us-west-2 --output-format mp3 --voice-id Joanna --text 'Hello,
earned about the W3C on 10/3 of last year.' hello.mp3
PS C:\> aws configure 
AWS Access Key ID [********************]: <そのままEnter>
AWS Secret Access Key [********************]:<そのままEnter>
Default region name [ap-northeast-1]:us-west-2
Default output format [json]:<そのままEnter>

設定後、もう一度pollyにアクセスすると…

PS C:\> aws polly synthesize-speech --output-format mp3 --voice-id Joanna --text 'Hello, my name is Joanna. I l
earned about the W3C on 10/3 of last year.' hello.mp3
{
    "ContentType": "audio/mpeg",
    "RequestCharacters": "71"
}
PS C:\Users\CTV> ls hello.mp3

    ディレクトリ: C:\Users\


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2017/08/27     15:12          33743 hello.mp3

無事にPollyによってTTSを行ったmp3ファイル(hello.mp3)がダウンロードされています。

f:id:ueponx:20170827155720j:plain

日本語の場合にはオプションを変更すれば問題ありません。(環境変数を指定してもOKです)

PS C:\Users\> aws polly synthesize-speech --output-format mp3 --voice-id Mizuki --text '坊やだからさ。' polly.mp3
{
    "ContentType": "audio/mpeg",
    "RequestCharacters": "7"
}

f:id:ueponx:20170827155727j:plain

実験してみたのですが、英語と日本語の混じった文章ではどうなるのかなと思ったのですが、英語の部分は英語にしてくれているのでAIっぽさのあるTTSになっているのだなと思いました。他のだと混じっているとうまくいかないことが多いのでかなり助かります。

たとえば以下のようにすると```you````の部分はユーと話してくれます。ルー語もOKのようです。

PS C:\Users\> aws polly synthesize-speech --output-format mp3 --voice-id Mizuki --text 'youは坊やだからさ。' polly.mp3

{
    "ContentType": "audio/mpeg",
    "RequestCharacters": "11"
}

番外編

RaspberryPiにもAWS CLIをインストールしてみました。ドキュメント通りpip install awscliでインストールしています。

$ pip install awscli
Collecting awscli
  Downloading awscli-1.11.141-py2.py3-none-any.whl (1.2MB)
    100% |????????????????????????????????| 1.2MB 225kB/s
Collecting PyYAML<=3.12,>=3.10 (from awscli)
  Downloading PyYAML-3.12.tar.gz (253kB)
    100% |????????????????????????????????| 256kB 807kB/s
Collecting rsa<=3.5.0,>=3.1.2 (from awscli)
  Downloading rsa-3.4.2-py2.py3-none-any.whl (46kB)
    100% |????????????????????????????????| 51kB 1.7MB/s
Collecting botocore==1.6.8 (from awscli)
  Downloading botocore-1.6.8-py2.py3-none-any.whl (3.6MB)
    100% |????????????????????????????????| 3.6MB 71kB/s
Collecting docutils>=0.10 (from awscli)
  Downloading docutils-0.14-py2-none-any.whl (543kB)
    100% |????????????????????????????????| 552kB 419kB/s
Collecting s3transfer<0.2.0,>=0.1.9 (from awscli)
  Downloading s3transfer-0.1.10-py2.py3-none-any.whl (54kB)
    100% |????????????????????????????????| 61kB 1.8MB/s
Collecting colorama<=0.3.7,>=0.2.5 (from awscli)
  Downloading colorama-0.3.7-py2.py3-none-any.whl
Collecting pyasn1>=0.1.3 (from rsa<=3.5.0,>=3.1.2->awscli)
  Downloading pyasn1-0.3.3-py2.py3-none-any.whl (63kB)
    100% |????????????????????????????????| 71kB 1.9MB/s
Collecting python-dateutil<3.0.0,>=2.1 (from botocore==1.6.8->awscli)
  Downloading python_dateutil-2.6.1-py2.py3-none-any.whl (194kB)
    100% |????????????????????????????????| 194kB 968kB/s
Collecting jmespath<1.0.0,>=0.7.1 (from botocore==1.6.8->awscli)
  Downloading jmespath-0.9.3-py2.py3-none-any.whl
Collecting futures<4.0.0,>=2.2.0; python_version == "2.6" or python_version == "2.7" (from s3transfer<0.2.0,>=0.1.9->awscli)
  Downloading futures-3.1.1-py2-none-any.whl
Collecting six>=1.5 (from python-dateutil<3.0.0,>=2.1->botocore==1.6.8->awscli)
  Downloading six-1.10.0-py2.py3-none-any.whl
Building wheels for collected packages: PyYAML
  Running setup.py bdist_wheel for PyYAML ... done
  Stored in directory: /home/pi/.cache/pip/wheels/2c/f7/79/13f3a12cd723892437c0cfbde1230ab4d82947ff7b3839a4fc
Successfully built PyYAML
Installing collected packages: PyYAML, pyasn1, rsa, six, python-dateutil, docutils, jmespath, botocore, futures, s3transfer, colorama, awscli
Successfully installed PyYAML-3.12 awscli-1.11.141 botocore-1.6.8 colorama-0.3.7 docutils-0.14 futures-3.1.1 jmespath-0.9.3 pyasn1-0.3.3 python-dateutil-2.6.1 rsa-3.4.2 s3transfer-0.1.10 six-1.10.0

awsコマンドを実行してもうまく行かなったのですが、インストールパスが違っていたようです。

$ ~/.local/bin/aws --version
aws-cli/1.11.141 Python/2.7.13 Linux/4.9.41-v7+ botocore/1.6.8
$ ~/.local/bin/aws configure
AWS Access Key ID : <ダウンロードしたCSVに記載>
AWS Secret Access Key :<ダウンロードしたCSVに記載>
Default region name :us-west-2
Default output format :json

設定はこれでOKです。

では、Pollyを呼び出して見ます。

$ ~/.local/bin/aws polly synthesize-speech --output-format mp3 --voice-id Mizuki --text 'youは坊やだからさ。' polly.mp3 ; mpg321 polly.mp3
{
    "ContentType": "audio/mpeg",
    "RequestCharacters": "11"
}
High Performance MPEG 1.0/2.0/2.5 Audio Player for Layer 1, 2, and 3.
Version 0.3.2-1 (2012/03/25). Written and copyrights by Joe Drew,
now maintained by Nanakos Chrysostomos and others.
Uses code from various people. See 'README' for more!
THIS SOFTWARE COMES WITH ABSOLUTELY NO WARRANTY! USE AT YOUR OWN RISK!

Playing MPEG stream from polly.mp3 ...
MPEG 2.0 layer III, 48 kbit/s, 22050 Hz mono

[0:01] Decoding of polly.mp3 finished.

無事にTTSが行われました。

おわりに

AWS CLIAmazon Pollyを使ってみました。アルファベット混じり文章も使えるし、抑揚もいい感じなので使えそうですね!というか英語はもう実用レベルでしょう。

DragonBoard410cでもつかえるのかな?pythonだし使えると思いますが、あとで実験してみます。

Windows10にPython3を入れたくなったのでAnacondaでインストールしてみる

Windows10にPython3を入れたくなったのでAnacondaでインストールしてみる

最近、pythonを使うことが多くなってきたのですが、いろいろうまくいかないこともあってインストールに迷うことが多くありました。

それまでは以下からインストーラをダウンロードしていました。

www.python.org

f:id:ueponx:20170827105301j:plain

こちらをインストールしていても問題なく使えてはいたのですが。たまにパッケージ関係や環境によって引っかかることも、ワークショップでこれにひかっかるとそのあとは全くなにもできなくなってしまいます。

MACなどでは引っかからないみたいですし、個人的にもUbuntuやRaspberryPiでは引っかかったことはないのでWindowsに特有な話なのかもしてません。

以前、コミュニティなどの集まりに行ったときによく聞いたのは

Anacondaをインストールして環境構築をしたほうが容易ですよ!

ということでした。

今後のことも考えてWindows10にAnacondaをインストールしてみます。

インストール

以下のサイトからAnacondaをダウンロードします。

Download Anaconda Now! | Continuum

OSのbitに合わせてファイルを選択してください。

f:id:ueponx:20170827104800j:plain

自分は64bitOSにインストールするので64bit版を選択しました。

Anaconda3-4.4.0-Windows-x86_64.exe(2017.08.27時点)

f:id:ueponx:20170827104809j:plain

ダウンロードが完了したら、インストーラを起動します。

AnacondaのStepupダイアログが開いたら【Next】ボタンをクリックします。

f:id:ueponx:20170827104815j:plain

次に適応するユーザの設定の選択になります。 JustMe(自分のみ)かAll User(全ユーザ)から選択することになります。今回はJustMeを選択しました。 ラジオボタンを選択したら【Next】ボタンをクリックします。

f:id:ueponx:20170827104823j:plain

次はインストールパスの設定になります。特にこだわりがなければデフォルトでいいと思います。(最近はこだわる理由がなくなってきたので、デフォルトパスにすることにしました。)画面中は【Destination Folder】の欄が空欄になっているのですが、実際はデフォルトのインストールパスが格納されています。

設定ができたら【Next】ボタンをクリックします。 クリックすると【Advance Option】の選択画面となります。

f:id:ueponx:20170827104833j:plain

内容としては * Anacondaのインストール先を環境変数のPATHに登録するか * デフォルトのpythonをAnacondaでインストールとされたものとするか

になります。

f:id:ueponx:20170827104845j:plain

自分はコマンドラインから使う可能性もあったので一応パス登録しました。 Startメニュー経由で起動するだけならPATHの登録はいらないかもしれません。

f:id:ueponx:20170827104851j:plain

チェックが終わったら【Install】ボタンをクリックします。

f:id:ueponx:20170827105006j:plain

プログレスバーが進んでいって

f:id:ueponx:20170827105016j:plain

インストールが完了します。

f:id:ueponx:20170827105026j:plain

これで終了です。Setuo終了後にAnaconda CloudとAnaconda Supportに関する情報を出すかのチェックボックスがでますが、一読してもいいかなと思います。【Finish】をクリックします。

インストールが完了するとスタートメニューからAnacondaを選択することができます。

f:id:ueponx:20170827110629j:plain

スタートメニューからPythonCLIを使用する場合にはAnaconda Promptを選択します。この場合はcmd環境になるので、保管なども効かないので若干使いにくいかもしれません。

また、AnacondaをインストールするとJupyter NoteBookなども同時にインストールできるので便利ですね。

スタートメニューでクリックするとコンソールが開いてローカルサーバープロセスが起動し、ブラウザで使用できるようになります。

f:id:ueponx:20170827125525j:plain

f:id:ueponx:20170827125537j:plain

かなりいい感じです。

おわりに

インストールも問題なく終わりました。 Jupyter Notebookもありますし、pipなどでモジュールのインストールも容易にできるので満足です。

Bash on Ubuntu on Windowsなどにインストールしてもいいのかなと思ったりもしたのですが、まあ、当面はこれでやっていこうと思います。

RaspberryPiにBonjourをインストールしてみる

RaspberryPiにBonjourをインストールしてみる

前々から気にはなっていたんですが、別途ソフトのインストールが必要だったので尻込みしていたのですが、Windows10の最近のビルドではデフォルトでBonjourに対応している様です。そこで固定IP以外で、名前でもホスト指定できるようにしようと思います。

以下のブログを参考にさせていただきました。(実質、Windows10側は何も設定しなくても大丈夫でした)

moguno.hatenablog.jp

virtnote.blogspot.jp

Windows10側の設定の確認

Windows10はBonjourは対応しているのですが、ファイアウォールの設定でアクセスできないこともあるので内容の確認をしておきます。

【コントロールパネル】を開き、

f:id:ueponx:20170820142033p:plain

その中の【システムとセキュリティ】をクリックし、

f:id:ueponx:20170820142646p:plain

更に【WindowsDefenderファイアウォール】をクリックします。

f:id:ueponx:20170820143341p:plain

ウインドウの左側のペインから【詳細設定】をクリックします。

f:id:ueponx:20170820143515p:plain

クリック後に表示されるファイアウォール設定のウインドウの左側のペインから【受信の規則】を選択すると、

f:id:ueponx:20170820144154p:plain

中にBonjourの設定があるのがわかると思います。 Bounjourの設定が複数ありますが、TCPUDPなどの細かい設定の違いがあるようです。 複数あるなかに以下のような設定のあるものがあれば問題はなさそうです。

f:id:ueponx:20170820152314p:plain

  • プロトコルの種類:UDP
  • ローカルポート:全てのポート
  • リモートポート:全てのポート

ポートは5353に制限してもいいかなとは思いますが今回はそのままにしています。

RaspberryPi側の設定

Windows側の設定が確認できたので次はRaspberryPiの設定になります。設定するのはBonjourではありますが、パッケージ名はavahi-deamonとなります。 Avahi はBonjourのZeroconf仕様の実装とのことです。

参考:Avahi - Wikipedia

インストールは以下でOKです。

$ sudo apt-get install avahi-daemon
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
avahi-daemon はすでに最新バージョン (0.6.32-2) です。
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 2 個。

既に最新版がインストールされていました。調べてみるとRasbian jessie以降にはデフォルトでインストールされているようです。

動作確認

これでhostnameをつかってpingSSHなどを行うことができます。

RaspberryPi上からの自ホストへのping

$ ping raspberrypi.local
PING raspberrypi.local (192.168.0.8) 56(84) bytes of data.
64 bytes from 192.168.0.8 (192.168.0.8): icmp_seq=1 ttl=64 time=0.109 ms
64 bytes from 192.168.0.8 (192.168.0.8): icmp_seq=2 ttl=64 time=0.102 ms
64 bytes from 192.168.0.8 (192.168.0.8): icmp_seq=3 ttl=64 time=0.099 ms
64 bytes from 192.168.0.8 (192.168.0.8): icmp_seq=4 ttl=64 time=0.096 ms
64 bytes from 192.168.0.8 (192.168.0.8): icmp_seq=5 ttl=64 time=0.098 ms
64 bytes from 192.168.0.8 (192.168.0.8): icmp_seq=6 ttl=64 time=0.092 ms
64 bytes from 192.168.0.8 (192.168.0.8): icmp_seq=7 ttl=64 time=0.095 ms
^C
--- raspberrypi.local ping statistics ---
7 packets transmitted, 7 received, 0% packet loss, time 6231ms
rtt min/avg/max/mdev = 0.092/0.098/0.109/0.012 ms

RaspberryPi上からのWindows10へのping

Windows10側のホストネームはUindows10にしています。

$ ping UINDOWS10.local
PING UINDOWS10.local (192.168.0.5) 56(84) bytes of data.
64 bytes from 192.168.0.5 (192.168.0.5): icmp_seq=1 ttl=128 time=1.67 ms
64 bytes from 192.168.0.5 (192.168.0.5): icmp_seq=2 ttl=128 time=1.61 ms
64 bytes from 192.168.0.5 (192.168.0.5): icmp_seq=3 ttl=128 time=4.54 ms
64 bytes from 192.168.0.5 (192.168.0.5): icmp_seq=4 ttl=128 time=8.80 ms
64 bytes from 192.168.0.5 (192.168.0.5): icmp_seq=5 ttl=128 time=5.97 ms
64 bytes from 192.168.0.5 (192.168.0.5): icmp_seq=6 ttl=128 time=4.56 ms
^C
--- UINDOWS10.local ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 5008ms
rtt min/avg/max/mdev = 1.612/4.529/8.801/2.482 ms

RaspberryPi上からの自ホストへのssh

$ ssh pi@raspberrypi.local
Linux raspberrypi 4.9.41-v7+ #1023 SMP Tue Aug 8 16:00:15 BST 2017 armv7l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sun Aug 20 14:48:22 2017 from 192.168.0.8

$ exit
ログアウト
Connection to raspberrypi.local closed.
$

Windows10上からの自ホストへのSSH

PS C:\> ping UINDOWS10.local

Pinging UINDOWS10.local [XXXX::XXXX:XXXX:42ea:XXXX%11] with 32 bytes of data:
Reply from XXXX::XXXX:XXXX:42ea:XXXX%11: time<1ms
Reply from XXXX::XXXX:XXXX:42ea:XXXX%11: time<1ms
Reply from XXXX::XXXX:XXXX:42ea:XXXX%11: time<1ms
Reply from XXXX::XXXX:XXXX:42ea:XXXX%11: time<1ms

Ping statistics for XXXX::XXXX:XXXX:42ea:XXXX%11:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 0ms, Average = 0ms
PS C:\>

Windows10上からのRaspberryPiへのping

PS C:> hostname
UINDOWS10
PS C:\Users\uepon> ping raspberrypi.local

Pinging raspberrypi.local [XXXX::XXXX:XXXX:aa9:XXXX%37] with 32 bytes of data:
Reply from XXXX::XXXX:XXXX:aa9:XXXX%37: time=4ms
Reply from XXXX::XXXX:XXXX:aa9:XXXX%37: time=4ms
Reply from XXXX::XXXX:XXXX:aa9:XXXX%37: time=6ms
Reply from XXXX::XXXX:XXXX:aa9:XXXX%37: time=4ms

Ping statistics for XXXX::XXXX:XXXX:aa9:XXXX%37:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 4ms, Maximum = 6ms, Average = 4ms

Windows10上からのRaspberryPiへのSSHTeratermから)

HOST設定にraspberrypi.localを設定する点だけが変更点になります。

f:id:ueponx:20170820160529p:plain

無事接続できています。

f:id:ueponx:20170820160652p:plain

Windows10上からRaspberryPiへのSSHBash On Ubuntu On Windowsから)

Bash On Ubuntu On WindowsではSSHがあるので同様にできそうなのですが…

$ sudo apt-get install avahi-daemon
$ sudo service avahi-daemon start
initctl: Unable to connect to Upstart: Failed to connect to socket /com/ubuntu/upstart: 接続を拒否されました
 * Starting Avahi mDNS/DNS-SD Daemon avahi-daemon
$ ssh pi@raspberrypi.local
ssh: Could not resolve hostname raspberrypi.local: Name or service not known

名前解決ができないため、アクセス出来ないようです。 もちろん、IPアドレス直接であれば問題なくアクセスはできています。

ググってみると同様の現象がでているようです。

github.com

github.com

Dbusというdeamonも影響しているようです。ちょっと残念ですが、今後修正されていくことでしょう。

おわりに

今回はほとんど何も設定していませんでしたが…。 Windows10でもデフォルトでBonjourのサービスが含まれたので特別にアプリケーションをインストールすることなく、Bonjourを使うことができました。それも容易です。IPが変わる可能性のある環境だとこちらのほうが圧倒的にいいのかもしれません。

食わず嫌いだったということですかね、やっぱり。

RaspberryPi3へのRaspbianインストール(2017/08/20版)

RaspberryPi3へのRaspbianインストール(2017/08/20版)

いままでRaspberryPiも2ばかり使っていたのでそろそろRaspberryPi3を使おうと思いました。(そろそろ機械学習なんかにも手をだしたいなあとということもあってマシンパワーが欲しくなった)

タイミングとしてはつい先日Raspbianの新しいバージョンがリリースされたこともあるのでクリーンな状態でインストールすることにしました。(Release date:2017-08-16)

ダウンロードとイメージの書き込み

まずは新しいイメージをダウンロードします。

www.raspberrypi.org

f:id:ueponx:20170820095344j:plain

自分はこの中からRASPBIAN STRETCH WITH DESKTOPのZip版をダウンロードしています。

f:id:ueponx:20170820095402j:plain

ダウンロードできたらおなじみのWin32DiskImagerで書き込みを行います。

ja.osdn.net

f:id:ueponx:20170820095407j:plain

起動すると確認ダイアログが表示されますが管理者権限で行う作業なので問題はありません。書き込むファイルを2017-08-16-raspbian-stretch.imgを指定、書き込み先のSDカードのドライブを指定、そして、【Write】ボタンをクリックします。

f:id:ueponx:20170820095420j:plain

少し時間はかかりますが、イメージファイルの書き込みが行われます。

f:id:ueponx:20170820100305p:plain

完了すると以下のようなダイアログが表示されます。

f:id:ueponx:20170820100733p:plain

ここまでは変化はありません。

起動と初期設定

起動してもあんまり変化はありません。 ロケールタイムゾーン、日本語フォントなどのインストールに関してはそのままかなと思いました。このあたりは過去のエントリなどをそのままで対応しました。

uepon.hatenadiary.com

変化はないかと思います。

少し変わったなあとおもたのはraspi-configかなと思いました。

f:id:ueponx:20170820115514p:plain

7.Advance Optionの画面を開くと

f:id:ueponx:20170820115429p:plain

VNCの項目が増えています。これをONにするとrealVNCサーバが起動します。 VNCクライアントで接続すれば、デスクトップがネットワーク経由で操作できます。 別途VNCサーバをインストールする必要はもうないようですが…。

クライアントソフトのインストールがしたくない場合にはxrdpをインストールします。

$ sudo apt-get install xrdp

これでWindows標準のリモートデスクトップ接続で接続できます。

f:id:ueponx:20170820120123j:plain

接続後はSessionはXorgで接続できます。

f:id:ueponx:20170820121200p:plain

f:id:ueponx:20170820121418p:plain

問題ないようです。

不具合?

作業中にapt-getがうまくいかないことがありました。

f:id:ueponx:20170820115336p:plain

エラーメッセージにもあるとおり以下のコマンドを打つと復帰できるので、大きくは問題ないかなと思います。

$ sudo dpkg --configure -a

あと、リモートデスクトップ接続の場合には、RaspberryPiの設定アプリは起動しても表示できないようです。

f:id:ueponx:20170820123103p:plain

コンソールでは表示できるのでこちらも問題はないかもしれないです。

気になっていたことの確認

これまで使っていた環境ではOpneCVなどのカメラ画像がうまく表示できないため X11VNCをインストールしていましたが、RealVNCではどうか確認してみます。

過去のエントリーを参考にしてみると…

uepon.hatenadiary.com

f:id:ueponx:20170820131457p:plain

RealVNCでは問題なく表示できるようです!気になっていたことは大丈夫でした!

おわりに

なんとかインストールできたみたいです。また、気になっていたこともバージョンアップによりデフォルトの設定で解決していたようです。 とくに内容が薄くなってしましましたがそういう日もあるということで。

Raspberry PiでAquesTalk Piを使ってみる

Raspberry PiでAquesTalk Piを使ってみる

これまでTTSではOpenJTalkを使っていましたが、ちょっと目線を変えてAquesTalk Piを使ってみます。といっても、ライセンスがあるのでお気をつけください。(個人非商用であれば問題いようです)

インストール

以下のURLにからダウンロードしてます。

AquesTalk Pi

http://www.a-quest.com/products/aquestalkpi.html

自分はページからのダウンロードがうまく行かなかったので下記のようにダウンロードしました。

$ wget http://www.a-quest.com/download/package/aquestalkpi-20130827.tar.gz

あとは取得したtar.gzファイルを任意の場所に展開します。

$ zcat aquestalkpi-20130827.tar.gz |tar xv
aquestalkpi/
aquestalkpi/test.txt
aquestalkpi/AquesTalkPi
aquestalkpi/aq_dic/
aquestalkpi/aq_dic/readme.txt
aquestalkpi/aq_dic/aq_user.dic
aquestalkpi/aq_dic/aqdic.bin

実行

実行に関しては難しくありません。コマンドライン上で引数に読み上げたいテキストで与え、パイプでaplayに結果を渡すだけです。AquesTalkPiは標準出力にwavファイルのデータを出力しますので、それをaplayが入力として再生します。

$ ./AquesTalkPi "漢字も読めます。" | aplay
再生中 WAVE 'stdin' : Signed 16 bit Little Endian, レート 8000 Hz, モノラル

終わりに

一応、これで話すことはできました。というかインストールしかしていませんが…。

基本的にshでその他言語から呼び出すという部分に関してはOpenJTalkとほぼ変わりません。しかし、ほとんど設定を行わなくてもよいこと、非常に軽量であることを考えると割と良い選択肢なのかもしれません。(あくまでも個人利用ですが)

それぞれの言語で呼び出す際は

pythonであれば

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
…
os.system('./AquesTalkPi ' + 'ほげほげ' + '| aplay')

Node.jsであれば

const execSync = require('child_process').execSync;
…
var result =  execSync('./AquesTalkPi ' + 'ほげほげ' + '| aplay').toString();

こんな感じになると思います。

このあと、GPIOに接続しているボタンを押したらIPアドレスを読み上げるなどができるものなんかはやってみたいかなと思います。ヘッドレス環境ではこのようなことができる方がとても便利かなと思います。(固定IPやBonjourを使っていると不要ではあるのですが。)

あと、TwitterやSlackの書き込みを話すことも考えてみたいと思います。