2020年12月31日木曜日

カラー図解 Raspberry Piではじめる機械学習 補足情報トップ

はじめに

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

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


以下では、Raspberry PiのOSのインストール方法や、書籍で利用したコマンド一覧などを掲載します。本書はRaspberry Pi 4のような最新のRaspberry Piでの動作もサポートしています。


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

[TensorFlowについて]

[物体検出と姿勢推定について]

[機械学習と電子工作]

[OpenCV3 / OpenCV4]

[カメラについて]

[Anaconda について]

[その他]


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


2020年12月30日水曜日

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

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

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

表1 Raspberry PiへのOSのインストールに必要な機器
物品 備考
Raspberry Pi 必須。動作が高速な Raspberry Pi 4 か Raspberry Pi 3を推奨。1.1で解説
16GB以上のmicroSDカード 必須。価格の面では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接続の電源(Pi Zero~Pi 3の場合)または USB Type-C接続の電源 (Pi 4の場合) 必須。「USB充電対応ACアダプタ」と「USB(A)オス-USB(Micro-B)オスタイプのUSBケーブル」の組み合わせでも可。Raspberry Pi 4 の場合は「USB充電対応ACアダプタ」と「USB(A)オス-USB(Type-C)オスタイプのUSBケーブル」の組みあわせでなければならない。流せる電流の大きさに注意。1.5で解説
ディスプレイおよびケーブル(右のどれかを選択) HDMI接続可能なPC用ディスプレイおよびHDMIケーブル。PC用の他、HDMI搭載液晶テレビも可。1.6で解説
DVI-D接続可能なPC用ディスプレイおよびDVI-HDMI変換ケーブル(HDMIがRaspberry Pi側となる)。1.6で解説
Raspberry Pi 4の場合、Raspberry Pi側の端子はマイクロHDMI端子でなければならない。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 4 Model B (Pi 4 B) メモリ 8GB  :KSY/ 秋月電子通商/ スイッチサイエンス
Raspberry Pi 4 Model B (Pi 4 B) メモリ 4GB  :KSY/ 秋月電子通商/ スイッチサイエンス
Raspberry Pi 4 Model B (Pi 4 B) メモリ 2GB  :KSY/ 秋月電子通商/ スイッチサイエンス
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+) 無線機能なし
 :スイッチサイエンス
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に減らしたもの。
 :スイッチサイエンス
Zero系 Raspberry Pi Zero WH (Pi Zero WH) Zero Wにピンヘッダを半田づけしたもの。
 :秋月電子通商/ スイッチサイエンス
Raspberry Pi Zero W (Pi Zero W)  :スイッチサイエンス
Raspberry Pi Zero (Pi Zero) 無線機能なし。旧版もあるがカメラが使えるのはV1.3のみ。
 :スイッチサイエンス

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

なお、Raspberry Pi 4にはメモリ量が8GB、4GB、2GBのものがあります。 一般にメモリ量の多い方が複数のタスクを同時に実行した場合の快適さが向上します。 その結果、Raspberry Pi 3よりもメモリ量の多いRaspberry Pi 4はブラウザなどの動作が快適です。 ただし、本書の演習を実行する範囲では、メモリ量8GB、4GB、2GBの3バージョンの違いはあまりありませんので、お求めやすい価格のものを選んで構いません。

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

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

本ページでは、Model 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(メガバイト)で表示されているものでは容量が足りず使えません。 価格の面では16GBか32GBの容量のものが入手しやすいでしょう。

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

読み書き速度に関してはUHSスピードクラスという分類もあります。U1とU3の2種類があり、アルファベットのUの内部に数字が描かれています。U1はスピードクラスのクラス10と同程度、U3はそれ以上の速度となっております。

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

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

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

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

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

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


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

キーボードとマウスはUSB接続方式の有線のものを推奨します。
無線キーボードやマウスを使用したいという場合、 ELECOMのサイトの分類でいえば、「2.4GHz ワイヤレス タイプ (キーボードの場合 / マウスの場合)」であればトラブルは少ないでしょう。このタイプには、Logicool社のコンボタイプ(例えばこちら)のように「一つのUSBデバイスでキーボードとマウスの両方を無線で使える」デバイスもあります。
なお、Bluetoothと呼ばれる無線規格のキーボードやマウスは、Raspberry Pi では使えない機種もありますのでおすすめしません。それでもBluetooth 規格のキーボードとマウスを利用したい、という方のためにコメントしますと、Bluetooth 3.0 規格のものならば動作する可能性が高く、Bluetooth 4.0 規格のものはデフォルトでは動作しないことが多いでしょう。また、動作する場合でも Bluetooth のペアリングの際には有線マウスや 2.4GHz ワイヤレスタイプのマウスが必要となることにもご注意ください。

1.5 マイクロUSB接続の電源(Pi Zero~Pi 3の場合)または USB Type-C接続の電源 (Pi 4の場合)
(流すことのできる電流の最大値に注意)

Pi ZeroからPi 3の場合、電源を供給するためにマイクロUSB端子で電源を供給するACアダプタを用います。マイクロUSB端子は図3(A)左のような形状をしています。これまで、スマートフォンの充電に用いられることが多かったものです。
一方、Raspberry Pi 4の場合、Raspberry Pi側の端子がUSB Type-Cと呼ばれるものに変化しています。USB Type-C端子は図3(A)右のような形状をしています。こちらは、比較的新しいスマートフォンの充電用に普及が始まっているものです。

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

これらのケーブルとUSB対応ACアダプタを組み合わせて用いる場合、代表的な構成は図3(B)のようになります。左側がスマートフォン付属のUSB充電対応ACアダプタ、右側がUSBケーブルです。USBケーブルは、Pi ZeroからPi 3の場合「USB(A)オス-USB(Micro-B)オス」というタイプのもの、Pi 4ならばUSB Type-C対応のものでしたね。
図ではACアダプタとケーブルが分かれていますが、これらが一体となっているものでも構いません。

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

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

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

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

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

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

将来的に、Raspberry Pi 4対応の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ケーブルのコネクタ部、右:マイクロHDMIケーブルのコネクタ部、(C)DVI-Dケーブルのコネクタ部、(D)HDMI-マイクロHDMI変換アダプタ

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

ディスプレイとRaspberry Piを接続するためのケーブルは、Raspberry Piのバージョンによって異なります。Pi 3 B+までのRaspberry Piには、図4(B)左側のHDMI端子で接続します。一方Pi 4 Bには、図4(B)右側のマイクロHDMI端子で接続します。

ディスプレイとRaspberry Piの接続を整理したのが下図です。


この図より、Pi 3 B+までのRaspberry Piをディスプレイと接続するためには下記のどちらかを用いることがわかります。
  • HDMIケーブル(図4(B)左側の端子が両側についたケーブル)
  • DVI-HDMI変換ケーブル(図4(B)左側の端子と図4(C)の端子からなるケーブル)
一方、Pi 4 Bの場合、ディスプレイと直接接続できるケーブルは下記のものとなります。
  • HDMI-マイクロHDMIケーブル(図4左側の端子と図4(B)右側の端子からなるケーブル)
Pi 3 B+までのバージョンで使ったディスプレイ接続ケーブルをお持ちの場合、図4(D)のようなHDMI-マイクロHDMI変換アダプタを購入すると、すでにお持ちのディスプレイ接続ケーブルをPi 4 B用に再利用できます。

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

1.7 Raspberry Pi用のケース

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

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

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

なお、本書では用いませんが、Raspberry Pi のGPIOポートを用いて電子工作をしたい場合は、GPIOのピンを活用できるケースを選びましょう。蓋つきのケースであれば、蓋を外して利用するという方法でもよいでしょう。

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

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

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

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

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

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

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

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

表3 Raspberry Piをネットワーク接続する際に必要な物品
機種 無線接続に必要な物品 有線接続に必要な物品
Pi 4 B 不要 LANケーブル
Pi 3 B / 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. Raspberry Pi用のOSをmicroSDカードにインストール

2.1 Raspberry Pi Imagerのダウンロードとインストール

本章ではRaspberry Pi用のOSをインストールします。ここでは、2020年3月にリリースされたRaspberry Pi Imagerというアプリケーションを用いてインストールする方法を解説します。

なお、学校や職場などの環境では、ネットワークアクセスの制限によりRaspberry Pi Imagerによるインストールができない場合があります。そのような場合、 以前から用いられている以下の2つの方法をお試しください。 以上に注意しつつ、Raspberry Pi Imagerを用いたインストール法を解説していきます。この方法ではRaspberry Pi用のOSをmicroSDカードにインストールするという作業を、WindowsなどのPC上で行います。

まず、皆さんが使っているPC上で、Microsoft Edgeなどのブラウザでダウンロードページに接続してください。図6のような英語のページが表示されます。

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


本ページではWindowsを用いたインストール法を解説しますので、「Download for Windows」をいうリンクをクリックして「imager_1.4.exe」いう名前のファイルをダウンロードします。「.exe」の部分、すなわち拡張子の部分は、お使いのPCによっては表示されませんが気にしなくて構いません。

なお、このファイルの名称は imager_(バージョン番号).exe という意味であり、今後のバージョンアップに伴い名称が変更される可能性があります。

ダウンロードされたインストール用ファイルである imager_1.4.exe (図7(A)) を実行し、 Raspberry Pi Imagerをインストールしましょう。ファイルをダブルクリックしたときに図7(B)のような警告が現れた場合、「詳細情報」と書かれたリンクをクリックすると現れる「実行」ボタンをクリックして実行しましょう。

図7 ダウンロードしたimager.exeと、実行時に現れることのある警告

すると、「このアプリがデバイスに変更を加えることを許可しますか?」という警告が現れるので「はい」ボタンをクリックしてください。 すると、Raspberry Pi Imagerのインストール画面が現れるので、「Install」ボタンをクリックしてインストールを実行してください。

終了後「Finish」ボタンを押すと、Raspberry Pi Imagerが起動しますので、その前にお使いの Windows などの PC に microSD カードを接続しましょう。必要に応じて「microSDカード対応マルチカードリーダー/ライター」などを介して接続するのでした。
起動した Raspberry Pi Imager を示したのが図8です。図ではボタンなどが英語表記ですが、現在では一部が日本語表記に変更されています。

図8 Raspberry Pi Imagerが起動した様子

なお、ここでは「Raspberry Pi Imagerをインストールして起動」という流れで解説しましたが、一度インストールした Raspberry Pi Imager を後にもう一度起動したい場合は、 図9のようにWindowsの検索窓で「ras」などと入力し、現れた Raspberry Pi Imager をクリックして実行してください。

図9 以後Raspberry Pi Imagerを起動する方法

次に、図8のRaspberry Pi Imagerで「Operating System (OS)」の部分の「CHOOSE OS (OSを選ぶ)」ボタンをクリックしましょう。そして、図10のように「Raspberry Pi OS (other)」→「Raspberry Pi OS Full (32-bit)」と順にクリックします。インストールするOSとして、Raspberry Pi OS のフルインストール版を選択したことになります。

なお、OSの名称は以前は Raspbian (ラズビアン)でしたが、2020年5月27日より名称が Raspberry Pi OS に変わっております。

図10 「Operating System (OS)」の部分の「CHOOSE OS (OSを選ぶ)」ボタンをクリックし、「Raspberry Pi OS Full (32-bit)」を選択

また、2022年2月より 64-bit 版 OS も選択可能になっていますが、64-bit 版 OS では本書のカメラモジュールを用いた演習の準備が面倒になりますので、上記のように 32-bit 版の OS をインストールすることを推奨します。
さらに、現在その下に「Raspberry Pi OS (Legacy)」という選択肢もあります。こちらは、Buster というやや古い系列の 32-bit 版 OS となっています。

なお、将来的に、Raspberry Pi 上で TensorFlow というディープラーニング用ライブラリを試してみたい、という方はこの「Raspberry Pi OS (Legacy)」を選ぶか、「Raspberry Pi OS Bullseye の 64-bit版」のどちらかを選ぶしかありません。 整理すると以下のようになります。しかし、本書の指示通りに演習を行うだけでしたら TensorFlow は用いませんので、上記、および下記のように「Raspberry Pi OS Full (32-bit)」(つまり Bullseye 32-bit) を選ぶので良いと思います。

Raspberry Pi OS Buster (Legacy) 32-bitTensorFlow 1/2 利用可能
Raspberry Pi OS Bullseye 32-bitTensorFlow を利用できない。しかし本書の演習は問題なくかつ簡単に実行できるのでこれを推奨
Raspberry Pi OS Bullseye 64-bitTensorFlow 2 利用可能。ただし、カメラモジュールを用いた演習の準備が面倒


そして、図8のRaspberry Pi Imagerで、「SD Card (ストレージ)」の部分の「CHOOSE SD CARD (ストレージを選ぶ)」ボタンをクリックしましょう。microSDカードがPCに接続済であれば、図11(A)のようにmicroSDカードが選択肢として現れますので、クリックして選択します。

なお、現れた microSD カードが、図11(B)のようにエクスプローラーの「PC」の項目に現れるものと一致していることを念のため確認しておきましょう。比較するポイントは「ドライブ文字」(図11では「D:」)と「容量」(図11では 16GB 付近の値)です。ドライブ文字はPCの環境によって異なりますので注意してください。microSDカードの容量は、カードに「16GB」と書かれていても、表示は図11のように数GBずれることがありますが気にする必要はありません。

また、PCに外付けハードディスクなどが接続されていると、図11(A)の選択肢が複数現れます。このとき、正しくmicroSDカードの方を選択しないと、皆さんの大切なデータが壊れてしまいますので注意して選択しましょう。なお、選択肢が多数ある場合はマウスのホイールで選択肢をスクロールして該当するものを見つけましょう。

図11 「SD Card」の部分の「CHOOSE SD CARD」ボタンをクリックしてmicroSDカードを選択


さて、「Operating System (OS)」と「SD Card (ストレージ)」の部分をセットしたら、図8のRaspberry Pi Imagerで「WRITE (書き込む)」ボタンをクリックしましょう。図12のようにOSのインストールが始まります。数GBのOSをインターネットからダウンロードして書き込みますので、30分以上かかることがありますのでゆっくりお待ちください。

図12 Raspberry Pi ImagerによりOSがインストールされている様子

Writingが100%になるとVerifying (確認) が始まり、それも100%になるとmicroSDカードへのOSのインストールが完了し、図13のような画面で書き込みが終了したことが知らされます。

この画面になったらPCからmicroSDカードを取り外して構いません。そして、Raspberry Pi Imager を終了しましょう。取り外したmicroSDカードを、次にRaspberry Piに接続することになります。

図13 Raspberry Pi Imagerによるインストールが完了した様子



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

なお、Raspberry Pi Imagerは、過去にRaspberry Pi用のOSをインストールしたことのあるmicroSDカードに対してもOSをそのままインストールできるようです。

一方、一度Raspberry PiのOSをインストールしたmicroSDカードを、もう一度Windowsで使用したい場合、microSDカードをフォーマットする必要があります。 その方法を以下にまとめましたので、必要に応じて参照してください。

3. Raspberry Piの起動

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

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

図14 (A)microSDカードをセットした様子(B)Pi 3 B+に周辺機器を接続した様子(C)Pi 4 Bに周辺機器を接続した様子

同様にキーボード、マウス、HDMIディスプレイも接続してください。 Pi 1 B+からPi 3 B+までの場合は図14(B)を、Pi 4 Bは図14(C)を参考にしてください。 これらは電源以外はどのような順で接続しても構いません。電源は最後に接続するようにしましょう。

なお、Pi 4 Bへの周辺機器の接続には二つ注意があります。

まず、Pi 4 BにはUSB 2.0端子(黒色または白色)と USB 3.0 端子(青色)がそれぞれ二つずつあります。USB 3.0 に対応した機器をUSB 3.0端子に接続すると高速にデータ転送できるという特徴があります。ここで用いるマウスとキーボードは USB 3.0に対応していないことが多いので図14(C)のようにUSB 2.0端子に接続していますが、USB 3.0端子に接続しても高速化の恩恵を受けられないだけで問題なく動作します。

Pi 4 Bでもう一つの注意すべきなのは、ディスプレイへ接続するための端子です。Pi 4 Bには、ディスプレイと接続するためのマイクロHDMI端子が二つあります。基板上を見るとそれぞれの端子の横に「HDMI0」、「HDMI1」と記されています。ディスプレイ二つをそれぞれの端子に接続することでそれらを同時に「デュアルディスプレイ」として使うことができます。本書のようにディスプレイ一つだけを接続する場合は、図14(C)のようにUSB端子に近い「HDMI0」側に接続すると良いでしょう。

なお、図14(B)、(C)にはRaspberry Piの状態を示すLEDの位置と、Pi 3 B+とPi 4 Bの心臓部と呼ぶべきSoC(System on Chip)であるBCM2837B0およびBCM2711の位置も示しました(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シリーズの場合、図14は下記の図14-zeroで読み替えてください。見てわかるように、Pi 3 Bなどと異なり「バスパワーUSBハブ」、「USB OTGケーブル」、「HDMI(メス)-ミニHDMI(オス)変換アダプタ」が追加で必要になります。リンクは典型的な商品に対して張りました。

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


3.2 Raspberry Piへの電源の接続

それでは、Raspberry Piに電源を接続しましょう。

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

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

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

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

初回の起動には少し時間がかかりますが、起動すると Raspberry Piのデスクトップが開きます。

Raspberry Pi 4 を用いており、数分待ってもRaspberry Piのデスクトップが開かない場合、Raspberry Pi 4 と相性の悪いディスプレイがある、という問題に当たっているかもしれません。改善のためのヒントが「イメージファイルを使ってOSをインストールする」ページ末尾の「5. hdmi_safe=1 の設定」という章にあります。

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

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

NOOBS 2.8.2 (Raspbian 2018-06-27) 以降では、OS の初回の起動時、デスクトップ上で下図のようなセットアップウィザードが起動しています。
2022年4月にリリースされたOSでは若干見た目が変わっていますが、基本的には同じものです。
ここではこのアプリケーションに従って設定を行う方法を記していきます。もし、NOOBS 2.8.2 (Raspbian 2018-06-27) より以前のOSをお使いの場合、4.1に進んで個別に設定を行ってください。

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

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

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

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


ここで、古いOSではデフォルトのパスワードの変更が求められます。
デフォルトで存在するユーザー「pi」のデフォルトパスワード「raspberry」の変更が促されるのです(下図)。

ただし、2022年4月にリリースされた新しい OS ではセキュリティの観点からデフォルトユーザー pi は廃止されました。 そのため、ここでは、下記の3つの入力を求められるようになりました。
  • 新しく作成するユーザー名
  • そのユーザーで用いる新しいパスワード
  • 確認のため新パスワードをもう一回入力
ここで決めなければならないユーザー名は、このRaspberry Pi上でのみ用いるものですから、他人のユーザー名とかぶることを心配する必要はありません。
アルファベットと数字からなる、シンプルなユーザー名とするのがよいでしょう。記号には、使えない文字もあるので注意が必要です。私の場合だったら「kanamaru」などとします。

入力が終わったら「Next」をクリックします。


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

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



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


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


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


以上でセットアップウィザードは終了です。「Restart」ボタンをクリックすると再起動が始まります。なお、OSのバージョンにより、自動的に再起動が始まる場合とそうでない場合があります。「Restart」ボタンが「Done」ボタンとなっている場合もあります。
自動で再起動が行われない場合は、手動で再起動するのが良いでしょう。セットアップウィザードを終了した後、デスクトップ左上のメニューから「Shutdown」→「Reboot」と辿ると手動で再起動できます。再起動しないと画面上の文字が日本語になりません。



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

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

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

図15 デスクトップ

設定用アプリケーションは、 左上のメニュー(Menu)ボタンから「設定(Preferences)」→「Raspberry Piの設定(Raspberry Pi Configuration)」をマウスで選択することで起動します。図16のような設定用アプリケーションが起動します。

図16 設定用アプリケーション

4.2 パスワードの変更

本書で用いるOSにはユーザー名とパスワードという概念があります。 2022年4月以降の OS では、OSのインストール直後に自分でユーザー名とパスワードを設定したはずです。

それ以前のOSでは、下記のデフォルトユーザーが作成されていました(現在は廃止されています)。
  • ユーザー名:pi
  • パスワード:raspberry
このパスワードを変更したい場合、図16の「パスワードを変更(Change Password)」ボタンをクリックしてください。「Enter new password(新しいパスワードの入力)」と「Confirm new password(新しいパスワードを再入力)」という入力枠が2つ現れますので、変更したいパスワードを2回入力してから「OK」ボタンをクリックしてください。それでパスワードが変更されます。

4.3 言語の変更

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

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

現れた「言語(Language)」を「Japanese (ja)」に合わせましょう。選択肢はアルファベット順に並んでいます。すると、残りの項目は「国(Country)」が「Japan (JP)」に、「文字セット(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)のバージョンにより異なります。
まずはNOOBS 2.8.2 (Raspbian 2018-06-27) 以降の設定方法を記します。
現れたウインドウで、「Model」を「Generic 105-key (Intl) PC」に、「Layout」を「Japanese」に、「Variant」を「Japanese(OADG 109A)」にセットし、OKボタンを押してください。

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

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

4.6 無線LANの国設定変更

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

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

4.7 Raspberry Piの電源を切る方法

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

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

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

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

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

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


そのような場合、設定アプリケーションの「Display」タブ→「オーバースキャン」を「無効」にしてRaspberry Piを再起動すると、上図(A)右のように画面がいっぱいに使われることが多いでしょう。

ただし、上図(B)のように、液晶テレビの場合にこの設定を行うと、液晶パネルからはみ出してデスクトップが表示されてしまうことがあります。これが気になる方は、「オーバースキャン」を「有効」に戻して再起動した方がよいでしょう。



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

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

ここからはRaspberry Piをネットワークに手動で接続する方法を学びます。初回起動時にWifiの設定を行った方はここで改めて設定する必要はありませんが、「この方法でもWifiを設定できる」と知っておくことは役に立つでしょう。

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

まず、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 ~ $
なお、上に見える「pi」はユーザー名を表しており、ユーザー名「pi」は2022年4月以前の古いOSで用いられていたデフォルトのユーザー名です。最新のOSを用いている方ならば、「pi」の部分に自分で決めたユーザー名が表示されているでしょう。

このコマンドプロンプトに対し、下記の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)のように、デスクトップ上部のバーに「JA」というアイコン(またはキーボードを示すアイコン)が追加されています。そのアイコンをマウスでクリックし、「日本語 - Mozc」を選択してください。

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

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

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

なお、2022年5月現在、最新 OS Bullseye では、アイコンの表示が乱れるという問題がありますが、日本語変換自体は問題なくできるようです。

2020年12月29日火曜日

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

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

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

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

一つ目の目的は、ソフトウェアのインストールコマンドが本書刊行後に変更された場合に、最新情報を提供することです。ですから、本書のコマンドと本ページのコマンドが異なる場合は、本ページの情報が最新であるとお考え下さい。実際、書籍では Python2 用のインストールコマンドを記しましたが、本ページでは Python3 用のインスト―ルコマンドに変更しております。本ページのコマンドをコピー&貼り付けによりご利用ください

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

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

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

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

3章

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

NOOBS 3.1.1 (Raspbian 2019-06-20) 以降では、圧縮ファイルを展開するためのソフトウェアのデフォルトの設定が変化しましたので利用の際は注意が必要です。
下図(左)のように、展開先のデフォルトが「/tmp」とされ、また、展開時に自動的にフォルダが作られるようになっています。
これを、下図(右)のように
  • 展開先に「 /home/pi 」または「 /home/pi/bluebacks 」と記入。ただし、2022年4月にリリースされた OS よりデフォルトユーザー pi は廃止されているため、 この記述の pi の部分は、皆さんが作成したユーザー名で置き換変える必要があります。すなわち、「kanamaru」というユーザーを作成したのなら、「 /home/kanamaru 」や「 /home/kanamaru/bluebacks 」となる、ということです。
  • 「Ensure a containing directory」のチェックを外す
の2点を行ってから「展開」ボタンを押すようにしましょう。展開先に記す文字は、このページからコピー (Ctrl-c) して貼り付ける (Ctrl-v) と安心です。



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

sudo apt update

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

sudo apt install python3-sklearn
2020年5月より本ページでは Python3 用のインスト―ルコマンドのみを掲載することにしました。Python2 では動かない演習が出てきたためです。そのため、書籍に記されている Python2 用のインスト―ルコマンドではなく、本ページの Python3 用のインスト―ルコマンドをご利用ください。上で紹介したように、本ページのコマンドをコピーしてターミナルに貼り付けて実行するのが簡単です。

引き続き、以下の Thonny Python IDE に関する注釈もお読みください。

p.70:開発環境IDLEの代替としてThonny Python IDEを用いる方法

2019年11月現在、本書で解説した開発環境IDLEはデフォルトでRaspbianに含まれていません。IDLE を別途インストールして利用する方法もあるのですが、より簡単にPythonプログラムを実行する方法として、デフォルトでインストール済の「Thonny Python IDE」を用いる方法をここで紹介します。

Thonny Python IDEはpython3用のプログラムを実行するための環境です。本書のプログラムはPython3での実行をサポートしていますので問題なく実行できます。 本ページに記したコマンドのコピー&貼り付けにより本書の演習を行うと、自然と Python 3 で演習を行うことになります。

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


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

プログラムの停止は、「STOP」ボタンによる方法以外に、「Shell」と書かれた領域の上でキーボードの「Ctrl-c」によりプログラムを終了するという方法もあります。なお、Thonnyには「時々Ctrl-cが効かなくなる」という不具合があるようなので、そういうときは「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について

さて、上で紹介した Thonny Python IDEを用いるということは、Python バージョン 3 を用いることを意味します。本書で利用法を解説していた Python バージョン 2 は 2020年1月1日にサポートが切れました。そのため、2020年5月より本ページでは Python3 用のインスト―ルコマンドのみを掲載することにしました。本ページに記したコマンドのコピー&貼り付けにより本書の演習を行うと、自然と Python 3 で演習を行うことになります。

なお、コマンドによりプログラムを実行する場合は、Python 2とPython 3および対応コマンドが下記のように異なりますので参考にしてください。

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

以下、本ページでは Python3 用のコマンドでインストール&実行を行う方法を解説していきます。

p.70:NOOBS 2.8.2 (Raspbian 2018-06-27) 以降でのIDLEの通常起動について

NOOBS 2.8.2 (Raspbian 2018-06-27) から、デスクトップのメニューから開発環境IDLEの項目が削除されています。そのため、その代替としてThonny Python IDEを用いる方法を上で解説しました。通常はこのThonny Python IDEを用いてください。
ここでは、それでも敢えてIDLEを用いたいという方のためにその方法を解説します。

ターミナル LXTerminal を起動し、下記の 2 つのコマンドを順に実行してください。Python 3 用のIDLEがインストールされます。
sudo apt update
sudo apt install idle-python3.7
Python 3 用のIDLEを起動するためには、ターミナル上で
idle-python3.7 &
を実行してください。

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

本ページではPythonプログラムの実行コマンドも掲載しますが、本書で記したように、「TAB」キーによる補完機能をマスターすることをお勧めします。 Python3での実行コマンドはこちらです。
python3 ml-03-01-version.py
なお、Python3 でプログラムを実行すると下記のような警告が現れます。
/usr/lib/python3/dist-packages/sklearn/externals/joblib.py:1: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses
  import imp
この警告はプログラムに対してではなく、プログラムが用いているライブラリ内の処理に対して出力されています。ライブラリの今後のバージョンアップに伴い消えることが期待される警告です。そのためこのような警告(DeprecationWarning や FutureWarning など)は気にする必要はありません。

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つずつ順番に実行してください。2020年5月より Python3 用のコマンドのみを記しています。
sudo apt update
sudo apt install python3-pil.imagetk

8章

p.243, Bullseye (Raspberry Pi OS 2021-10-30 以降) でのカメラの利用について

Raspberry Pi OS 2021-10-30 からはじまったバージョン Bullseye ではカメラモジュールの利用方法に大きな変更が加えられました。 そのため、Bullseye にてカメラを利用するには、以下の方法で「Legacy Camera」のサポートを有効にする必要があります。

カメラモジュールを利用する場合、Raspberry Pi OS 2021-10-30 をお使いのかたは、まず以下の2つのコマンドを順に実行することで OS を最新にする必要があります。
sudo apt update
sudo apt dist-upgrade
必要に応じてキーボードで「y」をタイプして「Enter」キーを押すことで、アップデートが進行します。終わったら、Raspberry Pi を再起動してください。

その後、ターミナルを開いて以下の手順に従うことで、raspi-config により Legacy Camera を有効にします。
  1. 「 sudo raspi-config 」を実行することで raspi-config を起動
  2. キーボードの「↓」キーを2回押し、「Interface Options」を選択してから「Enter」キーを押す
  3. 「I1 Legacy Camera Enable/Disable」があらかじめ選択されているので、「Enter」キーを押す
  4. 「Would you like to enable legacy camera support?」と聞かれるので「←」を一回押すことで「はい」を選択し、「Enter」キーを押す
  5. 「非推奨 (deprecated) であり将来サポートされない」という趣旨のことを言われるが、「了解」が選択された状態で「Enter」キーを押す
  6. raspi-configを起動した状態の画面に戻るので、「TAB」キーを二回クリックし、「Finish」を選択した状態で「Enter」キーを押す
  7. 再起動を促されるので、「はい」が選択された状態で「Enter」キーを押す
以上で、カメラモジュールを利用した演習を実行できるようになります。

なお、2022年2月からは、Bullseye の 64-bit 版も正式にインストール可能になっていますが、64-bit 版 OS では本書のカメラモジュールを用いる演習の準備が面倒です。32-bit 版 OS を利用することを推奨します。 詳細は、以下のようになります。
32-bit 版 BullseyeLegacy Cameraモードをオンにした上で、本書付属のサンプルファイルを用いる
64-bit 版 BullseyeLegacy Cameraモードをオンにした上で、「本書の演習をウェブカメラで実行する方法」で配布しているサンプルファイルを利用する


p.243 カメラについて

公式カメラモジュールをまだ購入しておらず、市販のウェブカメラをお持ちだという方は、まず「本書の演習をウェブカメラで実行する方法」を試してみるのも良いでしょう。

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

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

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


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

p.248 OpenCVのインストール

なお、ここではOpenCVのインストール方法について下記の3通りの方法を解説します。
  • Python3でOpenCVを利用する場合:2019年6月以降の OS (Raspbian Buster 以降)
  • Python3でOpenCVを利用する場合:2019年4月までの OS (Raspbian Stretch まで)

p.248 Python3でOpenCVを利用する場合:2019年6月以降の OS (Raspbian Buster 以降)

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

p.248 Python3でOpenCVを利用する場合:2019年4月までの OS (Raspbian Stretch まで)

古いRaspbian Stretchをお使いの場合は 3 つの命令がありますので、1 つずつ順番に実行してください。
sudo apt update
sudo apt install libatlas-base-dev libjasper-dev libqtgui4 python3-pyqt5 libqt4-test
sudo pip3 install opencv-python==4.5.1.48

p.250 OpenCVを用いたプログラムの実行時のエラー

NOOBS 3.1.1 (Raspbian 2019-06-20) または NOOBS 3.2.0 (Raspbian 2019-07-10) でインストールした Raspbian Busterをお使いの場合、OpenCV を用いたプログラムを実行すると下記のエラーが出ます。
ImportError: /usr/lib/arm-linux-gnueabihf/neon/vfp/libavcodec.so.58: undefined symbol: bcm_host_is_fkms_active
これは、Raspbian の kernel のバージョンが最新の OpenCV が期待するものより古くなっていることが原因です。

解決方法は以下の2通りの方法どちらかです。
  1. 「sudo apt update」、「sudo apt dist-upgrade」で kernel を最新にする
  2. microSDカードをフォーマットして最新のRaspbianをインストールしなおす
1. の方が簡単ですのでまずこちらを試し、それで問題が出た場合は 2. を試すのが良いでしょう。

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

Python3で演習を実行するためのコマンドはこちらです。2020年5月より Python3 用のコマンドのみを記しています。
python3 ml-08-01-cameracheck.py

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

Python3で演習を実行するためのコマンドはこちらです。
python3 ml-08-02-binary.py

p.257 ml-08-02-binary.pyが手の形を反映していない場合

ml-08-02-binary.pyが手の形を反映していない場合、p.258「手の形が綺麗に切り出せないときの対処法」に基づいてプログラム中のパラメータhmin、hmax、sminの値を調整しなければなりません。 著者の感覚として、様々なツールが更新されるにと伴い、執筆時に比べて適切なパラメータの値が変化しているような印象があります。

典型的には、下記のパターンでの値の変更で改善されるケースが多いでしょう。書籍p.262の図8-7に基づいて述べます。
  1. 図8-7のs_binaryが手の形を含んでいる場合
    この場合、hmaxの調整のみで良いでしょう。例えば手の形が欠けている場合、hmaxをデフォルトの30から35などのように大きくすれば、手の欠けが小さくなります。
  2. 図8-7のs_binaryが手の形を全く反映していない場合
    この場合、S成分による二値化は smin =0 とすることで無効にした方が良いでしょう。その上で hmax の調整を行い、手の形が再現されるようにします。
  3. 図8-7のs_binaryがほぼ手の形を再現している場合
    この場合、hmax=180としてH成分による認識を無効にし、S成分のみの認識してみると綺麗に手の形が現れることがあります。
なお、このようなhmin、hmax、sminの調整は、手の形の認識を含むプログラム(じゃんけんプログラムも含む)の全てで行う必要がありますのでご注意ください。

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

leafpad ml-08-02-binary.py
なお、NOOBS 3.2.1 (Raspbian 2019-09-26) 以降ではテキストエディタとしてleafpadではなくmousepadを用います。
mousepad ml-08-02-binary.py

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

Python3で演習を実行するためのコマンドはこちらです。
python3 ml-08-03-learn.py result.pkl

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

Python3で演習を実行するためのコマンドはこちらです。
python3 ml-08-04-recognition.py result.pkl

9章

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

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

p.295 音声の出力先をピンジャックにする方法 (2020-12-02 以降の Raspberry Pi OS の場合)

2020-12-02 以降の Raspberry Pi OS では、音声の出力先をピンジャックにする方法が変わっております。 もし、デフォルトでピンジャックから音が出ていない場合、以下の指示に従ってください。なお、raspi-config コマンドを実行中は、キーボードの Esc キーが「戻る」に対応しますので、困ったら Esc キーを何度か押してみると良いでしょう。
  1. ターミナルで「 sudo raspi-config 」コマンドを実行し、設定画面を開く
  2. キーボードの「Enter」キーを押し、「1 System Options」に入る
  3. キーボードの「↓」キーを一回押し、「S2 Audio」にフォーカスを合わせる
  4. キーボードの「Enter」キーを押し、「S2 Audio」の設定画面に入る
  5. キーボードの「↓」キーを一回押し、「1 Headphones」にフォーカスを合わせる
  6. キーボードの「Enter」キーを押し、「1 Headphones」を選択する
  7. キーボードの「TAB」キー二回を押し、「Finish」にフォーカスを合わせる
  8. キーボードの「Enter」キーを押し、raspi-config の設定画面を終了する

p.295 音声の出力先をピンジャックにするためのコマンド (2020-02-14 までの Raspbian の場合)

amixer cset numid=3 1

p.295 2020-05-27 および 2020-08-20 の Raspberry Pi OS でイヤフォンジャックを使う

2020-05-27 および 2020-08-20 の Raspberry Pi OS では、上で2通り記した音声出力の選択ができません。 HDMIケーブル経由で音声を出力する方には問題がありませんが、Raspberry Pi 上のピンジャックから音を出力したいが音が出ないという場合は、以下の指示に従ってください。 ただし、面倒な作業ですし、今後のためにこの機会にOSを最新のものにすることをお勧めします。

ml-09-01-janken.py の場合、ファイルを mousepad や Thonny などで開き、プログラム内の311行目の「args = ['mpg321', '-q', 'ml-sound/jankenpon.mp3']」という命令を以下に変更し、ファイルを上書き保存した上で実行してください。イヤフォンジャックから音声が出るようになります。
args = ['mpg321', '-q', '-a', 'hw:1,0', 'ml-sound/jankenpon.mp3']

同様に、ml-09-02-janken-shorten.py の場合もプログラムを一部変更する必要があります。こちらのファイルの場合は変更点は二カ所あります。まず、プログラム内の313行目の「args = ['mpg321', '-q', 'ml-sound/jankenpon.mp3']」という命令を以下に変更し
args = ['mpg321', '-q', '-a', 'hw:1,0', 'ml-sound/jankenpon.mp3']
さらに、317行目の「args = ['mpg321', '-q', 'ml-sound/pon.mp3']」という命令を以下に変更してください。以上の変更が終わったらファイルを上書き保存した上で実行してください。イヤフォンジャックから音声が出るようになります。
args = ['mpg321', '-q', '-a', 'hw:1,0', 'ml-sound/pon.mp3']

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

GUIを用いたじゃんけんシステムです。Python3で演習を実行するためのコマンドはこちらです。
python3 ml-09-01-janken.py result.pkl
このじゃんけんシステムにロボットハンドを追加し、ディスプレイないではなく現実世界でじゃんけん勝負する方法を 「人間の手を予測するじゃんけんシステムにロボットハンドを追加する」に示しましたので、電子工作に興味のある方はご覧ください。

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

GUIを用いたじゃんけんシステムの音声短縮版です。Python3で演習を実行するためのコマンドはこちらです。
python3 ml-09-02-janken-shorten.py result.pkl

10章

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

本書では、kerasと一緒に用いるバックエンドとしてTheanoを用いました。 このバックエンドをGoogleのTensorFlowに変更する方法を下記のページに紹介しましたので、 興味のある方はご覧ください 。結果が変わるわけではありませんし、上級者向けの内容ですので、自信がない方は書籍の通りTheanoの利用で問題ありません。 なお、TensorFlowを導入すると、下記の発展的な内容にもトライできます。本書の演習を終えた後に挑戦してみるのも良いでしょう。

p.308 kerasとtheanoの利用の前に

10章の演習は、本書の3~9章の演習を行った後に行う前提となっています。念のため、3章~9章でインストールしたツールのインストールを一気に行うコマンドをここに記します。

なお、2019年8月よりPython2用のkerasではファイルの読み込みを伴うコマンドを行う際に「Assertion Error」が出て実行に失敗するようになりました。 そのため、2020年5月より本ページでは Python3 用のインスト―ルコマンドのみを掲載することにしています。書籍に記されているのは Python2 用のインスト―ルコマンドですが、本ページの Python3 用のインスト―ルコマンドをご利用ください。上で紹介したように、本ページのコマンドをコピーしてターミナルに貼り付けて実行するのが簡単です。

さて、3から9章までのPython3用のツールをインストールするためのコマンドは下記です。
sudo apt update
sudo apt install python3-sklearn python3-pil.imagetk mpg321
ただし、Python3用OpenCVは、OSのバージョンによりインストールコマンドが異なります。
最新の OS をお使いならば、下記コマンドでPython3用OpenCVをインストールできます。
sudo apt install python3-opencv
Rasbian Stretch までの古い OS をお使いの場合のPython3用OpenCVのインストール法は以下の2つのコマンドです。
sudo apt install libatlas-base-dev libjasper-dev libqtgui4 python3-pyqt5 libqt4-test
sudo pip3 install opencv-python==4.5.1.48
以上のコマンドを実行することで、9章までの演習を終えた状態になります (ただし、カメラを有効にするなどの設定が別途必要になります)。この状態で、以下のkerasとtheanoのインストールに進みます。

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

Python3 で keras や theano を用いる際に必要なツールのインストールコマンドはこちらです。
sudo apt install liblapack-dev libhdf5-dev python3-h5py

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

Python3 で keras や theano を用いるためのインストールコマンドはこちらです。
sudo pip3 install keras==2.3.1 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のネットワーク接続に問題がある場合はその改善を試みてください。
一方、先方のサーバーに問題がある場合、時間をあけてからコマンドを再実行すると問題が解消される場合があります。Raspberry Pi上でpipを用いてツールをインストールする場合、サーバー側の問題なのか、何度もインストールを試みて初めてインストールに成功する、ということが多い印象があります。

p.311 kerasの設定ファイルが .keras/keras.json が生成されない

keras をインストール後、ml-03-01-version.py を実行したにもかかわらず、.keras/keras.json が生成されない、という方は、 keras のバージョン 2.4 以降がインストールされているかもしれません。
keras バージョン 2.4 以降は、TensorFlow バージョン 2 専用となるため、本書で用いる Theano とともに使うことができません。 そのため、下記コマンドを実行し、keras のバージョン 2.3.1 をインストールしてください。
sudo pip3 install keras==2.3.1 

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

leafpad .keras/keras.json
なお、NOOBS 3.2.1 (Raspbian 2019-09-26) 以降ではテキストエディタとしてleafpadではなくmousepadを用います。
mousepad .keras/keras.json
なお、keras.jsonの4行の内容は順番が前後することがありますが、「tensorflow」部を「keras」に書き換えさえすれば順番はそのままで構いません。

10.4 アヤメの分類

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

Python3で演習を実行するためのコマンドはこちらです。学習には時間がかかるので実行することを必ずしもお勧めしません。
python3 ml-10-01-iris-deep-learn.py result-iris.h5
なお、Python3で10章のコマンドを実行すると、DeprecationWariningという警告が沢山あらわれることがありますが、実行には支障がないものばかりですので、無視してかまいません。

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

Python3で演習を実行するためのコマンドはこちらです。
python3 ml-10-02-iris-deep-load.py result-iris.h5
なお、Python3で10章のコマンドを実行すると、DeprecationWariningという警告が沢山あらわれることがありますが、実行には支障がないものばかりですので、無視してかまいません。

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

Python3で演習を実行するためのコマンドはこちらです。
python3 ml-10-02-iris-deep-load.py ml-iris-deep.h5
なお、Python3で10章のコマンドを実行すると、DeprecationWariningという警告が沢山あらわれることがありますが、実行には支障がないものばかりですので、無視してかまいません。

10.6 手書き数字の分類

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

Python3で演習を実行するためのコマンドはこちらです。学習には時間がかかるので実行することを必ずしもお勧めしません。
python3 ml-10-03-digits-cnn-learn.py result-digits.h5
なお、Python3で10章のコマンドを実行すると、DeprecationWariningという警告が沢山あらわれることがありますが、実行には支障がないものばかりですので、無視してかまいません。

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

Python3で演習を実行するためのコマンドはこちらです。正解率を表示するプログラムです。
python3 ml-10-04-digits-cnn-load.py result-digits.h5
なお、Python3で10章のコマンドを実行すると、DeprecationWariningという警告が沢山あらわれることがありますが、実行には支障がないものばかりですので、無視してかまいません。

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

Python3で演習を実行するためのコマンドはこちらです。正解率を表示するプログラムです。
python3 ml-10-04-digits-cnn-load.py ml-digits-cnn.h5
なお、Python3で10章のコマンドを実行すると、DeprecationWariningという警告が沢山あらわれることがありますが、実行には支障がないものばかりですので、無視してかまいません。

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

Python3で演習を実行するためのコマンドはこちらです。マウスで描いた数字を分類するプログラムです。
python3 ml-10-05-digits-cnn-gui.py result-digits.h5
なお、Python3で10章のコマンドを実行すると、DeprecationWariningという警告が沢山あらわれることがありますが、実行には支障がないものばかりですので、無視してかまいません。

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

Python3で演習を実行するためのコマンドはこちらです。マウスで描いた数字を分類するプログラムです。
python3 ml-10-05-digits-cnn-gui.py ml-digits-cnn.h5
なお、Python3で10章のコマンドを実行すると、DeprecationWariningという警告が沢山あらわれることがありますが、実行には支障がないものばかりですので、無視してかまいません。

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

Python3で演習を実行するためのコマンドはこちらです。マウスで描いた数字を分類するプログラムです。数字の位置と大きさを補正するバージョンです。
python3 ml-10-06-digits-cnn-gui-mod.py result-digits.h5
なお、Python3で10章のコマンドを実行すると、DeprecationWariningという警告が沢山あらわれることがありますが、実行には支障がないものばかりですので、無視してかまいません。

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

Python3で演習を実行するためのコマンドはこちらです。マウスで描いた数字を分類するプログラムです。数字の位置と大きさを補正するバージョンです。
python3 ml-10-06-digits-cnn-gui-mod.py ml-digits-cnn.h5
なお、Python3で10章のコマンドを実行すると、DeprecationWariningという警告が沢山あらわれることがありますが、実行には支障がないものばかりですので、無視してかまいません。

なお、このプログラムをTensorFlow.jsというライブラリによりブラウザで体験するデモンストレーションを作成してみました。 「手描き数字認識をTensorFlow.jsによりブラウザで実行してみよう」で解説しておりますので、興味のある方はお試しください。

10.6 じゃんけんの手の分類

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

Python3で演習を実行するためのコマンドはこちらです。学習には時間がかかるので実行することを必ずしもお勧めしません。
python3 ml-10-07-hand-cnn-learn.py result-hand.h5
なお、Python3で10章のコマンドを実行すると、DeprecationWariningという警告が沢山あらわれることがありますが、実行には支障がないものばかりですので、無視してかまいません。

一方、このコマンドの実行時に下記のようなAttributeErrorが出る場合、学習用の手の画像が格納されているml-learnディレクトリがプログラムml-10-07-hand-cnn-learn.pyと同じ位置に存在しないためであると考えられます。 これは圧縮されたサンプルファイルを展開すると現れるディレクトリです。ご確認ください。
Using Theano backend.
Epoch 1/500
Traceback (most recent call last):
  File "ml-10-07-hand-cnn-learn.py", line 116, in <module>
    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の実行コマンド(自分で作った学習済ファイルを用いる場合)

Python3で演習を実行するためのコマンドはこちらです。二値化されたカメラ映像と手の分類結果を表示するプログラムです。
python3 ml-10-08-hand-cnn-load.py result-hand.h5
なお、Python3で10章のコマンドを実行すると、DeprecationWariningという警告が沢山あらわれることがありますが、実行には支障がないものばかりですので、無視してかまいません。

二値化された映像が手の形を全く反映していない場合、本ページの「p.257 ml-08-02-binary.pyが手の形を反映していない場合」に基づき、プログラム中(この場合 ml-10-08-hand-cnn-load.py)のパラメータhmin、hmax、sminの値を調整してください。
プログラム中のhmin、hmax、sminの調整はこの後のじゃんけんプログラムでも必要になりますのでご注意ください。

ml-08-02-binary.pyが手の形を反映していない場合、p.258「手の形が綺麗に切り出せないときの対処法」に基づいてプログラム中のパラメータhmin、hmax、sminの値を調整しなければなりません。 著者の感覚として、様々なツールが更新されるにと伴い、執筆時に比べて適切なパラメータの値が変化しているような印象があります。

典型的には、下記のパターンでの値の変更で改善されるケースが多いでしょう。書籍p.262の図8-7に基づいて述べます。
  1. 図8-7のs_binaryが手の形を含んでいる場合
    この場合、hmaxの調整のみで良いでしょう。例えば手の形が欠けている場合、hmaxをデフォルトの30から35などのように大きくすれば、手の欠けが小さくなります。
  2. 図8-7のs_binaryが手の形を全く反映していない場合
    この場合、S成分による二値化は smin =0 とすることで無効にした方が良いでしょう。その上で hmax の調整を行い、手の形が再現されるようにします。
  3. 図8-7のs_binaryがほぼ手の形を再現している場合
    この場合、hmax=180としてH成分による認識を無効にし、S成分のみの認識してみると綺麗に手の形が現れることがあります。
なお、このようなhmin、hmax、sminの調整は、手の形の認識を含むプログラム(じゃんけんプログラムも含む)の全てで行う必要がありますのでご注意ください。

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

Python3で演習を実行するためのコマンドはこちらです。二値化されたカメラ映像と手の分類結果を表示するプログラムです。
python3 ml-10-08-hand-cnn-load.py ml-hand-cnn.h5
なお、Python3で10章のコマンドを実行すると、DeprecationWariningという警告が沢山あらわれることがありますが、実行には支障がないものばかりですので、無視してかまいません。

二値化された映像が手の形を全く反映していない場合、本ページの「p.257 ml-08-02-binary.pyが手の形を反映していない場合」に基づき、プログラム中(この場合 ml-10-08-hand-cnn-load.py)のパラメータhmin、hmax、sminの値を調整してください。
プログラム中のhmin、hmax、sminの調整はこの後のじゃんけんプログラムでも必要になりますのでご注意ください。

p.373:2020-05-27 および 2020-08-20 の Raspberry Pi OS でイヤフォンジャックを使う

2020-05-27 および 2020-08-20 の Raspberry Pi OS では、本ページの「p.295」の項目で記した2通りの音声出力の選択ができません。 HDMIケーブル経由で音声を出力する方には問題がありませんが、Raspberry Pi 上のピンジャックから音を出力したいが音が出ないという場合は、以下の指示に従ってください。 ただし、面倒な作業ですし、今後のためにこの機会にOSを最新のものにすることをお勧めします。

ml-10-09-janken-deep.py の場合、ファイルを mousepad や Thonny などで開き、プログラム内の322行目の「args = ['mpg321', '-q', 'ml-sound/jankenpon.mp3']」という命令を以下に変更し、ファイルを上書き保存した上で実行してください。イヤフォンジャックから音声が出るようになります。
args = ['mpg321', '-q', '-a', 'hw:1,0', 'ml-sound/jankenpon.mp3']

同様に、ml-10-10-janken-deep-shorten.py の場合もプログラムを一部変更する必要があります。こちらのファイルの場合は変更点は二カ所あります。まず、プログラム内の325行目の「args = ['mpg321', '-q', 'ml-sound/jankenpon.mp3']」という命令を以下に変更し
args = ['mpg321', '-q', '-a', 'hw:1,0', 'ml-sound/jankenpon.mp3']
さらに、329行目の「args = ['mpg321', '-q', 'ml-sound/pon.mp3']」という命令を以下に変更してください。以上の変更が終わったらファイルを上書き保存した上で実行してください。イヤフォンジャックから音声が出るようになります。
args = ['mpg321', '-q', '-a', 'hw:1,0', 'ml-sound/pon.mp3']

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

Python3で演習を実行するためのコマンドはこちらです。GUIによるじゃんけんシステムです。
python3 ml-10-09-janken-deep.py result-hand.h5
なお、Python3で10章のコマンドを実行すると、DeprecationWariningという警告が沢山あらわれることがありますが、実行には支障がないものばかりですので、無視してかまいません。

二値化された映像が手の形を全く反映していない場合、本ページの「p.257 ml-08-02-binary.pyが手の形を反映していない場合」に基づき、プログラム中(この場合 ml-10-09-janken-deep.py)のパラメータhmin、hmax、sminの値を調整してください。

さらに、2019年10月時点でデフォルトでインストールされるkeras 2.3.0を用いると、じゃんけんシステムのプログラムを実行すると、python3版であっても
AttributeError: '_thread._local' object has no attribute 'value'
というエラーが出て実行に失敗します。2019年12月時点でのkeras 2.3.1では直っていましたので下記のコマンドでkerasのバージョンを指定するするのが良いでしょう。
sudo pip3 install keras==2.3.1 theano

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

Python3で演習を実行するためのコマンドはこちらです。GUIによるじゃんけんシステムです。
python3 ml-10-09-janken-deep.py ml-hand-cnn.h5
Python3で10章のコマンドを実行すると、DeprecationWariningという警告が沢山あらわれることがありますが、実行には支障がないものばかりですので、無視してかまいません。

二値化された映像が手の形を全く反映していない場合、本ページの「p.257 ml-08-02-binary.pyが手の形を反映していない場合」に基づき、プログラム中(この場合 ml-10-09-janken-deep.py)のパラメータhmin、hmax、sminの値を調整してください。

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

さらに、2019年10月時点でデフォルトでインストールされるkeras 2.3.0を用いると、じゃんけんシステムのプログラムを実行すると、python3版であっても
AttributeError: '_thread._local' object has no attribute 'value'
というエラーが出て実行に失敗します。2019年12月時点でのkeras 2.3.1では直っていましたので下記のコマンドでkerasのバージョンを指定するするのが良いでしょう。
sudo pip3 install keras==2.3.1 theano
なお、このじゃんけんシステムにロボットハンドを追加し、ディスプレイないではなく現実世界でじゃんけん勝負する方法を 「人間の手を予測するじゃんけんシステムにロボットハンドを追加する」に示しましたので、電子工作に興味のある方はご覧ください。

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

Python3で演習を実行するためのコマンドはこちらです。GUIによるじゃんけんシステムの音声短縮版です。
python3 ml-10-10-janken-deep-shorten.py result-hand.h5
Python3で10章のコマンドを実行すると、DeprecationWariningという警告が沢山あらわれることがありますが、実行には支障がないものばかりですので、無視してかまいません。

二値化された映像が手の形を全く反映していない場合、本ページの「p.257 ml-08-02-binary.pyが手の形を反映していない場合」に基づき、プログラム中(この場合 ml-10-10-janken-deep-shorten.py)のパラメータhmin、hmax、sminの値を調整してください。

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

Python3で演習を実行するためのコマンドはこちらです。GUIによるじゃんけんシステムの音声短縮版です。
python3 ml-10-10-janken-deep-shorten.py ml-hand-cnn.h5
Python3で10章のコマンドを実行すると、DeprecationWariningという警告が沢山あらわれることがありますが、実行には支障がないものばかりですので、無視してかまいません。

二値化された映像が手の形を全く反映していない場合、本ページの「p.257 ml-08-02-binary.pyが手の形を反映していない場合」に基づき、プログラム中(この場合 ml-10-10-janken-deep-shorten.py)のパラメータhmin、hmax、sminの値を調整してください。