はじめての電子工作超入門

第3回 ラズパイでAIカメラを自作しよう!NTT docomoのAPIを使って、画像認識カメラを作る

こんにちは、ヨシケンです!
ラズパイを使ったデバイス作りの第3回になりましたが、いよいよ今回から高度なAPIなどを導入して、カメラをスマートなものにしていきましょう。
ハードウェアの設定、ボタン、ウェブからの操作などは、第1回第2回の記事を見て、準備しておいて下さいね。

NTT docomoの画像APIを使って、風景や料理を認識する

それでは今回は、カメラで写真を撮って、そこに何が映っているかを解析するようにして行きたいと思います。
画像認識は、自分でモデルデータやディープラーニングを駆使する方法もありますが、既に各社から高機能で便利なAPIが出ていますので、今回はそれを利用していきます。
画像APIの中でも様々なものがありますが、登録のみで無料で使え、日本語にも対応したNTT docomoのAPIを使う事にします。

この図のように、写真の中に写っている料理が何なのかを、APIを適用するだけで識別する事ができます。
写真の中に写っている料理が何なのかを、APIを適用するだけで識別する事ができます

今回の記事で必要なもの一覧

Raspberry Pi 3 Model B

パイ・カメラ

今回の記事の流れ

1.docomo APIの登録、導入
2.画像認識APIでカテゴリ認識を使う
3.Pythonで画像解析プログラムを作る
4.まとめ

 

1.docomo APIの登録、導入

撮った画像から、そこに何が写っているのかを認識するのは、ちょっと高度で難しそうに思えるかもしれません。ただNTT docomoが、スマホや、しゃべってコンシェルなどのこれまでの実績、データの蓄積を生かし、外部からでも使用できるdocomo APIを公開してくれています。
登録さえすれば、6ヶ月間無料で使用する事ができますので(追加登録により延長も可能)、この機会に是非登録をしてみて下さい。

docomo APIの使用開始

docomo APIを使い始めるには、まずこちらdocomo Developer Supportページにアクセスします。
docomo Developer Supportページ
docomo Developerサイトには、以下のように様々なAPIがあり、登録すればどれも無料で使う事ができます。(一部企業登録などの必要があります。)
様々なAPI
今回はこの中で、「画像認識」APIを使っていきます。「画像認識」のリンクを押して、進めて下さい。
画 像認識画面
右上のログイン/新規登録 からアカウントを作成していきます。
新規アカウント登録
メールアドレス、パスワードを設定します。法人か個人かはご自身のステータスにより決めて下さい。今回の画像認識に関しては、個人の登録でも使用することができます。
その後メールアドレスの確認が行われ、ログインする事ができるようになります。最初のアプリ画面で「新規API利用申請へ」を選び、APIを追加します。
法人情報の登録メリット
その後、各種必要な情報を入れていきます。
アプリケーション登録
そしてメインのAPI選択画面になりますが、ここには様々な機能/APIが並んでいます。興味のある機能を選んで下さい。今回は画像系の「画像認識」APIを使います。
画像認識
その後、個人情報などを入力し、最後に申請を押します。
するとほどなく申請が通り、アプリケーション一覧に戻ると、以下のようにAPI Keyなどが付与されます。このAPI Keyは後でAPIを呼び出す時に使用しますので、記録しておいて下さい。
登録アプリケーション一覧

 

2.画像認識APIを使ってカテゴリ認識を行う

ではこのAPIを使って、写真に写っている物の認識をしていきましょう。
詳細なドキュメントはこちらの機能別リファレンスに詳しく書かれています。その中でもまず「カテゴリ認識」を使っていきます。
プログラムを書く前に、まずサンプル・コマンドから、このカテゴリ認識機能を試してみましょう。
cURLコマンドサンプル
コマンドのimageパラメータに、写真のファイル名を設定します。modelNameには以下のようなカテゴリがあり、認識したいものに合わせてmodelName値を指定してください。
カテゴリ認識
APIKEYには、もちろん先ほど取得したAPI Keyを入れます。
まずmodelでfoodを選び、このような料理の写真を認識させてみましょう。
料理の写真

そうすると、グラタンの可能性0.951…(95%)、などと出てきました。これは自宅で作ったポテトグラタンで、見かけも悪かったのですが、見事当ててくれて、少しホッとしました。
それ以外のmodelでは、scene(風景)やfashion_type(ファッションの種類)、landmark(観光名所)などが選べます。

 
flowerを指定して、花の写真を使うと、このような結果になりました。
花の写真

結果は、一番目に「ユリ」の確率98%と出ましたが、これってポインセチアですよね。。惜しい!兎にも角にも、たくさんの花の候補を挙げてくれました。

 

3.Pythonで画像解析プログラムを作る

それではラズパイでPythonを使って、解析結果を出力させるプログラムを作ります。

Pythonで画像を扱うには、OpenCV (Computer Vision)というオープンソースの画像ライブラリを使うのが一般的です。ラズパイに以下のコマンドでOpenCVをインストールしておいて下さい。

 

sudo apt-get install libopencv-dev
sudo apt-get install python-opencv

このOpenCVを使って、Pythonプログラムを書いていきます。
先ほどのカテゴリ認識APIのurlに、パラメータに指定されたイメージファイルとモデルを適用させます。
ここでは確からしさ(score)が70%以上であれば、その物を認識できたとして、コマンドラインに出力しています。docomo_keyにはご自身のAPI Keyを設定して下さいね。
以下がそのサンプル・プログラムですが、画像解析に関わる部分は、黄色でハイライトしています。

[category_camera.py]

それではこのプログラムを実行してみましょう。
先ほどの料理や花の写真をパラメータの -imageに、また–modelにfoodやflowerを指定して、流してみます。

python category_camera.py –image /home/pi/web/image/image.jpg –model food
1 food detected. グラタン(95.1%)


python category_camera.py –image /home/pi/web/image/images/n1.jpg –model flower
1 flower detected. ユリ(98.8%)

プログラムからでも、同様の結果が出力されましたね。
またmodelにsceneを適用して、風景写真を読み込ませてみます。
風景写真

撮られた夕日の画像に、「夜景82.8%」と出ていますが、まあまあの結果が出ました。
画像解析APIをPythonプログラムとしても、動くことが確認できました。
今後は、このプログラムに機能を順次追加し、どんどんできる事を増やしていきたいと思います。

 

4.まとめ

今回は、ラズパイで撮った写真を解析するために、NTT docomo APIを導入しました。
これまで、写真が撮るだけだったものが、その写真に何が写っているのかを自動で判別する画像解析APIを付け加えました。
最低限のプログラミングで、写真に写ったものをおおよその精度で検出してくれるのが、こんなに簡単とは少し驚きですね。カテゴリ認識には、食べ物や風景、花だけでなく、ファッションや毒キノコなど、面白いものがありますので、色々試してみて下さい。

今回の最終的なサンプル・プログラムはこちらにも保存されています。[category_camera.py]

さて次回は、音声系APIを使い、撮った画像に何が写っているのか、しゃべってお知らせするような面白いカメラにしたいと思います。
お楽しみに!

電子工作マニュアル Vol.4
ヨシケン(吉田 顕一)

普通の会社に勤めるサラリーマンですが、モノ作りが好きな週末メイカーで、電子書籍MESHBOOKを出したり、ブログを書いたりしています!

http://blog.ktrips.net