2021年の活動記録(LINE関連)

イベント主催やプロトタイプ制作の講師を中心に、LINEプロダクトを利用したのプロトタイプの開発しやすさや開発の楽しさを発信していきます。

SNS

講師業

  • ものづくり医療センター 0期講師
  • プロトアウトスタジオ 5期講師
    • LINE Bot制作に関する授業を実施。
      • 内容例
        • Messaging API
        • リッチメニュー
        • 天気予報APIなどのWeb APIとMessaging APIを組み合わせたプロトタイプの作成方法
        • ハードウェアとMessaging APIを組み合わせたプロトタイプの作成方法

イベント

記事

Azure Percept DKを触ってみる③ - サンプルモデルデプロイ編

はじめに

前記事でカメラモジュールの動作確認が完了しました。 今回はAzure Percept Studioで事前に学習が完了しているサンプルモデルをAzure Percept DKにデプロイしてみようと思います。

こちらを参考に進めていきます。

docs.microsoft.com

サンプルモデルをデプロイする

Azure Percept Studioを開き、サイドメニューのデバイスを選択します。

https://portal.azure.com/#blade/AzureEdgeDevices/Main/overview

https://i.gyazo.com/7e4443c1e60048546dc072641d1df883.png

セットアップしたデバイスを選択します。

https://i.gyazo.com/a29fb25b3b511957b66c3105552053c5.png

Viewsタブを開き、サンプルモデルのデプロイを選択します。

https://i.gyazo.com/4318c33a29e6d67ed35fefff7691befb.png

https://i.gyazo.com/10f1eabfd049e523d5f7577f58221a91.png

好きなモデルを選択し、デバイスへのデプロイをクリックします。

  • 一般的なオブジェクトの検出
    • 人やペン、車など一般的なオブジェクトの検出ができます。
    • デフォルトでデプロイされているモデルはこれっぽい。
  • 人物検出
    • 人を検出します。
  • 棚の製品
    • お店の商品管理などで利用されるものと思われます。
  • 車検出
    • 車を検出します。

今回は人物検出を行ってみます。

デプロイは数秒〜数十秒で完了します。
完了するとポップアップが表示されるので、ストリームを表示します。

https://i.gyazo.com/45acafa65ca4fb4a1cbf53d253d36c37.png

https://i.gyazo.com/f262ec834a7e40999ff42efbbb7f6a9e.png

人の検出ができました。

https://i.gyazo.com/dfc664f6ae1a7b1ba99a5d87d425f2e8.gif

Azure Percept DKを触ってみる② - ビデオストリーム&物体検出編

はじめに

前記事でセットアップが終わったので、今回はAzure Percept DKのカメラモジュールを使ってビデオストリーミングを行おうと思います。

下記を参考に進めていきます。

docs.microsoft.com

ビデオストリームを表示する

まずは、カメラがちゃんと映るか動作確認しようと思います。
Azure Percept Studioのデバイスストリームを利用して、リアルタイムに物体検出してみます。

Azure Percept Studioを開きます。

https://portal.azure.com/#blade/AzureEdgeDevices/Main/overview

https://i.gyazo.com/05a35ccb6455ced168836a12e77a9c18.png

前記事で作成したデバイスを選択します。

https://i.gyazo.com/297e4502f7b213dd27bec4ae346531b8.png

https://i.gyazo.com/c274c96064ce63acd563933f5872385e.png

Viewsタブを開き、デバイス ストリームの表示 > ストリームを表示しますを選択します。

https://i.gyazo.com/2cf9de39596fd81be3c7ebaab1b156b2.png

https://i.gyazo.com/38aad92f06c6f732bbb35ff03b003657.png

右上にポップアップが表示されるので、ストリームを表示しますを選択します。
すると、物体検出が動き始めます。

とりあえず手元にあったオリーブオイルを映してみました。

https://i.gyazo.com/acc31f73cb52fafae78e49baf07f82bb.gif

視覚モジュールからIPを取得できませんとエラーが表示されましたが、Type-Cのケーブルを差し直すことで解消されました。

https://i.gyazo.com/187476942fd87c248cb020979c781a50.png

Azure Percept DKを触ってみる① - セットアップ編

Azure Percept DK

2021年3月にAzure Perceptが発表されました。

docs.microsoft.com

Azure Percept は、IoT と AI をエッジで使用してビジネス変革を促進するために設計されたハードウェア、ソフトウェア、およびサービスのファミリです。

とのことです。

まずは

  • Azure Percept DK
    • エッジAI開発キット
      • Azure Percept DK キャリア ボード
        • 本体。Raspberry Piのような小型のコンピュータが搭載されている。
      • Azure Percept Vision システム オン モジュール
        • カメラモジュール。キャリアボードに接続して使用する。
    • また、アクセサリとして音声を扱うためのAzure Percept Audioも合わせて販売されている。
  • Azure Percept Studio
    • エッジAIモデルとソリューションを作成できます。

を抑えておけば良さそうです。

本記事では、Azure Percept DKのセットアップを進めていきます。

セットアップ手順はこちら。

docs.microsoft.com

セットアップ中は、Azure Percept DKのWi-Fiアクセス ポイントに接続して作業を行うので、一時的にインターネットに接続できなくなります。
あらかじめドキュメントを開いておく、スマホで表示するなどで対応しましょう。

WiFiに接続する

Azure Percept DK キャリア ボードに電源を接続すると、Wi-Fi アクセス ポイントが見つかるので接続します。

https://i.gyazo.com/4da2cd9b03c0c71fb7ed290c752a8f22.png

  • SSIDscz-またはapd-から始まります。
  • パスワードは付属のウェルカム カードに記載されています。

https://i.gyazo.com/b542a90f24830d2af6b84e7e169dcc5c.jpg

セットアップエクスペリエンス

http://10.1.1.1Chromeなど普段お使いのブラウザで開きます。

Azure Percept DKにWiFi接続すると、自動でセットアップエクスペリエンスが起動しますが、後ほどAzureにサインインするところでうまく進みませんでした。
普段お使いのブラウザで開き直すのがおすすめです。

手順を進めていきます。

https://i.gyazo.com/e6716f718ef69b4dfa58a58158f82b9f.png

https://i.gyazo.com/216f65a1cf524c04282d4f7b2e1e1021.png

自宅の無線LANルーターを選択して接続します。

https://i.gyazo.com/1c75f6b5bad5361621b9d36a6c28adba.png

https://i.gyazo.com/1584cd7573363318db1c0c8c7011ced4.png

https://i.gyazo.com/cdb04654606f05e525d695087cfc4562.png

利用規約に同意します。 スクロールするとチェックボックスがあるので、チェックするとNextボタンをクリックできるようになります。

https://i.gyazo.com/e259f86a93faea7ce252a211c4e68a57.png

ユーザーを作成します。 パスワードの条件は12桁以上、英数字混合です。(たしか)

https://i.gyazo.com/08ac6d67721a01ad75811b411bfdfda8.png

IoT HubにPercept DKを登録します。 選択肢は2つあります。

  • Setup as a new device ←今回はこちらで進めます。
    • とりあえずPercept DKを触ってみたい方は、こちらがおすすめです。
    • セットアップエクスペリエンスに沿って作業すれば、IoT Hubに登録してくれます。
  • Connect to an existing device
    • IoT Hubで作成済みのIoTデバイスにPercept DKを紐付けたい場合は、こちらを選択します。
    • 自身で接続文字列を取得する必要があります。

ということで、Setup as a new deviceを選択します。

https://i.gyazo.com/d70be852b0a04b3342f13204d0ea36f2.png

新しいタブが開くので、Azureにサインインします。

画面に表示されているコードをコピーしておきます。

https://i.gyazo.com/0a636648222267fd1d6650d1b60e1781.png

コードをペーストします。

https://i.gyazo.com/679b993ad414504d66f551227de18a34.png

https://i.gyazo.com/f1ddf09141c114d228224edb6fd89060.png

サインインできたらタブを閉じてOKです。

https://i.gyazo.com/265a250255f08eb3b13379e8f55137e5.png

Percept DKを割り当てるIoT Hubを選択 or 生成します。

今回は時間短縮のため、作成済みのIoT Hubのインスタンスを選択しました。

https://i.gyazo.com/384cca471319035ecd983ff95f4f83af.png

IoTエッジデバイス名を入力します。

名前は任意です。

https://i.gyazo.com/bd1f8e4ddb30f6988e0b08619b0396ef.png

セットアップ完了まであと少し...

https://i.gyazo.com/2ef6e6733cc9733b7e12e0c66466e463.png

完了しました!

https://i.gyazo.com/1fedd6c3ea5f0d55df10581941e642c6.png

Continue to the Azure Percept Studioをクリックすると、サンプルアプリケーションを動かしたりできます。

まとめ

セットアップエクスペリエンスに沿って進めて、問題なくセットアップを完了させられました。
セットアップはハマりやすいのでわかりやすいのはありがたいですね。

次回はAzure Percept Studioを触っていこうと思います。

Raspberry Pi ImagerでSDカードをフォーマットする方法

はじめに

今までRaspberry Pi用のmicro SDカードをフォーマットするのにSD Card Formatterを利用していましたが、Raspberry Pi Imagerでもフォーマットできることがわかったので手順をメモします。

Raspberry Pi Imagerをインストールする

www.raspberrypi.org

公式サイトからRaspberry Pi Imagerをダウンロード&インストールします。

SDカードをフォーマットする

Raspberry Pi Imagerを起動し、Operating System → Eraseを選択します。

Image from Gyazo

Image from Gyazo

StorageはフォーマットしたSDカードのドライブを選択します。

※選択したドライブの中身がすべて消去されてしまうので、間違えないように注意!

Image from Gyazo

Image from Gyazo

最後にWRITEをクリックします。
選択したドライブの中身を消去する確認ダイアログが出てくるので、問題なければYESをクリックします。

Image from Gyazo

Image from Gyazo

数秒~数分でフォーマットが終わります。

Image from Gyazo

まとめ

Raspberry Pi Imagerを使ったSDカードのフォーマット手順について記載しました。

他のアプリを使わずに簡単にフォーマットができるようになったので、OSの焼き直しもスムーズに行えるようになりますね!

ラズパイとOpenCVで顔認証するメモ

Image from Gyazo

はじめに

こちらの記事を参考に、Raspberry PiOpen CVで顔認証を行う手順のメモです。

用意したもの

  • Raspberry Pi 4 Computer Model B 8GB RAM
  • Raspberry Pi カメラモジュール V2
  • SDカード 32GB
  • ケース
  • 電源ケーブル (USB Type C)
  • キーボード
  • マウス (なくてもキーボードで操作できます)

ラズパイのセットアップ

SDカードにOSをインストールする

今回はRaspberry Pi Imagerを利用してOSをインストールしていきます。

Raspberry Pi Imagerをダウンロード&インストールする

こちらから最新版をダウンロードします。

Image from Gyazo

ダウンロードが終わったら、Raspberry Pi Imagerをインストールします。

Image from Gyazo

Image from Gyazo

チェックをつけてFinishをクリックすると、Raspberry Pi Imagerが起動します。

Image from Gyazo

スタートメニューからも起動できます。

Image from Gyazo

OSを書き込む

Raspberry Pi Imagerを使えば、3ステップでOSを書き込むことができます。

まずはラズパイにインストールするOSを選択します。
今回はRaspberry Pi OS (32-bit)を選択しました。

Image from Gyazo

Image from Gyazo

他にもUbuntuKodiなども簡単にインストールできるようです。

Image from Gyazo

続いて、書き込み対象のSDカードを選択します。

Image from Gyazo

Image from Gyazo

最後にWRITEボタンをクリックして、書き込み処理を開始します。
書き込みには数分~数十分かかります。

Image from Gyazo

OSを書き込む際にSDカードのフォーマットが必要となるので、YESをクリックします。

Image from Gyazo

Image from Gyazo

Image from Gyazo

これでOSの書き込みが終わりました。

Raspberry Piを起動する

SDカードをRaspberry Piに差し込んで、電源を入れます。

Image from Gyazo

無事起動しました!

セキュリティ対策として、以下の記事の手順を一通り行いました。

ラズパイカメラの動作確認をする

OpenCVをインストールする

こちらの記事を参考にOpenCVをインストールしていきます。

詳細は記事をご覧ください。

ここではインストールコマンドだけを抜き出します。

sudo apt update
sudo apt upgrade

sudo apt install -y cmake build-essential pkg-config git
sudo apt install -y libjpeg-dev libtiff-dev libjasper-dev libpng-dev libwebp-dev libopenexr-dev
sudo apt install -y libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libdc1394-22-dev libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev
sudo apt install -y libgtk-3-dev libqtgui4 libqtwebkit4 libqt4-test python3-pyqt5
sudo apt install -y libatlas-base-dev liblapacke-dev gfortran
sudo apt install -y libhdf5-dev libhdf5-103
sudo apt install -y python3-dev python3-pip python3-numpy

sudo cp /etc/dphys-swapfile /etc/dphys-swapfile.org
sudo sed -i -e 's/CONF_SWAPSIZE=100/CONF_SWAPSIZE=2048/g'
sudo systemctl restart dphys-swapfile

git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git

mkdir ~/opencv/build
cd ~/opencv/build

cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
    -D ENABLE_NEON=ON \
    -D ENABLE_VFPV3=ON \
    -D BUILD_TESTS=OFF \
    -D INSTALL_PYTHON_EXAMPLES=OFF \
    -D OPENCV_ENABLE_NONFREE=ON \
    -D CMAKE_SHARED_LINKER_FLAGS=-latomic \
    -D BUILD_EXAMPLES=OFF ..

make -j$(nproc)
sudo make install
sudo ldconfig

上のコマンドをgistにアップしたので、wgetで取得して実行することもできます。

curl https://gist.githubusercontent.com/tmitsuoka0423/b0e87293be375df11032589e465037e6/raw/0e931540c42128757a0e013e3b31a4a97ec55a9b/install-opencv-rpi.sh | bash

pip経由でインストールする方法もありますが、私の環境では失敗してしまいました。
https://pypi.org/project/opencv-contrib-python/

OpenCVがインストールできたか確認します。

PythonのREPLを起動します。

python3

以下、PythonのREPL上で実行します。

import cv2
cv2.__version__

以下のようなにバージョンが出力されればOKです。

Image from Gyazo

カメラの動作確認をする

まずはシンプルに写真と撮ってみる

下記のコマンドを実行します。

sudo raspistill -o image.jpg

こんな感じの写真が撮れました。カメラの接続は大丈夫ですね。

Image from Gyazo

CV2を使ったカメラの動作確認

公開されているサンプルコードを一部改修したものを利用します。

github.com

もとのサンプルコードはこちら。
https://github.com/Mjrovai/OpenCV-Object-Face-Tracking

好きなディレクトリに移動し、クローンします。(ここではホームディレクトリにクローンします)

cd ~
git clone https://github.com/tmitsuoka0423/OpenCV-Object-Face-Tracking

Raspberry Piにカメラを接続します。

(raspi-configのインターフェース設定でカメラを有効にしておいてください。)

先程クローンしたOpenCV-Object-Face-Trackingの中にsimpleCamTest.pyがあるのでこちらを実行します。

cd OpenCV-Object-Face-Tracking
python3 simpleCamTest.py

実行すると以下のように、ウィンドウが2つ立ち上がり、カメラの出力がカラーとグレースケールで表示されます。

Image from Gyazo

かなりピンぼけしていますが、カメラの動作確認ができました。

(オプション)ピントを調節する

ピントの調節には、付属の白いパーツを利用します。

Image from Gyazo

レンズの周辺の凹凸に白いパーツがはまるので、はめた状態で左右に回してピント調節します。

Image from Gyazo

simpleCamTest.pyを実行した状態でピント調節すると、リアルタイムで確認できるのでおすすめです。

エラーが発生する場合

こちらのエラーを修正済みのリポジトリを作成しました。 https://github.com/tmitsuoka0423/OpenCV-Object-Face-Tracking のコードを利用しているか確認してください。

エラー内容

$ python3 simpleCamTest.py 
[ WARN:0] global /home/pi/opencv/modules/videoio/src/cap_gstreamer.cpp (2057) handleMessage OpenCV | GStreamer warning: Embedded video playback halted; module v4l2src0 reported: Failed to allocate required memory.
[ WARN:0] global /home/pi/opencv/modules/videoio/src/cap_gstreamer.cpp (1034) open OpenCV | GStreamer warning: unable to start pipeline
[ WARN:0] global /home/pi/opencv/modules/videoio/src/cap_gstreamer.cpp (597) isPipelinePlaying OpenCV | GStreamer warning: GStreamer: pipeline have not been created
[ WARN:0] global /home/pi/opencv/modules/videoio/src/cap_v4l.cpp (890) open VIDEOIO(V4L2:/dev/video0): can't open camera by index
Traceback (most recent call last):
  File "simpleCamTest.py", line 16, in <module>
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.error: OpenCV(4.5.2-dev) /home/pi/opencv/modules/imgproc/src/color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cvtColor'

teratail.com

こちらの記事を参考に、simpleCamTest.pyに下記の変更を加えると動きました。

cap = cv2.VideoCapture(0)
↓
cap = cv2.VideoCapture(-1)

cv2.VideoCaptureの引数に-1を指定するとカメラを自動指定してくれるそうなのですが、OpenCVのドキュメントを読んでもその記載が見当たりませんでした。(もやもや)

docs.opencv.org

顔検出してみる

こちらのリポジトリを好きなディレクトリにクローンします。

https://github.com/Mjrovai/OpenCV-Face-Recognitionリポジトリのコードを一部変更したものです。

git clone https://github.com/tmitsuoka0423/OpenCV-Face-Recognition.git

リポジトリの中に、OpenCV-Face-Recognition/FaceDetection/faceDetection.pyがあるので実行します。

cd OpenCV-Face-Recognition/FaceDetection
python3 faceDetection.py

するとウィンドウが立ち上がるので、顔を写すと枠が表示されるようになります。

Image from Gyazo

顔認証する

顔認証を行うには、

  1. 顔写真を集める
  2. 顔写真を使って顔認証モデルを作成する
  3. 顔認証モデルを使って推論する

というステップを踏む必要があります。
まずは顔写真を集めていきます。

こちらのリポジトリをクローンしていない方はクローンしておいてください。

git clone https://github.com/tmitsuoka0423/OpenCV-Face-Recognition.git

顔写真を集める

ラズパイに接続したカメラを利用して、顔写真を撮影してくれるプログラムが用意されています。
画像はdatasetフォルダに出力されるようになっているので、先にフォルダを作成しておきます。

cd FacialRecognition
mkdir dataset
python3 01_face_dataset.py

ユーザーIDの入力を求められるので、学習させる人ごとにIDを振りましょう。
(今回は自分と坂本龍馬の顔を学習させるので、自分:0、坂本龍馬:1、という風にしました。)

 enter user id end press <return> ==>  0
 [INFO] Initializing face capture. Look the camera and wait ...

と言われるのでカメラの方を向くと、自動で学習用の顔写真が撮影されていきます。

Image from Gyazo

datasetフォルダに画像が溜まっていき、30枚撮影が終わったタイミングでプログラムが終了します。

撮影が進まない場合は、ピントの調節や光の当たり方を変えると進むようになったので、試してみてください。

顔認証モデルを作成する

画像処理ライブラリpillowを使用するので、先にインストールしておきます。

pip install pillow

学習用のプログラムを実行します。

mkdir trainer
python3 02_face_training.py

学習が終わると以下のように表示され、trainerフォルダにtrainer.ymlが作成されます。

 [INFO] Training faces. It will take a few seconds. Wait ...

 [INFO] 2 faces trained. Exiting Program

Image from Gyazo

顔認証する

認証結果にラベルを表示させるため、03_face_recognition.py26行目にあるnamesを修正します。
顔写真を撮影したときのIDが配列のインデックスになるように、ラベルを設定します。
(ID=0→配列の0番目:mitsuoka、ID=1→配列の1番目:ryoma)

names = ['None', 'Marcelo', 'Paula', 'Ilza', 'Z', 'W'] 
↓
names = ['mitsuoka', 'ryoma']

変更できたら、プログラムを実行します。

python3 03_face_recognition.py

するとカメラウィンドウが立ち上がり、顔が写ると枠が表示され、ラベルと顔の一致度が表示されました!

Image from Gyazo

まとめ

Raspberry PiOpenCVを使った顔認証のチュートリアルを実施し、手順をメモしました。
3ステップで顔認証システムのプロトタイプが作れるのはとても良いですね。

光の当たり方や写る角度によって顔認証されないので、学習データの集め方に工夫する余地がありそうです。

参考サイト

日本語でざっくり概要を掴みたい方におすすめ ai-coordinator.jp

英語。解説してるおじさんが良い。 www.instructables.com

2021年の活動記録

SNS

イベント

記事