2017年10月30日月曜日

ChatBot(チャットボット) を無料で作れるツール・サービスまとめ

個人で利用できて無料プランがあるチャットボット作成サービスのまとめ。

2017年11月時点での無料プランの場合の情報。
サービス名ボット数APIコール数インテント数
シナリオ数
エンティティー数
クエリー数
連携
Repl-AI11,000 コール/月制限なし制限なしLINE
Facebook
API
Watson Conversation510,000 コール/月2525API
hachidori210,000 コール/月20--LINE
Facebook
Dialogflow集中しなきゃOK無いっぽい無いっぽいGoogle Assistant
LINE
Facebook
Twitter
Slack
Dialogflow Web Demo
Kik
Skype
Spark
Telegram
Tropo
Twilio
Twilio Programmable Chat
Viber
Amazon Alexa(?)
Microsoft Cortana
API
一見すると Dialogflow 一択のようにも思えるが、実際使ってみると会話フロー構築で弱い面がある。
それぞれを使ってみたレビューは以下の通り。

Repl-AI

https://repl-ai.jp/
docomo が提供するサービス。
ドキュメントやエディターはもちろん日本語なので、とてもわかりやすい。
エディターはボックスを線で繋いで作るという仕組みなので、簡単に使いこなせるようになるが、その仕様上、複雑な会話フローや大量なパターンを作ろうとすると破綻しがち。(その状態で整列ボタンを押すと死ぬw)

また、会話フローの条件で or が使えないことも地味に痛い。
単語の抽出(System Entities っぽいもの)は、場所や時刻、金額などが取得でき、特に人名が取得できる点はなにかと便利。
反面、辞書機能は同義語を定義する程度のもので、Entity として取得したりはできない。

LINE と Facebook とは簡単に接続できるが、Web サイトにサクッと載せられるような機能は最上位プランにしか無い。
無料でやるには API で頑張る必要がある。

他のサービスにはない特長として、予め用意されている「知識Q&Aボット」「トレンド記事ボット」「雑談対話ボット」と連携できる機能があり、一般的な会話はそれらを利用することで手間が省ける。
ただし、「雑談対話ボット」はかなりフランクっていうかチャラいw

Watson Conversation

https://www.ibm.com/watson/jp-ja/developercloud/conversation.html
IBM のクラウドサービス IBM Cloud (旧Bluemix) 内のサービス。
Conversation とプラットフォームを繋げるために別途アプリケーション・サーバーが必要。
LINE や Facebook などに簡単につなげる機能などは一切ないので、API を利用してなんやかんやできる知識が必要。
ただしその分、汎用性は高く、Conversation 開発ツールは非常に洗練されているため、複雑な会話フローにも柔軟に対応できる。
この開発ツールへは、WEBブラウザからアクセスでき、プログラミング知識がなくても扱えるようにできている。(ただし英語)

プロフェッショナルな要求にも対応できる非常に高度なサービスを利用できるという点で、他のサービスとは一線を画する。
あとは System Entities で人名も取得できるようになれば最高なのだが……

hachidori

会話フロー作成ツール上でテストすることはできないので、LINE や Facebook に実際に連携してからでないと動作は確認できない。(連携自体は簡単)
しかし、カルーセルやボタン、スタンプなどを簡単に設定できる機能があり、それらはかなり有用。
また、お店の予約システムに使えるカレンダー機能や、クエリー(Entityのようなもの)の定義も可能。(System Entities は無い)
API は無いがテンプレートという機能を使って外部のシステムと情報のやり取りは可能。

マニュアルはないが、各画面の下部に説明があるので、それほど困ることはない。
対してチュートリアルはあるが、実際の動作を見るには上記の通り LINE や Facebook に接続する必要がある。

特徴であるカレンダー機能や LINE のスタンプなどを利用したいのであれば候補にはなるが、無料版だと制限がきつく Repl-AI に見劣りしてしまうのが難。

Dialogflow

https://dialogflow.com/
旧 Api.ai 。
そもそも無料しかない。
Dialogflow のボット(エージェント)数は GOOGLE PROJECT 依存なんだと思う。
その他、数に制限があるのかわからない。(無いっぽい)

インターフェイスは英語だが、日本語の処理には対応済み。(ただし Intent や Entity の名称には日本語を使わないほうが良さそう)

音楽アーティストなども取得できる System Entities の豊富さと、連携できるサービスの数が他の追随を許さない。
一問一答できれば良いチャットボットならこれで充分だが、それ以上を望む場合にはちょっと力不足なのは否めない。

2017年10月10日火曜日

Webデザイナー・クリエーター・プログラマーが Raspberry Pi を活用するために必要な知識

自分のための備忘録。
間違ってることも自信満々に書いてたりするぞ!
※このページは私が飽きるまで随時更新されます。

電圧と電流

よく水に例えられるが私は「電圧は水の高さ」という例えより(高さって位置エネルギーだよね……それが電圧?)下記サイトの水鉄砲の例えのほうが理解が早かった。
オームの法則 電気の資格とお勉強

電流は決まった量が流れるのではなく、回路に要求される分流れる、というイメージ。
電源側で制御するものではない。

直列と並列(分圧・分流)

電池を直列と並列にした場合や、抵抗を直列と並列にした場合などについて。

電池

  • 直列にすると電圧は足し算。
  • 並列にすると電圧は1個分で、容量が増える。

抵抗を直列

  • 抵抗値(合成抵抗)は単純に足し算
  • 電圧がそれぞれの抵抗値に合わせて割り振られる(入力より減る)
  • 電流は同一量

抵抗を並列

ラズパイの GPIO

扱える最大(?)電圧と電流

以下のサイトによると
第22回 Raspberry PiのGPIO概要 ツール・ラボ
電圧は
  • 読み取り(入力)時は0V~3.3V
電流は
  • GPIOピン1本あたりの最大電流は(入出力ともに)16mA
  • 複数本のGPIOピンを使用する場合、同時に流せる電流の合計は50mAまで
  • 目安としては、制限の半分、つまり8mA
という制限を厳守しないと壊れるらしいです。

プルアップ抵抗・プルダウン抵抗

GPIOへの入力が、HIGH なのか LOW なのかをはっきり(安定)させるための工夫。
まずポイントは「入力は GND と繋いでおけば 0V(LOW)に安定する」という点と、抵抗は「安定させるため」ではなく「ショートさせないため」に付けると考えたほうが合点がいく点。(そのためだけではないみたいだけど…)


使用する抵抗は1kΩ〜10kΩ。
抵抗の値が小さすぎると電流が増えて無駄になる。
逆に抵抗の値が大きすぎると電流が少なくて周りからのノイズによって不安定になりやすくなる。

プルアップ・プルダウン Fグループ電子工作講座
プルアップ 通信用語の基礎知識

ソフト側で内部のプルアップ・プルダウンを利用する分には、上記の理屈は理解できてなくても問題ないので、多少の割り切りは必要だと思うよ、うんw

Raspberry PiのGPIOは起動直後から内部プルダウンされている hnwの日記
GPIO 2 と GPIO 3 のみ 1.8KΩで他は 50KΩ らしい。
なんやかんやで GPIO 2 と 3 をプルダウンされた入力として使うことはできないらしい…らしい…らしい…

電子回路シミュレータ

Tinkercadの回路
旧123D Electronics Lab。要無料ユーザー登録。
見た目がきれいなのは良いが、ショートさせたりしても特に警告がないのでコワイ。
あとキレイに配線しにくい。

最も手軽だが、まあまあバグる時がある。
個人的には視覚的に分かりやすくて助かる。

EasyEDA
設定で日本語化できる。要無料ユーザー登録。使い込むには要課金。

パーツについて

もし「電子回路をマスターしたい」のではなく「ラズパイへ入出力機器(センサー)を付けたい」だけなのであれば、個々のパーツの役割を詳細に把握し、回路を自作するよりモジュールを買ったほうが早い。(電子回路マスターへの道が険しすぎる;)
目的とする処理を電子回路とソフトウェア、どちらで処理させるのが現実的かの見極めが大事。
でも基本的なことは知っておいたほうが良い。

抵抗

電圧とか電流とか下げるときに使う。
いざ購入しようとした時に種類の多さにビビる。
まずは1/4wカーボン抵抗で、100Ω~1000Ω(1KΩ)を適当な区切りで用意しておけばいいかと。
1種類につき10個くらいしか使わないけど、1袋100個入りだったりする。
今の技術なら直接数値を記載することもできるであろうが、頑なに謎の色線で抵抗値を表す初心者キラー。

LED

なぜか初心者は最初にこれをチカチカさせることを推奨される。
これまた、購入しようとすると種類の多さにビビる。
そもそもオマエの使っているその赤いLEDは一体どれだと言いたくなるが、大抵はそんなことまで記載されていない入門書が大半。
実際には足が2本のならば、ほぼなんでもいい。

トランジスタ

このパーツについては以下のページがわかりやすいと思った。
足の並びは ECB (えくぼ)と覚えるのが良いらしい。
これが使えるようになると、電圧や電流の制限が厳しい Raspberry Pi でも、乾電池を使って色々できるようになるので楽しい。
ただしモーターのように大電流が必要になるものへは、パワートランジスタや MOSFET を利用する。

MOSFET(モス・エフイーティー/モスフェット)

トランジスタのように使うみたいだけど、コンデンサみたいな的な働きもしてしまうのでなんやかんやw
トランジスタは電流を流すと電流が流れる仕組みに対し、MOSFETは電圧をかけると抵抗値が下がる仕組み。
4V駆動や2.5V駆動のものを利用すること。
ArduinoでパワーMOSFETを使ってみる その1 日々 ほげほげ 研究所
一瞬ショートしたような状態になるらしいので、ゲートには抵抗を入れておくほうが良いみたい。

リレー

物理的に「カチッ」って音がするのでビビる。
コイルを使っているのでダイオードを逆並列に接続する必要がある。
(切った瞬間にすごい電圧が流れるのを逃がす)
動かすためには大きな電流が流れることになり、ラズパイではあまり使用されないかも。

ダイオード

一方通行にするw
ちょこっと電圧を下げたりもしちゃう。

コンデンサ

電気を貯める効果があり、貯まってくると徐々に直流は通さなくなる。
その特性を利用して、電圧を安定させたい時に使ったりする。
なお、種類多すぎ意味不明(・口・)

セラミックコンデンサ

比較的容量の少ないコンデンサ。
極性(+と-)はない。

電解コンデンサ

LED みたいに極性があるので間違えたらイカン破裂する。

パスコン(バイパスコンデンサ)(デカップリングコンデンサ)という使い方

直流電圧を安定させるために配置するコンデンサのこと。
そういう種類のコンデンサがあるのではなく、コンデンサの役割名。
よく 0.1μF のセラミックコンデンサが利用される。
安定した電源を供給したいものの近くに置くほど効果的。←物理的に近く?回路的に近く?
コンデンサを試す パスコン 始める電子回路
パスコンって何? 電子のおたすけMEMO
ノイズはある種の交流とも言える、そしてコンデンサは交流の見通す。
なのでコンデンサを GND に繋いでおけばノイズのみ逃がせる。
ということみたい。

三端子レギュレータ

らくらく必要な電圧に降圧してくれるパーツ。
3V 用とか 5V 用とか色々ある。
入力側と出力側に(パスコンとして)コンデンサーを付けて使うのが一般的。
どんなコンデンサーを使えば良いかはモノによりすぎて訳わからんので、先人の回路図を参考にすると良い(爆)

人感センサー・PIR(RIP?)・焦電型赤外線センサー

そもそも色々な呼び名があって混乱する。
初心者はセンサーそのものではなく、センサー付きモジュールを購入すべき。
私が秋月さんで購入した SB412A は配線などがラズパイに近いと、なんらかの影響を受けてしまうのか、1分間隔(または高負荷時)で反応してしまうという不具合が出る。(要調査)

モータードライバ

DC モーターをコントロールしたい時に使う。
トランジスタでリレー回路つくったり逆流防止用のダイオードを配置したりする必要がなくなるので楽。
なぜかサーボモータの時には使わなくてもいいみたい。

圧電スピーカー・圧電サウンダ・圧電ブザー

お手軽に音をならせるパーツ。
電池を繋いだだけで決まった音が出る自励振式(ブザー)と、別途発振回路を必要とする他励振式(スピーカー・サウンダ)がある。
他励振式の圧電サウンダを使ったほうが色々な音階が出せて楽しいw
このパーツ自体が発電機にもなるので、抵抗とダイオードでラズパイを保護する回路を付けたほうがいいって説明書には書いてある。

あと、ホントは交流で使うものらしいのに、なんやかんやで直流でも使える。
なお、自励振式には極性がある。あとかなりうるさい。

ADコンバータ(A/Dコンバータ)

アナログ信号をデジタル信号にしてくれる IC 。
多くの場合、SPI か I2C という通信規格を利用してラズパイとデータのやり取りをする。
分解能という能力値があり、例えば 10bit だとアナログ信号を 0~1023 段階のデジタル信号に変換できる。
デジタルしか入力できないラズパイではよく使うパーツ。

昇圧・降圧について

5V を 3V に下げたいとか上げたいとかのこと。

昇圧

DC/DCコンバータを使う。
リニアレギュレータとかスイッチングレギュレータなどとも言うが、これは変換するための方式の名称。

降圧

ラズパイだとこっちのほうがよく使うかも。
色々方法がある。

三端子レギュレータを使う

最も簡単で安定らしい。
必要な電圧を出力してくれる種類を選べばいいだけ。

ダイオードを使う

ダイオード1個で 0.6V とか 0.7V 下がるので、それをいくつか直列で繋げて理想の電圧へ下げる方法。

抵抗を使う

つまり分圧するということ。
この方法だと降圧した先に繋がるものの抵抗(負荷)も考慮して組む必要がある。
そのため汎用性はなく、電流が変化するような回路には使えない。

プログラミング

Python

ver2系と3系があるけど、3でいいと思うよ。
なんかみんなこれ使ってる。

ノード赤

私はこっち使ってます。
Raspbian に標準インストールされてるけど、肝心な node.js が古いため、ドキュメントの指示通りインストールし直したほうがフルに機能が使えるようになって捗る。
指示通りにターミナルにbashコマンドをコピペして実行すれば、後は勝手にやってくれます。
既存の設定やフローも維持してくれるので安心だぞ。

USB

電源として利用したい場合

そもそも USB からの電力供給は規格で 5V で 100mA~500mA と決まっている様子。(たぶん USB2.0までの話)
ただし、色々なページを見る限り USB ホストへ「これくらい電力使うよ」と申告したりする手続きをしないで、こそーり電源としてのみ拝借する場合は 100mA までに制限しておくのが無難な様子。

USB Raspberrypi.org
USBポートは電源ではありません Dai ISHIJIMA's Page
USB端子から5ボルトを取る方法 作る人(つくるんちゅ)日記

音楽・動画の再生

最初から入っている OmxPlayer を使えば GPU が利用できるのでスムーズな再生が期待できるらしいです。

RASPBERRY PIのオーディオ再生
RASPBERRY PIでビデオを再生する
OMXPLAYER:加速されたコマンドラインメディアプレーヤー

ただし、OpenGL を使用するため Linux 一般で使われている(当然ラズパイでも使われている)ALSA の設定は無視される。
たとえば GUI で音量を変えても OmxPlayer で再生しているメディアには影響がない。

ALSA

Linux でサウンド関係を一手に管理しているものらしい。
ALSA を使用して再生したり録音したり音量設定したりするには以下のようなコマンドを使う。

  • aplay
  • arecord
  • alsamixer
詳しくはググれ。