2019年12月31日火曜日

「Raspberry Piではじめる機械学習」補足情報トップ

はじめに

本ページは、金丸隆志著「Raspberry Piではじめる機械学習」(講談社ブルーバックス)の補足情報をまとめるためのページです。

まず、書籍のサンプルファイルが必要な方は、下記の公式サポートページからダウンロードしてください。


以下では、Raspberry PiのOSのインストール方法や、書籍で利用したコマンド一覧などを掲載します。


下記にはさらに興味がある方向けの情報を記します。

[TensorFlowについて]

[機械学習と電子工作]

[OpenCV3]

[その他]


最後に、読者の方々の感想などを下記にまとめます。


2019年12月30日月曜日

Raspberry PiへのOSのインストール方法

1. Raspberry Piを用いる上で必要なもの

本ページでは、Raspberry Piに「Raspbian(ラズビアン)」というLinux系OSをインストールする方法を解説します。Raspberry Piをコンピュータとして使うために必要な機器をまとめると、表1のようになります。機器によってはすでにお持ちだという方も多いでしょう。まずはこの表と、1.1から始まる個別の解説をご覧になり、よくわからない機器があったらお近くのパソコンショップで質問してみることをおすすめします。

表1 Raspberry PiへのOSのインストールに必要な機器
物品 備考
Raspberry Pi 必須。動作が高速な Raspberry Pi 3 か Raspberry Pi 2を推奨。1.1で解説
16GB~32GBのmicroSDカード 必須。64GB以上のmicroSDカードでは、exFATという形式でmicroSDカードがフォーマットされておりRaspberry Piが起動しないため、16GB~32GBの容量のものを用いるのが無難。速度は高速なクラス10のものを推奨。アダプタが必要になる場合がある。1.2で解説
インターネットに接続されたPC 必須。microSDカードかSDメモリーカードを読み書きするためのスロットが必要。1.3で解説
microSDカード対応マルチカードリーダー/ライター microSDやSDメモリーカード用のスロットがないPCでは必須。1.3で解説
USBキーボード 必須。本書では有線の日本語キーボードを前提に解説(PS/2と呼ばれるタイプのものは不可)。1.4で解説
USBマウス 必須。有線のマウスを前提に解説(PS/2と呼ばれるタイプのものは不可)。1.4で解説
マイクロUSB接続の電源 必須。「USB充電対応ACアダプタ」と「USB(A)オス-USB(Micro-B)オスタイプのUSBケーブル」の組み合わせでも可。流せる電流の大きさに注意。1.5で解説
ディスプレイおよびケーブル(右の2つのどれかを選択) HDMI接続可能なPC用ディスプレイおよびHDMIケーブル。PC用の他、HDMI搭載液晶テレビも可。1.6で解説
DVI-D接続可能なPC用ディスプレイおよびDVI-HDMI変換ケーブル(HDMIがRaspberry Pi側となる)。1.6で解説
Raspberry Pi用のケース 任意だが、あると安心。1.7で解説
ネットワーク接続用機器 必須。1.85.で解説


なお、パソコンショップなどで質問する際の注意点を1つ述べておきます。通常、キーボードやマウスなどのコンピュータ用機器はWindowsやmacOSでの動作を保証しています。一方、本書で用いるRaspberry Piや、Linux系OSでの動作を保証する機器はほとんどありません。そのため、パソコンショップで「Raspberry Piで動作するキーボードはどれか」と尋ねても、回答できる店員はおそらくいないでしょう。 それではどのような機器を選べばよいでしょうか。通常、Linux系OSで動作する機器を選ぶ際は、「奇抜なものではなく、なるべくベーシックなもの」、「最新のものではなく、長く販売されているもの」を選ぶのが失敗しないコツです。パソコンショップで質問するときの参考にしてみてください。

本章で必要な機器とそれを用いて行う作業の流れをまとめたのが図1です。必要に応じて参照してください。

図1 本章で行う作業の流れ

各項目について、以下でひとつずつ解説していきます。

1.1 Raspberry Pi

Raspberry Piには下記のように様々なバージョンがあります。

Model B系 Raspberry Pi 3 Model B+ (Pi 3 B+) (秋月電子通商/ スイッチサイエンス)
Raspberry Pi 3 Model B (Pi 3 B) (秋月電子通商/ スイッチサイエンス)
Raspberry Pi 2 Model B (Pi 2 B) (秋月電子通商/ スイッチサイエンス)
Raspberry Pi Model B+ (Pi 1 B+) (スイッチサイエンス)
Zero系 Raspberry Pi Zero W (Pi Zero W) 無線機能あり。
(スイッチサイエンス)
Raspberry Pi Zero WH (Pi Zero WH) Zero Wにピンヘッダを半田づけしたもの。
(秋月電子通商/ スイッチサイエンス)
Raspberry Pi Zero (Pi Zero) 旧バージョンもあるがカメラが使えるのはV1.3のみ。
(スイッチサイエンス)
Model A系 Raspberry Pi 3 Model A+ (Pi 3 A+) Pi 3 B+から有線LAN、USBポート数を減らし、
メモリを1GBから512MBに減らしたもの。
Raspberry Pi Model A+ (Pi 1 A+) Pi 1 B+から有線LAN、USBポート数を減らし、
メモリを512MBから256MBに減らしたもの。
(秋月電子通商/ スイッチサイエンス)

本書で解説したように、本書では推奨するのは高速なモデルです。上の表では「Model B系」の上部のもの、すなわちPi 3 B+、Pi 3 B、Pi 2 Bなどが該当します。 Pi 1 B+やPi Zeroシリーズでは、演習プログラムの実行に1分以上かかることが増えるためお勧めしません。

また、「Model A系」と呼ばれるシリーズもありますが、これらはUSBポート数やメモリ容量が少ないため、初めてRaspberry Piを使うという方にはお勧めしません。メモリが少ないと、ブラウザによるインターネットの閲覧など、通常のPCとしての用途で動作が遅くなることがあるのです。

なお、Model B系列とZero系列のRaspberry Piの性能差は、「サンプルプログラムの実行にかかる時間」のページをご覧になると、イメージがつかめると思います。

本ページでは、Pi 3 BおよびPi 2 Bに対する解説をメインとし、Pi Zeroシリーズに対しては注釈を加えるという形式にします。

なお、無線機能のないPi Zeroには、上に記したようにカメラの使えない旧バージョンとカメラの使えるV1.3とがあります。本書で利用可能なのはV1.3のみですのでご注意ください。

1.2 16GB以上のmicroSDカード

Raspberry PiのOSそのものやユーザーの作成したデータを保存するため、図2(A)のようなmicroSDカードが1枚必要です。

図2 (A)microSDカードおよびアダプタ、(B)SDメモリーカードスロット、(C)microSDカードスロット

図2(A)の右側にはアダプタと呼ばれるものが表示されています。お使いのPCによっては、microSDカードの読み書きを行う際にこのアダプタも必要になります。なお、microSDカードのアダプタにはロック機能がついており、カード側面のスイッチがロック位置にあると書き込みができません。そのため、使用時にはロックが解除されていることに注意してください。

microSDカードを購入する際に注目して頂きたいのは、データを保存できる容量と、スピードクラスの2点です。

容量は16GB(ギガバイト)以上のものを用意してください。容量の単位がMB(メガバイト)で表示されているものでは容量が足りず使えません。 また、64GB以上のmicroSDカードでは、exFATという形式でmicroSDカードがフォーマットされておりRaspberry Piが起動しないため、16GB~32GBの容量のものを用いるのが無難です。

スピードクラスとはmicroSDカードの表面にある丸で囲まれた数値のことで、メモリの読み書きの速度を表します。クラス2、4、6、10のものが販売されており、数字が大きい方が高速です。

本書で学ぶ内容は、本書執筆時において容量8GB、スピードクラス10のmicroSDカードで動作確認しましたが、OSが新しくなるにつれ必要とする容量が増えているようです。そのため16GB以上のサイズのmicroSDカードを推奨しています。

なお、Raspberry PiではmicroSDカードとの相性によりOSが起動しないなどの問題が発生することがまれにあります。そのような問題が起こった場合は別のmicroSDカードを用意するのが良いでしょう。

1.3 インターネットに接続されたPC

図1に示されているように、WindowsやmacOSなどが動作しているPCがRaspberry Piとは別に必要です。インターネット上から、Raspberry PiのOSをインストールするために必要なファイルをダウンロードし、microSDカードに保存するために用います。そのため、このPCではmicroSDカードの読み書きができる必要があります。

一般家庭用のPCには図2(B)のようなSDメモリーカードスロットや図2(C)のようなmicroSDカードスロットがあることが多いのでそちらを用います。SDメモリカードスロットにはmicroSDカードにアダプタを装着したものを挿入し、microSDカードスロットには直接挿入することで、読み書きが行えます。

お使いのPCにこれらのスロットがない場合、microSDカード対応のマルチカードリーダー/ライターと呼ばれる製品を追加で購入する必要がありますのでご注意ください。

1.4 USBキーボードとUSBマウス

キーボードとマウスはUSB接続方式の有線のものを推奨します。Bluetoothと呼ばれる無線規格のものはインストール時に使えない可能性がありますので用いないでください。無線キーボードやマウスを使用したいという場合、 ELECOMのサイトの分類でいえば、「無線2.4GHz接続タイプ」であればトラブルは少ないでしょう。

1.5 マイクロUSB接続の電源(流すことのできる電流の最大値に注意)

Raspberry Piへ電源を供給するため、マイクロUSB端子で電源を供給するACアダプタを用います。マイクロUSB端子は図3(A)のような形状をしています。

図3 (A)マイクロUSB端子(Micro-B)、(B)USB充電対応ACアダプタとマイクロUSBのケーブル(USB(A)オス-USB(Micro-B)オス)

最近はスマートフォンの充電に用いられることが多いものです。 代表的な構成は図3(B)のようになります。左側がスマートフォン付属のUSB充電対応ACアダプタ、右側が「USB(A)オス-USB(Micro-B)オス」というタイプのマイクロUSBケーブルです。

図ではACアダプタとケーブルが分かれていますが、これらが一体となっているものでも構いません。

ACアダプタを選ぶ際にはその出力に注意してください。ACアダプタを見ると、「出力」あるいは「OUTPUT」という項目が記されています。典型的には「DC5.0V、1.5A」などと書かれていることが多いでしょう。 ここで「A(アンペア)」の単位で書かれた数字はこのACアダプタが流すことの電流の最大値を表しています。1.5Aの部分が1500mA(ミリアンペア)と書かれている場合もありますが、これらの意味は同じです。この最大電流が、Raspberry Piを動作させるために必要な大きさ以上でなければなりません。

本書が対象とするRaspberry Piを動作させるのに必要な電流は表2の通りです。

表2 Raspberry Piを動作させるのに必要な電源の最大電流
機種 公式による推奨最大電流
Pi 3 B 2.5A
Pi 2 B 1.8A
Pi 1 B+ 1.8A
Pi Zero W / Pi Zero WH / Pi Zero 1.2A

ご覧の通り、公式による電源の推奨最大電流はかなり大きな値となっています。これは、「Raspberry Piに十分大きな負荷をかけても動作するための電流」と考えられますので、実際には、これより最大電流の小さいACアダプタを用いても動作することは多いです。

一方、ACアダプタがRaspberry Piが必要とする電流を出力する能力がない場合、Raspberry Piが起動しない、あるいは起動しても途中で再起動されてしまう、という問題が起こり得ます。その場合は最大電流の大きなACアダプタを用意しましょう。

なお、Raspberry Pi 3に最大電流の小さなACアダプタを用いると、(動作はしても)Raspberry Pi 3の能力をフルに引き出せないという問題が知られています。そのため、Raspberry Piを取り扱っているショップで販売されているRaspberry Pi 3対応のACアダプタを購入することをお勧めします。

また、図3(B)の左端のACアダプタの代わりにPCのUSBポートを用いることは避けてください。PCのUSBポートは規格上最大500mAの電流しか供給できないためです。

さらに、ACアダプタに十分な性能があっても、マイクロUSBケーブルの品質が低いとやはりRaspberry Piの動作が不安定になることがありますので、合わせて注意しましょう。

1.6 ディスプレイおよびケーブル

表1でも記したように、ディスプレイは「HDMI接続可能なディスプレイ」または「DVI-D接続可能なディスプレイ」の2種から選択します。最近はHDMI搭載の液晶テレビが普及していますので、そちらでも良いでしょう。 コンピュータ用ディスプレイの端子部は、たとえば図4(A)のようになります。

図4 (A)HDMI端子とDVI-D端子、(B)HDMIケーブルのコネクタ部、(C)DVI-Dケーブルのコネクタ部

このディスプレイにはHDMI端子とDVI-D端子の両方がありますので、この場合はHDMI端子を使えばよいでしょう。HDMI端子がない場合にはDVI-D端子を用います。

ケーブルは、HDMI接続をする場合は図4(B)の端子が両端についたHDMIケーブルを用います。DVI-D接続をする場合は一端が図4(B)、もう一端が図4(C)の「DVI-HDMI変換ケーブル」を用います。

ケーブルの長さは、Raspberry Piとディスプレイの設置位置によって決めてください。本書の演習を行う場合、Raspberry Piが手元で操作できる位置にある必要があります。

1.7 Raspberry Pi用のケース

Raspberry Piは回路がむき出しになっていますので、そのまま用いるのはあまり望ましくありません。回路を保護する目的でケースがあると良いでしょう。

Raspberry Piを販売しているネットショップで様々な種類のケースが取り扱われていますので、そちらに収めるのが安心です。

ケースを購入する場合、下記の図5のようにRaspberry Piの公式カメラモジュールを取り付けることができるものを選択しましょう。カメラのケーブルを引き出すための穴が開いているのです。

図5 公式カメラモジュールを取り付けられるケース

なお、Raspberry Piのバージョンにより、対応しているケースが異なる場合があります。購入の際は、そのケースがお使いのバージョンのRaspberry Piに対応しているか、よく確認しましょう。

ケースが用意できない場合、プラスチックなど電流を流さないものの上にRaspberry Piを置くようにしてください。濡れた手で触らない、などの注意も必要です。

1.8 ネットワーク接続用機器

本書は、Raspberry Piをネットワークに接続することを必須としています。機械学習に用いるツールをネットワークからダウンロードしてインストールする必要があるからです。

ただし、Raspberry PiへのOSのインストールが終了するまではRaspberry Piをネットワークに接続しません。OSのインストールおよび設定が終わってからネットワークに接続する方針をとります。

なお、Raspberry Piをネットワークに接続するためには、皆さんの自宅などに、コンピュータ2台以上をネットワーク接続できる環境が必要です。2台のうち1台は皆さんが普段お使いのWindowsなどのPC、2台目がこれから取り扱うRaspberry Piです。

さらに、Raspberry Piをネットワークに接続するためには無線接続と有線接続の2つの選択肢があり、ネットワーク接続に必要な物品は表3のように異なります。

表3 Raspberry Piをネットワーク接続する際に必要な物品
機種 無線接続に必要な物品 有線接続に必要な物品
Pi 3 B 不要 LANケーブル
Pi 2 B 無線LAN USBアダプタ (5.参照) LANケーブル
Pi 1 B+ 無線LAN USBアダプタ (5.参照) LANケーブル
Pi Zero W / Pi Zero WH 不要 LANケーブル, USB LANデバイス (解説省略)
Pi Zero 無線LAN USBアダプタ (5.参照) LANケーブル, USB LANデバイス (解説省略)

これらについてのより詳細な解説を5.にまとめました。一度ご覧になってから、本ページの続きに進まれることをおすすめします。

無線接続には、皆さんのご家庭にすでに無線接続環境が存在する必要があります。さらに、無線LAN USBアダプタが必要な場合、どの機器を購入しても良いというわけではありません。それらについて5.で解説されています。

2. インストール用microSDカードの用意

2.1 ファイルのダウンロード

本項ではRaspberry PiへOSをインストールするために必要なmicroSDカードを準備します。ここではRaspberry Piは用いず、皆さんが普段お使いの、インターネットに接続されたPCを用います。まず、Raspberry Pi用のOSのインストーラをダウンロードしましょう。

Internet Explorerなどのブラウザでダウンロードページに接続してください。図6(A)のような英語のページが表示されます。

図6 Raspberry PiのOSのダウンロードサイト

ここで赤い四角で記したNOOBSのアイコンをクリックすると図6(B)のような表示が現れます。やはり赤い四角で記した「NOOBS offline and network install」セクションの「Download ZIP」ボタンをクリックし、ファイルを保存してください。

なお、本書執筆時に想定していたNOOBSおよび本書発売以降のNOOBSのリリース状況を以下にまとめます。

2017/11/29NOOBS 2.4.5Stretch
2018/3/14NOOBS 2.6.0
2018/3/14NOOBS 2.7.0
2018/4/18NOOBS 2.8.0
2018/4/24NOOBS 2.8.1
2018/6/27NOOBS 2.8.2
2018/10/11NOOBS 2.9.0
2018/11/15NOOBS 3.0.0
2019/4/8NOOBS 3.0.1
2019/6/24NOOBS 3.1.1Buster
2019/7/10NOOBS 3.2.0

当初は、StretchというバージョンのRaspbianが含まれていましたが、2019年6月にこれがBusterというバージョンのRaspbianに切り替わっています。本書では上記のどのバージョンでも動作確認しています。
もし、古いバージョンのNOOBS (Raspbian) を使用したい場合、JAISTのミラーサイトを日付を頼りに探すと良いでしょう。
ただし、上記範囲よりも古いNOOBSでは本書の内容は動作しない可能性がありますのでご注意ください。

ファイル名はNOOBS_v◯_◯_◯.zipとなっており、◯にはそのときの最新版のバージョンを表す数値が入りますので、それをダウンロードしましょう。本書の執筆時点での最新バージョンは2.4.5でしたので、それより新しいバージョンがダウンロードされるはずです。 デフォルトでは「ダウンロード」フォルダーに保存されています。

なお、ファイルのサイズが大きく、ダウンロードに時間がかかります。ネットワークへの接続が速い場合でも20分程度、遅い場合数時間かかる場合がありますので注意してください。なお、Windows 10 の標準ブラウザMicrosoft Edgeをお使いの場合、ダウンロード後の選択肢では「開く」ではなく「フォルダーを開く」を選択してください。

ダウンロード完了後はプロパティでファイルのサイズを調べてください。バージョンによって異なりますが、ファイルサイズがおよそ1.7GBより大幅に小さい場合、ダウンロードに失敗している可能性がありますので、再度チャレンジしてください。

2.2 圧縮ファイルの展開とmicroSDカードへのコピー

ダウンロードされたファイルは圧縮されたファイルですので、展開する必要があります。

Windowsの場合は、図7のようにファイルを右クリックして「すべて展開」を選択し、現れたダイアログで「展開」ボタンをクリックすると展開が始まります。

図7 ダウンロードしたファイル(NOOBS)の展開

ファイルが大きいので、すべての展開が終わるまで少し時間がかかります。なお、この展開時にエラーが出る場合は、やはりダウンロードに失敗している可能性があります。

展開がエラーなく終わったら、現れたファイルを全てmicroSDカードにコピーしましょう。

まずmicroSDカードをPCに接続します。必要に応じてアダプタ(図2(A)右)やmicroSDカード対応のマルチカードリーダー/ライター(1.3)を用いてください。 もしmicroSDカードの中に保存されたファイルがあるなら全て削除しておきましょう。

そして、先ほど展開したファイルを全てこのmicroSDカードにコピーします。コピーが終わった後のmicroSDカードの中身は図8のようになります。

図8 展開したファイルをSDメモリーカードにコピーした様子

この中身はNOOBSのバージョンが上がるに従い、多少変更を受けることがありますが、展開されたファイルを全てコピーしたのであれば問題ありません。

また、この時点で皆さんのPCには「圧縮ファイル」と「展開されたフォルダ」の2つが残っています。「展開されたフォルダ」は後に削除しても構いません。圧縮ファイルの方は、再インストールの可能性もあるので残しておいた方が安全です。

2.3 microSDカードの再フォーマット(必要に応じて)

なお、ここで解説した方法は、過去にRaspberry Pi用のOSをインストールしたことのあるmicroSDカードではうまくいきません。

その場合、SD Associationが配布しているSDフォーマッター5.0でmicroSDカードをあらかじめフォーマットしてからファイルのコピーを行うようにしてください。Windows標準のフォーマット機能ではうまくいきませんので、必ずSDフォーマッター5.0を用いるようにしてください。

また、Raspbianが不要になり、microSDカードをWindowsなどで使えるように戻したい場合や、Raspbianを再インストールしたい場合もやはりSDフォーマッター5.0を用いてください。

3. Raspberry PiへのOSのインストール

3.1 Raspberry Piへの周辺機器の接続

microSDカードの準備が終わったら、そのmicroSDカードをPCから取り外し、図9(A)のようにRaspberry Piに押し込んでセットします。

図9 (A)microSDカードをセットした様子(B)周辺機器を接続した様子

同様にキーボード、マウス、HDMIディスプレイも接続してください。これらはどのような順で接続しても構いません。

なお、図9(B)にはRaspberry Piの状態を示すLEDの位置とPi 3 Bの心臓部と呼ぶべきSoC(System on Chip)であるBCM2837の位置も示しました(SoCはPi 1 B+とPi 2 BではそれぞれBCM2835とBCM2836)。LEDの位置はPi 1 B+とPi 2 Bの場合図の左上となりますので注意してください。 なお、SoCとはCPU、グラフィック用GPU、RAMなどを1つのチップに収めたものです。

また、本書では既に述べたようにインストール時にRaspberry Piをネットワークに接続しない方針を取ります。インストールが完了し、環境設定を行う時にネットワークに接続します。

なお、Pi Zeroシリーズの場合、図9は下記の図9-zeroで読み替えてください。見てわかるように、Pi 3 Bなどと異なり「バスパワーUSBハブ」、「USB OTGケーブル」、「HDMI(メス)-ミニHDMI(オス)変換アダプタ」が追加で必要になります。リンクは典型的な商品に対して張りました。

図9-zero Pi Zeroへの周辺機器の接続


3.2 Raspberry PiへのOSのインストール

それでは、Raspberry Piに電源を入れてOSのインストールを行いましょう。

ただし、Raspberry Piには電源スイッチがありません。図9(B)のようにマイクロUSBケーブルを接続することで電源が入ります。電源を切る方法は後に学びます。

さて、Raspberry PiにマイクロUSB接続の電源をつなぐと、図9(B)に示したLEDの一つ(PWR)が赤色に点灯します。そして、microSDカードにアクセスがあったときに点灯するもう一方のLED(ACT)が緑色で点滅し、起動が始まります。

なお、Pi Zeroシリーズには緑色のLED(ACT)しかありませんのでご注意ください。

このとき、いつまでもACTの点滅が起こらず起動が始まらないことがあるかもしれません。そのような場合、USB端子のうち、図3(B)の左側の端子を抜き差しすると起動が始まることが多いでしょう。

さて、Raspberry Piに電源を投入してからしばらく待つと図10のようにRaspberry Piの起動アイコンが現れます。画面に何も表示されない場合は、ディスプレイや液晶テレビの入力モードを確認してください。

図10 Raspberry Pi起動時のアイコン

そのまま待つと、さらに図11のようにインストールするOSの選択画面が現れます。

図11 インストールするOSの選択

ここでは図11のようにRaspbianにチェックを入れ、上のInstallボタンをクリックします。
なお、NOOBSのバージョンによっては、OSの選択肢としてRaspbianしか現れないこともあります。
その場合もやはりRaspbianにチェックを入れてInstallボタンをクリックしてください。

すると図12のように、microSDカードの中身が消されることを確認するダイアログが現れますのでYesボタンをクリックします。

図12 インストールの確認

すると図13のようにインストールが始まります。

図13 インストール中の様子


インストールは、クラス10のmicroSDカードで約15分かかります。 インストールが完了すると図14のようにインストールの成功を知らせるダイアログが現れますので、OKボタンをクリックします。

図14 インストール終了を知らせる画面


するとRaspberry Piが自動的に再起動され、RaspbianというOSのデスクトップが開きます。

4. インストール後の設定

4.0 セットアップウィザードの起動 (NOOBS 2.8.2以降)

NOOBS 2.8.2以降では、Raspbianの初回の起動時、下図のようなセットアップウィザードが起動します。ここではこのアプリケーションに従って設定を行う方法を記していきます。もし、NOOBS 2.8.2より以前のRaspbianをお使いの場合、4.1に進んで個別に設定を行ってください。

セットアップウィザードに従って設定を進めるには、まず「Next」ボタンをクリックします。

次に、「Set Country」と書かれた、国を設定する画面が現れますので、「Country」を「Japan」に設定しましょう。選択肢はアルファベット順に並んでいます。

すると、「Langage」が「Japanese」に、「Timezone」が「Tokyo」に自動的に変わるはずです。

以上のようにセットした後、「Next」をクリックします。


ここで、デフォルトのパスワードの変更が求められます。
デフォルトで、ユーザー名は「pi」、パスワードは「raspberry」とセットされています。
これを好みのパスワードに変更することができます。

変更する場合、下記の2つのエリアに変更したパスワードを2回入力します(この時点でキーボードは日本語キーボードとして設定されています)。
もし、デフォルトのパスワードから変更しない場合、2つのエリアは空白のままで構いません。

「Next」をクリックします。


次に、NOOBS 3.0.1 以降ではスクリーンの範囲を広げるかどうかの設定を行います。もし、Raspbianのデスクトップ領域がディスプレイ全体の領域より狭い場合、ここで「This screen shows a black border around the desktop」にチェックを入れると、再起動後に画面が広がる可能性があります。

なお、この設定は後からでも行えます。詳細は「4.8 デスクトップが液晶パネルより狭く表示される場合の対処(オプション)」をご覧ください。「Next」で次に進みます。



ここで、Wifiの設定が行えます。これは後でも行えますので、「Skip」をクリックしてスキップしても構いません。
もし設定を行いたければ、「Next」をクリックします。


上の画面で「Next」をクリックした場合は、下図でWifiのパスワードの入力が求められます。入力したら「Next」をクリックします。


Wifiの設定が「Skip」かパスワードの入力かで完了すると、アップデートの確認をするかどうか問われます。ここは「Skip」をクリックしてスキップします。


以上でセットアップウィザードは終了です。「Reboot」ボタンをクリックすると再起動が始まります。


以上でほとんどの設定が終わりました。4.7へ進んでRaspberryPiの電源を切る方法を学びましょう。 なお、4.1から4.6で用いる設定アプリケーションを今後用いることもありえますので、これらのセクションもざっと眺めておくことをお勧めします。

4.1 設定用アプリケーションの起動

ここからは、NOOBS 2.8.2より以前のRaspbianをお使いの場合に実行する、設定アプリケーションを用いたRaspbianの設定方法を解説していきます。
より新しいバージョンのNOOBS をお使いの場合でも、ここで紹介する設定アプリケーションを用いることはありますので、ざっと眺めておくことをお勧めします。
さて、再起動されたRaspberry Piでは、図15のようなデスクトップ環境が現れます。

図15 Raspbianのデスクトップ

この状態では、インターフェイスが英語である、キーボードが英語キーボードに設定されているなどの問題があります。これを日本語環境で使いやすいよう設定していきます。 まず、左上のメニュー(Menu)ボタンから「Preferences(設定)」→「Raspberry Pi Configuration(Raspberry Piの設定)」をマウスで選択してください。図16のような設定用アプリケーションが起動します。

図16 設定用アプリケーション(日本語表示設定する前)

4.2 パスワードの変更

本書で用いるRaspbianにはユーザー名とパスワードという概念があります。このユーザー名とパスワードはデフォルトでは下記のようになっています。

  • ユーザー名:pi
  • パスワード:raspberry

現在のRaspbianのバージョンではこのパスワードの入力を求められることは滅多にありませんが、万一のために知っておくことは重要なことです。

なお、このパスワードは自分の好みのものに変更できます。変更不要だという方は4.3に進んで構いません。 変更する場合、まずは新たなパスワードを決めましょう。

なお、この時点では、キーボードの設定が済んでいないため、記号を多用するパスワードでは後でキーボードの設定を済ませた後に認識されなくなってしまう可能性があります。そのため、ここでは半角の数字とアルファベット(0~9、a~z、A~Z)からなるパスワードに決めるのが無難です。もちろん、キーボードの設定が済んだ後ならば、記号を用いたパスワードに設定しても問題ありません。

新しいパスワードを決めたら、図16の「Change Password(パスワードを変更)」ボタンをクリックしてください。「Enter new password(新しいパスワードの入力)」と「Confirm new password(新しいパスワードを再入力)」という入力枠が2つ現れますので、変更したいパスワードを2回入力してから「OK」ボタンをクリックしてください。それでパスワードが変更されます。

4.3 言語の変更

デスクトップ環境で日本語を表示するには、言語の変更を行います。

そのために、まず図16のアプリケーションで「Localisation(ローカライゼーション)」タブをクリックし、さらに「Set Locale(ロケールの設定)」ボタンをクリックしてください。

現れた「Language(言語)」を「ja (Japanese)」に合わせましょう。選択肢はアルファベット順に並んでいます。残りの項目として「Country(国)」を「JP (Japan)」に、「Character Set(文字セット)」を「UTF-8」に変更します(自動でそう変わることもあります)。以上を確認して「OK」ボタンをクリックします。

さらに、設定アプリケーションでもう一度「OK」ボタンをクリックすると、再起動(reboot)を英語で促されますので、「Yes」ボタンをクリックして再起動しましょう。再起動が終わると、日本語表示されたデスクトップ環境が起動します。

4.4 タイムゾーンの変更

ここではタイムゾーンを東京(標準時から+9時間)に設定します。

なお、Raspberry Piには時計を動かすための電池がついておらず、ネットワークに接続しない限りは電源を切るたびに時計がずれますので、ネットワークにつなぐまではRaspberry Piが示す時刻を信頼しない方がよいでしょう。

タイムゾーンの設定のため、まず図16の設定アプリケーションで「Localisation(ローカライゼーション)」タブをクリックし、「Set Timezone(タイムゾーンの設定)」ボタンをクリックします。

現れたウインドウで、「Area(地域)」を「Asia」に、「Location(位置)」を「Tokyo」に選択してください。その際、選択肢はアルファベット順に並んでいますので、スクロールさせて見つけてください。

そして「OK」をクリックすると、設定が完了します。

4.5 キーボードレイアウトの変更

デフォルトの状態ではRaspbianのキーボードとして英語キーボードが設定されていますので、これを日本語109キーボードに変更しましょう。
まずは、図16の設定用アプリケーションの「Localisation(ローカライゼーション)」タブの「Set Keyboard」ボタンをクリックします。

ここから先のキーボードの設定項目の外観は、NOOBS (Raspbian)のバージョンにより異なります。
まずは2018年6月にリリースされたNOOBS 2.8.2での設定方法を記します。
現れたウインドウで、「Model」を「Generic 105-key (Intl) PC」に、「Layout」を「Japanese」に、「Variant」を「Japanese(OADG 109A)」にセットし、OKボタンを押してください。

バージョン2.8.2以前の NOOBS (Raspbian)の場合、現れたウインドウで、「Country」を「Japan(日本)」に、「Variant」を「Japanese(OADG 109A)(日本語(OADG 109A))」にセットし、OKしてください。

なお、この設定をした後キーボードのテンキーを利用したい場合、キーボードにある「NumLock」キーを押してからでないとテンキーとして利用可能になりませんので注意して下さい。Raspberry Pi起動時にNumLockの状態を自動でオンにしたい場合の設定を「キーボードのテンキーを利用したい場合の注意」にまとめましたので興味のある方はご覧ください。テンキーを使わないという方は気にせず先に進んで構いません。

4.6 無線LANの国設定変更

Raspberry Pi 3 Model B+ では、「無線LANの国設定」を日本に合わせないと無線LANが有効になりません。ここでその設定を行いましょう。他のバージョンの Raspberry Pi でもこの設定を行って良いでしょう。

図16の設定用アプリケーションの「Localisation(ローカライゼーション)」タブの「Set WiFi Country(無線LANの国設定)」ボタンをクリックします。現れたウインドウで、「Country(国)」を「JP Japan」にセットします。

4.7 Raspberry Piの電源を切る方法

設定がおおむね終わったところで、Raspberry Piの電源を切る方法をここで覚えておきましょう。 デスクトップ左上のメニュー(Menu)ボタンから「Shutdown」を選択します。

「Shutdown」、「Reboot」、「Logout」の3ボタンのある画面で「Shutdown」ボタンを押すと、Raspberry Piのシャットダウンが始まります。

このとき、今後のためにRaspberry PiのLEDの状態を観察しておきましょう。図9(B)で示したLEDのうちmicroSDカードへのアクセスを示す緑色の「ACT」がしばらく点滅します。ディスプレイの表示が消え、この「ACT」というLEDの点滅が終わればシャットダウンは終了しています。この状態でRaspberry Piから電源を取り外しましょう。

なお、既に述べたようにPi Zeroシリーズには緑色のLED(ACT)しかありませんのでご注意ください。

4.8 デスクトップが液晶パネルより狭く表示される場合の対処(オプション)

デスクトップが開いたとき、下図(A)左のように、液晶パネルより狭い範囲にデスクトップが表示されることがあります。


そのような場合、設定アプリケーションの「システム」→「オーバースキャン」を「無効」にしてRaspberry Piを再起動すると、上図(A)右のように画面がいっぱいに使われることが多いでしょう。ただし、上図(B)のように、液晶テレビの場合にこの設定を行うと、液晶パネルからはみ出してデスクトップが表示されてしまうことがあります。これが気になる方は、「オーバースキャン」を「有効」に戻して再起動した方がよいでしょう。



5. ネットワークへの接続

ここまでの解説により、Raspberry Piに電源を投入してから電源を切るまでの手順がわかりました。

ここからはRaspberry Piをネットワークに接続する方法を学びます。ただし、皆さんの環境によって様々な接続方式が考えられるため、全てのケースを説明しつくすことはできません。ここでは、一般家庭で代表的な接続方法をいくつか解説することにします。学校や職場などではここでの解説とは異なる接続方式を用いていることが多いので、ネットワークの管理者に相談してください。

まず、1.3で仮定したように皆さんの通常のPCは既にネットワークに接続できているとします。そして、このPCとRaspberry Piを同時にネットワークに接続することを目指しましょう。

なお、Raspberry Piをネットワークに接続するには有線方式と無線(Wifi)方式とが考えられます。つないでしまえばWifiの方が便利なのですが、そのためにはWifi対応のルーター機器が必要など、利用に条件があります。

まずはWifi接続を先に紹介し、有線接続についてはそのあとに紹介します。

5.1 Wifiによる接続

Rapsberry PiをWifiによりネットワークに接続するには、まず皆さんのPCが既にWifiでネットワークに接続できている必要があります。

具体的には、図17のように無線LANルーターが存在し、それにPCやRaspberry Piが接続することになります。

図17 Wifiによるネットワークへの接続


図17のような環境がない場合、接続業者などに「PCをWifiでインターネットに接続したい」と相談するのがよいでしょう。

Wifi接続環境が存在する場合、さらにRaspberry Pi側にもWifi接続機能が存在する必要があります。

Pi 3 B+、Pi 3 B、Pi Zero W、Pi Zero WHをお使いの方は無線機能がRaspberry Piの基板上に標準搭載されていますので追加購入の必要はありません。

一方、Pi 2 B、Pi 1 B+、Pi Zeroをお使いの方は「無線LAN USBアダプタ」という機器を購入する必要があります。無線LAN USBアダプタは、何を買っても良いというものではなく、Raspberry Piで動作するものを事前に調べておくことが重要です。筆者が動作を確認した無線LAN USBアダプタは下記のものです。
  • PLANEX GW-USNANO2A
  • IO-DATA WN-G150U
  • IO-DATA WN-G150UMK
  • LOGITEC LAN-W150NU2AB
  • BUFFALO WLI-UC-GNM
  • BUFFALO WLI-UC-GNM2
インターネットで検索すると、他にもRaspberry Piで動作するものが見つかるかもしれません。なお、動作状況はこれらの無線LAN USBアダプタのメーカーに問い合わせてもわかりません。Raspberry Piユーザーがブログなどで公開している情報を探しましょう。

以上の準備のもと、Raspberry PiをWifiに接続するためには、図18のようにデスクトップの右上のアイコンから皆さんのご家庭のネットワークを選択します。パスワードを入力して接続しましょう。

図18 Wifiによるネットワークへの接続

5.2 有線接続1:PCがルーター機能つき機器に接続されている場合

Raspberry Piを有線でインターネットに接続する場合の一つ目のケースとして、皆さんのPCが図19のようにルーター機能つき機器(ブロードバンドルーターやルーター機能つきモデムなど)を通してインターネットに接続されている場合について解説します。

図19 ブロードバンドルーターを介したネットワークへの接続

この機器の裏を見たときに、LANと書かれた端子が複数存在すれば、Raspberry Piの接続は簡単です。そのLAN端子の1つにLANケーブルでRaspberry Piを接続すると、ネットワークにつながります。

なお、このルーター機能つき機器がWifi親機の機能を持っているものであっても、LANケーブルでRaspberry Piを接続することができます。

5.3 有線接続2:PCがスイッチングハブに接続されている場合

Raspberry Piを有線でインターネットに接続する場合の二つ目のケースである、皆さんのPCが図20のようにスイッチングハブを通してインターネットに接続されている場合も簡単です。

図20 スイッチングハブを介したネットワークへの接続


スイッチハブの空いた端子にLANケーブルでRaspberry Piを接続すると、ネットワークにつながります。

5.4 有線接続3:どちらでもない場合

それでは、Raspberry Piを有線でインターネットに接続したいにも関わらず、皆さんのPCの接続が図19図20のどちらでもない場合はどうすればよいでしょうか。典型的には、LAN端子が一つしかない機器や壁の端子にPCが直接つながっている場合です。

この場合、ブロードバンドルーターやスイッチングハブを導入することで図19図20のような状態とする必要がありますが、どちらの機器を導入すべきかは皆さんのネットワーク接続環境に依存します。

接続環境にルーター機能がない場合は、図19のようにブロードバンドルーターを導入する必要があります。この時、無線LAN接続機能を持ったブロードバンドルーターを導入することも可能です。接続環境にルーター機能がある場合は、図20のようにスイッチングハブを導入します。

自分の接続環境がどちらかわからない場合は、接続業者などに一度相談するのがよいでしょう。「PC2台をネットワークに接続したい」と伝えると話がスムーズに進むでしょう。

5.5 接続の確認

さて、5.1から5.4のどれかの方法により、ネットワークへの接続が完了したでしょうか?

ネットワークへの接続が正常に行われているか確認するには、デスクトップアイコンからブラウザを起動し、インターネット上のページを閲覧してみるのが簡単です。例えば検索エンジンGoogleのサイトに接続してみるといいでしょう。

5.6 日本語フォントのインストール(オプション)

ネットワークへの接続が終わったら、お好みでいくつかのソフトウェアなどをインストールしてみましょう。

まず、日本語フォントです。デスクトップ上の日本語文字には、不自然な字体が含まれていることがあります。日本語フォントを追加インストールすることでこの問題を解消できます。下記の手順でインストールします。

まず、デスクトップ上部のバーにある黒い四角のアイコンをクリックし、LXTerminalというターミナルソフトウェアを起動しましょう。

デスクトップ左上のメニューから「アクセサリ」→「LXTerminal」とたどっても起動できます。

すると図21のようなアプリケーションが起動します。

図21 ターミナルソフトウェアLXTerminal

内部に下記のようなコマンド(命令)を受け付ける「コマンドプロンプト」が見えるでしょう。
pi@raspberrypi ~ $
このコマンドプロンプトに対し、下記の2つのコマンドを1つずつ順に入力して実行しましょう。
sudo apt update
sudo apt install fonts-vlgothic
コマンドの入力に自信のない方は、このページをRaspberry Pi上のブラウザで開き、上記のコマンドを一つずつコピーしてLXTerminalに貼り付けて実行しても良いでしょう。

コピーするためには、まずコピーしたいコマンドをブラウザ上でマウスでなぞって色を反転してから右クリックして「コピー」を選択します。そしてそれをLXTerminalに貼り付けるために、LXTerminalのメニューから「Edit(編集)」→「Paste(貼り付け)」を選択します。

一つ目のコマンドは、インストール可能なパッケージのリストを更新するためのもので、終了するまでに数分かかる場合があります。二つ目のコマンドが、実際にフォントをインストールするためのものです。

この際、「Do you want to continue?(続行しますか?)」や「Install these packages without verification?(検証なしにこれらのパッケージをインストールしますか?)」と聞かれることがありますので、その場合はそれぞれキーボードの[y]をタイプした後[Enter]キーを押して続行してください。やはり1分程度の時間がかかります。

インストールが終わったら、Raspberry Piを再起動しましょう。より綺麗な字体でデスクトップが表示されているはずです。

5.7 日本語入力メソッドのインストール(オプション)

ここまでの範囲では、Raspberry Piに日本語を入力することができません。典型的には、ブラウザ上で検索を行う際に、日本語が入力できないという問題が起こります。

そこで、ここでは日本語を入力するためのアプリケーションのインストール方法を解説します。

ただし、日本語入力について一点注意が必要です。本書では、プログラムファイルに修正を加えることや、プログラムの実行コマンドを入力することを行います。それらは、すべて英語文字で入力する前提となっています。書籍中で日本語の入力を求められることはありません。

そのため、日本語入力メソッドをインストールした後は、自分が日本語を入力しているのか英語を入力しているのかを常に意識し、英語文字を入力すべき際に日本語文字を入力することのないよう注意してください。これは、WindowsやmacOSを用いる際も起こりうることですね。

インストール方法は、5.6の日本語フォントのインストールと似ています。LXTerminalを起動し、下記の2つのコマンドを1つずつ順に実行して下さい。
sudo apt update
sudo apt install ibus-mozc
2つのコマンドの実行が正常に終了したらインストールは完了しています。そこでRaspberry Piを再起動しましょう。

すると、図22(A)のように、デスクトップ上部のバーに「EN」というアイコンが追加されています。そのアイコンをマウスでクリックし、「日本語 - Mozc」を選択してください。

図22 日本語入力メソッドと入力モード切替方法

すると、図22(B)のようにアイコンの表示が「A」に変わります。これは、英語を入力するモードを表しています。ここでキーボードの「半角/全角」キーを押すと、図22(C)のようにアイコンが「あ」と変わり、日本語入力モードに変わります。

ただし、図22(A)の操作の過程でキーボードの設定が英語キーボードの設定に戻り、「半角/全角」キーが機能しなくなることがあります。その場合、4.5のキーボードの設定をもう一度行い、日本語キーボードに設定しなおしてください。必要に応じてRaspberry Piを再起動する必要があります。それにより、「半角/全角」キーが機能するようになり、日本語入力が機能します。

また、NOOBS 2.8.2のRaspbianでは、IDLEのエディタにibus-mozcから直接日本語を入力できないという問題を確認しました。原因は調査中です。テキストエディタ(「アクセサリ」→「Text Editor」)には日本語を入力できますので、そこに書いた日本語をコピーしてIDLEのエディタに貼り付けることでこの問題をしのぐことができます。

なお、書籍の内容にはPythonプログラム中に日本語を入力しなければならない演習はありませんので、この問題は書籍の内容に影響しません。

2019年12月29日日曜日

書籍で用いたコマンドおよび追加情報

本ページで表示するコマンドの利用方法

本ページには、本書の演習を実行するために必要なコマンドを全て記し、さらに、本書への追加情報を記していきます。

コマンドを全て本ページに記すことには、二つの目的があります。

一つ目の目的は、ソフトウェアのインストールコマンドが本書刊行後に変更された場合に、最新情報を提供することです。ですから、本書のコマンドと本ページのコマンドが異なる場合は、本ページの情報が最新であるとお考え下さい。

二つ目の目的は、コマンドの入力がうまくいかないときのために、コマンドをコピーできる形式で提供することです。

本ページのコマンドをコピーにより活用するためには、まずRaspberry Pi上のブラウザ(Chromium)で本ページを開きます。

そして、コピーしたいコマンドをマウスでなぞり色を反転してください。その状態からそのコマンドをコピーするには下記の二つの方法のうちどちらかを実行してください。
  • 色を反転した領域をマウスで右クリックして「コピー」を選択する
  • キーボードの「Ctrl」キーを押しながら「c」キーを押す(Ctrl-c)
そして、コピーされたコマンドをターミナルソフトウェアに貼り付けるには、下記の三つの方法のうちどれかを実行してください。
  • LXTerminalのメニューから「編集」→「貼り付け」を選択する
  • LXTerminal上でキーボードの「Ctrl」キーと「Shift」キーを押しながら「v」キーを押す(Ctrl+Shift+v)
  • LXTerminal上でマウスのホイールを押し込む(ただし、この方法は正確には「コピーされた文字を貼り付ける」のではなく「マウスで色が反転された文字を貼り付ける」という動作になります)
いずれかの方法でLXTerminalにコマンドが貼り付けられたら、そのままキーボードの「Enter」キーを押せばコマンドが実行されます。

なお、2つのコマンドが2行にわたって連続して書かれている場合、コピー、貼り付け、実行はコマンド一つごとに行ってください。

3章

p.66 圧縮されたサンプルファイルの展開に関する注意

2019年6月にリリースされたNOOBS 3.1.1に含まれるRaspbianでは、圧縮ファイルを展開するためのソフトウェアのデフォルトの設定が変化しましたので利用の際は注意が必要です。
下図(左)のように、展開先のデフォルトが「/tmp」とされ、また、展開時に自動的にフォルダが作られるようになっています。
これを、下図(右)のように
  • 展開先に「 /home/pi 」または「 /home/pi/bluebacks 」と記入
  • 「Ensure a containing directory」のチェックを外す
の2点を行ってから「展開」ボタンを押すようにしましょう。展開先に記す文字は、このページからコピー (Ctrl-c) して貼り付ける (Ctrl-v) と安心です。



p.68 インストールできるソフトウェアの一覧を更新するコマンド

sudo apt update

p.68 scikit-learnをインストールするためのコマンド

sudo apt install python-sklearn
Python3で演習を実行したい方は下記も合わせて実行してください。
sudo apt install python3-sklearn

p.70:NOOBS 2.8.2~NOOBS 3.0.1におけるIDLEの通常起動について

NOOBS 2.8.2~NOOBS 3.0.1では、デスクトップのメニューから「Python 2 (IDLE)」の項目が削除されました(下図)。そのため、IDLEを起動するためにはいくつかの準備が必要となりました。その準備について解説します。

なお、NOOBS 3.1.1以降ではまた別の方法が必要なので、このまま画面をスクロールして「p.70:NOOBS 3.1.1以降におけるIDLEの起動方法について」をご覧ください。

さらに、IDLEではなくThonny Python IDEという新しい開発環境を用いてプログラムを実行する方法もあります。そちらに興味のある方はこのまま画面をスクロールして「p.70:Thonny Python IDEでの本書の演習の実行について」をご覧ください。


まず、LXTerminal (ターミナル)上のコマンドによりPython 2用のIDLEを起動する方法を解説します。ターミナルを起動し、下記のコマンドを実行してみてください。
idle &
Python 2用のIDLEが起動するでしょう。

次に、メニュー上に「Python 2 (IDLE)」の項目を復活させる方法を解説します。まず、ターミナルで下記のコマンドを実行し、管理者権限のテキストエディタleafpadでメニュー用設定ファイルを開きます。
sudo leafpad /usr/share/raspi-ui-overrides/applications/idle.desktop
このファイルの末尾に
NoDisplay=true
と書かれた行が存在しますので、これを
NoDisplay=false
と編集してください。そして、テキストエディタleafpadでファイルを上書き保存した後、Raspberry Piを再起動してください。メニューに「Python 2 (IDLE)」の項目が復活しているでしょう。

なお、メニューにある「Python 3 (IDLE)」はPython 3用ですが、Python 3系を用いるのであれば、メニューにあるThonny Python IDEを用いた方が良いかもしれません。その場合、ページをスクロールして「p.85:Thonny Python IDEでの本書の演習の実行について」をお読みください。

p.70:NOOBS 3.1.1以降でのIDLEの起動方法について

ここでは、NOOBS 3.1.1以降でIDLEを用いる方法について解説します。ネットワークに接続してIDLEをインストールする必要があります。この時点でまだRaspberry Piをネットワークに接続していない方は、Thonny Python IDEを用いる方法もあります。そちらを希望される場合はこのままページをスクロールして「p.70:Thonny Python IDEでの本書の演習の実行について」をご覧ください。

さて、IDLEをインストールするには、LXTerminal (ターミナル)上を起動し、下記の2つのコマンドを一つずつ順番に実行してください。コマンドをこのページから一つずつコピーしてターミナル上に貼り付けて実行するのが安全です。
sudo apt update
sudo apt install idle-python2.7
このインストールにより、LXTerminalで
idle &
とコマンドを実行することでIDLEを実行できます。

現時点では、メニューにIDLEを表示する方法はなさそうです。

なお、Python 3系のIDLEを用いたければパッケージ idle-python3.7 をインストールすれば良いのですが、Python 3系を用いるのであれば、メニューにあるThonny Python IDEを用いた方が良いかもしれません。次項をそのままお読みください。

p.70:Thonny Python IDEでの本書の演習の実行について

上の項目で記したように、RaspbianでIDLEを用いてPythonプログラムを実行するのは面倒な手続きが必要になってきました。
ここでは、より簡単にPythonプログラムを実行する方法として、デフォルトでインストール済の「Thonny Python IDE」を用いる方法を紹介します。

Thonny Python IDEはpython3用のプログラムを実行するための環境なのですが、2019/6/25に更新された本書のプログラムはPython3での実行をサポートしていますので問題なく実行できます。
それ以前にダウロードした方は再び mlbb-sample.zip をダウンロードし、展開しなおした上でご活用ください。

Thonnyを用いるということは必然的にPython3を用いることを意味します。本ページでは各章の演習のPython3での実行方法が記されておりますので、注意してお読みください。

なお、Python2 と Python3の違いを知りたい場合は次項の「p.70:Python2とPython3について」も合わせてお読みください。

さて、メニューの下図に示されている「Thonny Python IDE」をマウスでクリックするとThonny Python IDEが起動します。


次図のように、「LOAD」がファイルの読み込み、「RUN」がプログラム実行、「STOP」がプログラム停止であることを理解すれば問題なく利用できるでしょう。


Thonny Python IDEを用いると、8~10章で取り扱うOpenCVを用いたプログラムもIDEから実行できるというメリットがあります(IDLEでは画像処理プログラムのみコンソールから起動させたのでした)。

ただし、Thonny Python IDEを用いるとコマンドライン引数が必要なプログラムの実行に注意が必要になりますのでここで注意しておきます。

コマンドライン引数は、8章で初めて登場するものです。プログラム実行時のコマンドで例えば「python3 ml-08-03-learn.py result.pkl」のように、ファイル名「ml-08-03-learn.py」の後に付加する「result.pkl」の部分のことを指します。
この場合は、学習後の結果を保存するファイル名を「result.pkl」とするためにこのコマンドライン引数を与えています。 Thonny Python IDEでコマンドライン引数を用いるには下記の手順に従ってください。

  • 右上の「Switch to regular mode」というリンクをクリックすることで、ユーザーインターフェースをシンプルモードからレギュラーモードに変更する(Thonny Python IDEの再起動が必要)
    (後で元に戻すときはTools→Option→General→UI modeを「simple」に)
  • レギュラーモードにしかないメニューが現れるので、「View」→「Program arguments」にチェックする(Program argumentsとはコマンドライン引数のことを表す)
  • 右上に現れた小窓に必要なコマンドライン引数を記入してからプログラムを実行
    (ml-08-03-learn.pyの場合は学習後の結果を保存するファイル名「result.pkl」を記す)

以上で、下図のように「python3 ml-08-03-learn.py result.pkl」というコマンドを実行したのと同じ効果がThonny Python IDEで得られます。なお、「Program arguments」の部分はコマンドライン引数が不要なプログラムでは空欄に戻して実行してください。



p.70:Python2とPython3について

ここからは、Python 2とPython 3の違いについて解説を加えますので、興味のある方はお読みください。

まず、本書で用いるプログラミング言語はPythonですが、Pythonにはバージョン2 (Python 2) とバージョン 3 (Python 3)が存在します。

Python 3の方が新しいのですが、両者には互換性が保たれていないところがあり、Python 2からPython 3への移行はなかなか進んでいません。そのため、多くのシステムではPython 2とPython 3を共存させています。

実際、Raspberry Pi上で動作するRaspbianでは、2012年のリリース以来下記のようにPython 2とPython 3および対応コマンドが共存しています。

項目Python2用コマンドPython3用コマンド
プログラム実行コマンドpython または python2python3
IDLE実行コマンドidleidle3
Thonny実行コマンドなしthonny
Python用プログラムインストールコマンドpipまたはpip2pip3

2019/6/25に更新された本書のプログラムは、Python2 と Python3 のどちらで実行しても問題が起こらないよう記述していますので、上記の違いを意識せず演習を進められます(それ以前にダウロードした方は再び mlbb-sample.zip をダウンロードし、展開しなおした上でご活用ください)。
とはいえ、プログラム実行時に自分がPython2 と Python3 のどちらで実行しているかを意識するとPythonプログラムにより早く慣れることができるでしょう。

p.75 ml-03-01-version.pyの実行コマンド

本ページではPythonプログラムの実行コマンドも掲載しますが、本書で記したように、「TAB」キーによる補完機能をマスターすることをお勧めします。
python ml-03-01-version.py
Python3で演習を実行したい方向けのコマンドはこちらです。
python3 ml-03-01-version.py

4章

p.117 古いバージョンのscikit-learnでml-04-04-2feat3class.pyを実行すると

3章で解説したように、本書ではStretchと呼ばれるバージョンのRaspbianのみをサポートしています。Jessieという古いバージョンのRaspbianでは、インストールされるscikit-learnのバージョンが0.14.1と古いため、ml-04-04-2feat3class.pyを実行したきに
TypeError: __init__() got an unexpected keyword argument 'decision_function_shape'
というエラーが出てプログラムが終了します。119ページで解説したdecision_function_shapeというパラメータはscikit-learnのバージョン0.17で導入されたためです。そのため、Stretchというバージョン以降のRaspbianをお使いください。

5章

p.143 古いバージョンのscikit-learnでml-05-01-2feat3class-nn.pyを実行すると

3章で解説したように、本書ではStretchと呼ばれるバージョンのRaspbianのみをサポートしています。Jessieという古いバージョンのRaspbianでは、インストールされるscikit-learnのバージョンが0.14.1と古いため、ml-05-01-2feat3class-nn.pyを実行したきに
ImportError: cannot import name MLPClassifier
というエラーが出てプログラムが終了します。3章の73ページで解説したように、多層ニューラルネットワーク MLPClassifier の機能はscikit-learnのバージョン0.18で導入されたためです。そのため、Stretchというバージョン以降のRaspbianをお使いください。

p.153 ml-05-01-2feat3class-nn.pyを実行すると書籍と異なる図が現れる

ml-05-01-2feat3class-nn.pyは毎回同じ乱数系列を利用するため、常に同じ結果を返すとp.153で述べました。 そのこと自体は正しいのですが、2019年7月にリリースされたRasbpian Busterではscikit-learnのバージョンが 0.20.2へとアップデートされたため、書籍の図5-7と異なる図が皆さんに表示されるようになりました。

その理由は、scikit-learnのバージョンが変わり学習の終了の判定条件が変更されたからと考えられますが、これは p.153で「将来のscikit-learnのバージョンアップにより結果が変わる可能性がないとは言えません」と記した通り、 予想されていたことです(より細かく言えば、tol=0.00002 とすると、書籍の図5-7とほぼ同じ図が現れます)。

ですので、図5-7の違いについては気にせずにお読みいただいて構いません。

p.168 変更するmax_iterの値について

168ページにて、 ml-05-02-4feat3class-nn.pyで長時間実験を行うために、max_iterとtolを変更します。 このうち、max_iterにセットする値は、書籍に記したように 100000 (0が5個) ですのでご注意ください。
max_iter を 10000 (0が4個) としてしまうと、正解率100%に達しません

p.169 ml-05-02-4feat3class-nn.pyで長時間実験を行う際の警告について

ml-05-02-4feat3class-nn.pyで長時間実験を行う際、コンソールには 「Stochastic Optimizer: Maximum iterations reached and the optimization hasn't converged yet.」 という警告が現れます。
158ページに記しましたように、これは「tolの条件が満たされる前に最大エポックに達してしまった」ことを示す警告ですが、 それを意図した実験でしたので、158ページの長時間実験と同様にこの警告は無視して構いません。

6章

p.195 ImageTKのインストール用コマンド

2つの命令がありますので、1つずつ順番に実行してください。
sudo apt update
sudo apt install python-pil.imagetk
Python3で演習を実行したい方は下記も合わせて実行してください。
sudo apt install python3-pil.imagetk

8章

p.243 Pi Zeroシリーズでの公式カメラモジュールの利用

Pi Zeroシリーズを用いる場合、公式カメラモジュールに専用ケーブルを用いる必要があります。Pi Zero用のケーブルは例えばこちらで購入できます。

接続例を示したのが下図です。


ケーブルを取り付ける際、金属が露出した端子面を、どちらも緑色の基板の方を向くようにします。基板上のカバーを引き出し、ケーブルを差し込んだ後でカバーを押し込むことでケーブルが固定されます。

p.248 OpenCVのインストール

なお、ここではOpenCVのインストール方法について下記の3通りの方法を解説します。こだわりのない方は一番初めに解説するPython2を用いてください。
  • Python2でOpenCVを利用する場合
  • Python3でOpenCVを利用する場合(NOOBS 3.0.1 までの Stretch)
  • Python3でOpenCVを利用する場合(NOOBS 3.1.1 以降の Buster)

p.248 Python2でOpenCVを利用する場合

2つの命令がありますので、1つずつ順番に実行してください。
sudo apt update
sudo apt install python-opencv

p.248 Python3でOpenCVを利用する場合(NOOBS 3.0.1 までの Stretch)

3つの命令がありますので、1つずつ順番に実行してください。
sudo apt update
sudo apt install libatlas-base-dev libjasper-dev libqtgui4 python3-pyqt5 libqt4-test
sudo pip3 install opencv-python

p.248 Python3でOpenCVを利用する場合(NOOBS 3.1.1 以降の Buster)

2つの命令がありますので、1つずつ順番に実行してください。
sudo apt update
sudo apt install python3-opencv

p.250 ml-08-01-cameracheck.pyの実行コマンド

python ml-08-01-cameracheck.py
Python3で演習を実行したい方向けのコマンドはこちらです。
python3 ml-08-01-cameracheck.py

p.250 ml-08-02-binary.pyの実行コマンド

python ml-08-02-binary.py
Python3で演習を実行したい方向けのコマンドはこちらです。
python3 ml-08-02-binary.py
なお、エラーが出る場合、2019/6/25に更新されたサンプルファイル(mlbb-sample.zip)をダウンロードし直し、展開した上でご活用ください。

p.259 ml-08-02-binary.pyを編集するためのコマンド

leafpad ml-08-02-binary.py

p.275 ml-08-03-learn.pyの実行コマンド

python ml-08-03-learn.py result.pkl
Python3で演習を実行したい方向けのコマンドはこちらです。
python3 ml-08-03-learn.py result.pkl
なお、エラーが出る場合、2019/6/25に更新されたサンプルファイル(mlbb-sample.zip)をダウンロードし直し、展開した上でご活用ください。

p.286 ml-08-04-recognition.pyの実行コマンド

python ml-08-04-recognition.py result.pkl
Python3で演習を実行したい方向けのコマンドはこちらです。
python3 ml-08-04-recognition.py result.pkl
なお、エラーが出る場合、2019/6/25に更新されたサンプルファイル(mlbb-sample.zip)をダウンロードし直し、展開した上でご活用ください。

9章

p.293 mpg321をインストールするためのコマンド

2つの命令がありますので、1つずつ順番に実行してください。
sudo apt update
sudo apt install mpg321

p.295 音声の出力先をピンジャックにするためのコマンド

amixer cset numid=3 1

p.296 ml-09-01-janken.pyの実行コマンド

GUIを用いたじゃんけんシステムです。
python ml-09-01-janken.py result.pkl
Python3で演習を実行したい方向けのコマンドはこちらです。
python3 ml-09-01-janken.py result.pkl
なお、エラーが出る場合、2019/6/25に更新されたサンプルファイル(mlbb-sample.zip)をダウンロードし直し、展開した上でご活用ください。

このじゃんけんシステムにロボットハンドを追加し、ディスプレイないではなく現実世界でじゃんけん勝負する方法を 「人間の手を予測するじゃんけんシステムにロボットハンドを追加する」に示しましたので、電子工作に興味のある方はご覧ください。

p.300 ml-09-02-janken-shorten.pyの実行コマンド

GUIを用いたじゃんけんシステムの音声短縮版です。
python ml-09-02-janken-shorten.py result.pkl
Python3で演習を実行したい方向けのコマンドはこちらです。
python3 ml-09-02-janken-shorten.py result.pkl
なお、エラーが出る場合、2019/6/25に更新されたサンプルファイル(mlbb-sample.zip)をダウンロードし直し、展開した上でご活用ください。

10章

10章全般 kerasとTensorFlowの利用について

本書では、kerasと一緒に用いるバックエンドとしてTheanoを用いました。 このバックエンドをGoogleのTensorFlowに変更する方法を下記のページに紹介しましたので、 興味のある方はご覧ください 。結果が変わるわけではありませんし、上級者向けの内容ですので、自信がない方は書籍の通りTheanoの利用で問題ありません。

p.308 kerasとtheanoの利用に必要なツールをインストールするためのコマンド

2つの命令がありますので、1つずつ順番に実行してください。
sudo apt update
sudo apt install liblapack-dev libhdf5-dev python-h5py
Python3で演習を実行したい方は下記のコマンドも実行してください。
sudo apt install liblapack-dev libhdf5-dev python3-h5py

p.309 kerasとtheanoをインストールするためのコマンド

sudo pip install keras theano
Python3で演習を実行したい方は、下記のコマンドも実行してください。
sudo pip3 install keras theano
なお、このコマンドを実行したとき、例えば下記のような40行程度のエラーが出ることがあります。
Exception:
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 215, in main
    status = self.run(options, args)
(中略)
  File "/usr/share/python-wheels/urllib3-1.19.1-py2.py3-none-any.whl/urllib3/util/retry.py", line 315, in increment
    total -= 1
TypeError: unsupported operand type(s) for -=: 'Retry' and 'int'
これは、インストール時のネットワークに問題があるときに出るエラーです。 Raspberry Piがネットワークに接続していないとき、および、ファイルのダウンロード元であるサーバーに問題があるときの両方で上記エラーが出ます。
あるいは、同様のエラーで
THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE.
と出る場合もあります。

まず、Raspberry Piのネットワーク接続に問題がある場合はその改善を試みてください。
一方、先方のサーバーに問題がある場合、時間をあけてからコマンドを再実行すると問題が解消される場合があります。

p.311 kerasの設定ファイルを編集するためのコマンド

leafpad .keras/keras.json
なお、keras.jsonの4行の内容は順番が前後することがありますが、「tensorflow」部を「keras」に書き換えさえすれば順番はそのままで構いません。

10.4 アヤメの分類

p.321 ml-10-01-iris-deep-learn.pyの実行コマンド(アヤメの学習)

学習には時間がかかるので実行することを必ずしもお勧めしません。
python ml-10-01-iris-deep-learn.py result-iris.h5
Python3で演習を実行したい方向けのコマンドはこちらです。
python3 ml-10-01-iris-deep-learn.py result-iris.h5

p.327 ml-10-02-iris-deep-load.pyの実行コマンド(自分で作った学習済ファイルを用いる場合)

python ml-10-02-iris-deep-load.py result-iris.h5
Python3で演習を実行したい方向けのコマンドはこちらです。
python3 ml-10-02-iris-deep-load.py result-iris.h5

p.327 ml-10-02-iris-deep-load.pyの実行コマンド(配布された学習済ファイルを用いる場合)

python ml-10-02-iris-deep-load.py ml-iris-deep.h5
Python3で演習を実行したい方向けのコマンドはこちらです。
python3 ml-10-02-iris-deep-load.py ml-iris-deep.h5

10.6 手書き数字の分類

p.351 ml-10-03-digits-cnn-learn.pyの実行コマンド(手書き数字の学習)

学習には時間がかかるので実行することを必ずしもお勧めしません。
python ml-10-03-digits-cnn-learn.py result-digits.h5
Python3で演習を実行したい方向けのコマンドはこちらです。
python3 ml-10-03-digits-cnn-learn.py result-digits.h5

p.354 ml-10-04-digits-cnn-load.pyの実行コマンド(自分で作った学習済ファイルを用いる場合)

正解率を表示するプログラムです。
python ml-10-04-digits-cnn-load.py result-digits.h5
Python3で演習を実行したい方向けのコマンドはこちらです。
python3 ml-10-04-digits-cnn-load.py result-digits.h5

p.354 ml-10-04-digits-cnn-load.pyの実行コマンド(配布された学習済ファイルを用いる場合)

正解率を表示するプログラムです。
python ml-10-04-digits-cnn-load.py ml-digits-cnn.h5
Python3で演習を実行したい方向けのコマンドはこちらです。
python3 ml-10-04-digits-cnn-load.py ml-digits-cnn.h5

p.356 ml-10-05-digits-cnn-gui.pyの実行コマンド(自分で作った学習済ファイルを用いる場合)

マウスで描いた数字を分類するプログラムです。
python ml-10-05-digits-cnn-gui.py result-digits.h5
Python3で演習を実行したい方向けのコマンドはこちらです。
python3 ml-10-05-digits-cnn-gui.py result-digits.h5

p.356 ml-10-05-digits-cnn-gui.pyの実行コマンド(配布された学習済ファイルを用いる場合)

マウスで描いた数字を分類するプログラムです。
python ml-10-05-digits-cnn-gui.py ml-digits-cnn.h5
Python3で演習を実行したい方向けのコマンドはこちらです。
python3 ml-10-05-digits-cnn-gui.py ml-digits-cnn.h5

p.357 ml-10-06-digits-cnn-gui-mod.pyの実行コマンド(自分で作った学習済ファイルを用いる場合)

マウスで描いた数字を分類するプログラムです。数字の位置と大きさを補正するバージョンです。
python ml-10-06-digits-cnn-gui-mod.py result-digits.h5
Python3で演習を実行したい方向けのコマンドはこちらです。
python3 ml-10-06-digits-cnn-gui-mod.py result-digits.h5

p.358 ml-10-06-digits-cnn-gui-mod.pyの実行コマンド(配布された学習済ファイルを用いる場合)

マウスで描いた数字を分類するプログラムです。数字の位置と大きさを補正するバージョンです。
python ml-10-06-digits-cnn-gui-mod.py ml-digits-cnn.h5
Python3で演習を実行したい方向けのコマンドはこちらです。
python3 ml-10-06-digits-cnn-gui-mod.py ml-digits-cnn.h5
なお、このプログラムをTensorFlow.jsというライブラリによりブラウザで体験するデモンストレーションを作成してみました。 「手描き数字認識をTensorFlow.jsによりブラウザで実行してみよう」で解説しておりますので、興味のある方はお試しください。

10.6 じゃんけんの手の分類

p.368 ml-10-07-hand-cnn-learn.pyの実行コマンド(じゃんけんの手の学習)

学習には時間がかかるので実行することを必ずしもお勧めしません。
python ml-10-07-hand-cnn-learn.py result-hand.h5
Python3で演習を実行したい方向けのコマンドはこちらです。
python3 ml-10-07-hand-cnn-learn.py result-hand.h5
なお、エラーが出る場合、2019/6/25に更新されたサンプルファイル(mlbb-sample.zip)をダウンロードし直し、展開した上でご活用ください。

さらに、このコマンドの実行時に下記のようなAttributeErrorが出る場合、学習用の手の画像が格納されているml-learnディレクトリがプログラムml-10-07-hand-cnn-learn.pyと同じ位置に存在しないためであると考えられます。 これは圧縮されたサンプルファイルを展開すると現れるディレクトリです。ご確認ください。
pi@raspberrypi:~ $ python ml-10-07-hand-cnn-learn.py hand-result.h5
Using Theano backend.
Epoch 1/500
Traceback (most recent call last):
  File "ml-10-07-hand-cnn-learn.py", line 116, in 
    history = model.fit(X, y_keras, batch_size=batch_size, epochs=epochs, validation_split=0., verbose=2)
  File "/usr/local/lib/python2.7/dist-packages/keras/engine/training.py", line 1039, in fit
    validation_steps=validation_steps)
  File "/usr/local/lib/python2.7/dist-packages/keras/engine/training_arrays.py", line 217, in fit_loop
    callbacks.on_epoch_end(epoch, epoch_logs)
  File "/usr/local/lib/python2.7/dist-packages/keras/callbacks.py", line 79, in on_epoch_end
    callback.on_epoch_end(epoch, logs)
  File "/usr/local/lib/python2.7/dist-packages/keras/callbacks.py", line 338, in on_epoch_end
    self.progbar.update(self.seen, self.log_values)
AttributeError: 'ProgbarLogger' object has no attribute 'log_values'

p.371 ml-10-08-hand-cnn-load.pyの実行コマンド(自分で作った学習済ファイルを用いる場合)

二値化されたカメラ映像と手の分類結果を表示するプログラムです。
python ml-10-08-hand-cnn-load.py result-hand.h5
Python3で演習を実行したい方向けのコマンドはこちらです。
python3 ml-10-08-hand-cnn-load.py result-hand.h5
なお、エラーが出る場合、2019/6/25に更新されたサンプルファイル(mlbb-sample.zip)をダウンロードし直し、展開した上でご活用ください。

p.371 ml-10-08-hand-cnn-load.pyの実行コマンド(配布された学習済ファイルを用いる場合)

二値化されたカメラ映像と手の分類結果を表示するプログラムです。
python ml-10-08-hand-cnn-load.py ml-hand-cnn.h5
Python3で演習を実行したい方向けのコマンドはこちらです。
python3 ml-10-08-hand-cnn-load.py ml-hand-cnn.h5
なお、エラーが出る場合、2019/6/25に更新されたサンプルファイル(mlbb-sample.zip)をダウンロードし直し、展開した上でご活用ください。

p.373 ml-10-09-janken-deep.pyの実行コマンド(自分で作った学習済ファイルを用いる場合)

GUIによるじゃんけんシステムです。
python ml-10-09-janken-deep.py result-hand.h5
Python3で演習を実行したい方向けのコマンドはこちらです。
python3 ml-10-09-janken-deep.py result-hand.h5
なお、エラーが出る場合、2019/6/25に更新されたサンプルファイル(mlbb-sample.zip)をダウンロードし直し、展開した上でご活用ください。

p.373 ml-10-09-janken-deep.pyの実行コマンド(配布された学習済ファイルを用いる場合)

GUIによるじゃんけんシステムです。
python ml-10-09-janken-deep.py ml-hand-cnn.h5
Python3で演習を実行したい方向けのコマンドはこちらです。
python3 ml-10-09-janken-deep.py ml-hand-cnn.h5
なお、エラーが出る場合、2019/6/25に更新されたサンプルファイル(mlbb-sample.zip)をダウンロードし直し、展開した上でご活用ください。

じゃんけんシステムは、手の画像が格納されているディレクトリml-imagesと音声が格納されているディレクトリml-soundがプログラムファイルml-10-09-janken-deep.pyと同じ位置にあることが前提となっています。 どちらも圧縮されたサンプルファイルを展開すると現れるディレクトリです。エラーが出る方はご確認ください。

なお、このじゃんけんシステムにロボットハンドを追加し、ディスプレイないではなく現実世界でじゃんけん勝負する方法を 「人間の手を予測するじゃんけんシステムにロボットハンドを追加する」に示しましたので、電子工作に興味のある方はご覧ください。

p.374 ml-10-10-janken-deep-shorten.pyの実行コマンド(自分で作った学習済ファイルを用いる場合)

GUIによるじゃんけんシステムの音声短縮版です。
python ml-10-10-janken-deep-shorten.py result-hand.h5
Python3で演習を実行したい方向けのコマンドはこちらです。
python3 ml-10-10-janken-deep-shorten.py result-hand.h5
なお、エラーが出る場合、2019/6/25に更新されたサンプルファイル(mlbb-sample.zip)をダウンロードし直し、展開した上でご活用ください。

p.374 ml-10-10-janken-deep-shorten.pyの実行コマンド(配布された学習済ファイルを用いる場合)

GUIによるじゃんけんシステムの音声短縮版です。
python ml-10-10-janken-deep-shorten.py ml-hand-cnn.h5
Python3で演習を実行したい方向けのコマンドはこちらです。
python3 ml-10-10-janken-deep-shorten.py ml-hand-cnn.h5
なお、エラーが出る場合、2019/6/25に更新されたサンプルファイル(mlbb-sample.zip)をダウンロードし直し、展開した上でご活用ください。