Raspberry Pi・Arduino・電子工作

2022年12月16日 (金)

「DXに挑む!はじめの一歩 ~デジタルリテラシーを身につけよう~」にて登壇

身バレしちゃうので、こっそり?紹介。

昨日、こんなセミナーが行われました。

「DXに挑む!はじめの一歩 ~デジタルリテラシーを身につけよう~」セミナーを開催します|中部経済産業局

で、実はここで登壇しておりました。はい。

二人の内、もちろん、下の方です。

詳しくは書きませんが、他の方々が経営層向けの内容だったのに対し、こちらはどちらかというとボトムアップ的な話だったので、正直大丈夫かと心配になりました。が、意外と好評でしたね。

ちなみに、話の前座に出したのは、この記事の内容。

TensorFlowで「松本城」にすり寄ってくる自動運転カー作ってみた: EeePCの軌跡

私と機械学習の話として、切っても切れないエピソードなので。

会場には数十人、後日配信されるYouTubeにもかなりの人数が登録されていると聞きます。

つまり、デジタルというキーワードに、悩みを持たれている会社や団体が多いということは痛感します。

一方で、経済産業省、厚生労働省からも支援策があるという事実も知りまして、まさに国を挙げての課題だということも実感。

そんな方々相手に、こんな話して大丈夫だったんだろうか・・・?

ともかく、このブログでも2016年くらいから機械学習を学ぶ(遊ぶ)ネタを延々と続けてきましたが、それが結実したのかなぁという想いです。

とりあえず、疲れました。今日からまた、頑張ろう。


最短突破 データサイエンティスト検定(リテラシーレベル)公式リファレンスブック

2022年10月18日 (火)

忌まわしき暗黒の使者”G”を紫紺の炎に包みこの世から抹消せよ!的な装置

要するに、レーザーで忌まわしき「G」を狙い撃ちしてくれるという装置の作り方が書かれた論文が公開されているとのことです。

ゴキブリを自動で見つけレーザーで殺す装置 数万円で自作も可能:Innovative Tech - ITmedia NEWS

論文はこちら。

Full article: Selective neutralisation and deterring of cockroaches with laser automated by machine vision

※ 図はちょっと小さめにしております。特に1.の部分が見えにくいよう……

図を見れば分かりますが、要するにJetsonを使ってます。物体認識により「G」らしきものを見つけると、そこそこの出力のレーザー光で狙い撃ちするというもの。

なお、こちらの設計図はオープンソースで公開されているようです。

GitHub - Ildaron/Laser_control: Open-Source Laser for control mosquito, weed, and pest

ただし、家庭内での使用は推奨されていない模様。人の眼球を誤認識して攻撃されても困りますし。

もっとも、日本国内で1.6Wのレーザーを入手すること自体が難しいでしょうね。

代わりに水鉄砲辺りを使うのが無難かもしれません。

そういえば、これに似た装置を以前、作ろうと考えたことがありましたね。

TensorFlowを使って”ゴキブリ”探知機を作ろうとしてみた: EeePCの軌跡

結局は、使い物にならないものができただけでしたが。

この頃はYoloやSSDといった物体検出の手法が一般的ではなかった上に、PCやエッジ端末の能力も低かったですから、今の知識を総動員すれば、論文に頼らず作れそうではあります。

今はどちらかと言えば、Gよりはスズメバチの方が狙い撃ちさせたい昆虫No.1だったりするんですが、なかなか作ろうという情熱が湧きませんね。

Gやその他害虫に悩む方は、ぜひご参考になさってはいかがでしょうか?

超音波 ネズミ 駆除 ネズミ 撃退 ゴキブリ 害虫駆除 超音波 虫除け器 【2個セット/日本語マニュアル付き】 四種類モード 80-120?有効範囲 80db ネズミ/ゴキブリ/蚊/虫/アリ/ハエ/ノミ/クモ/ハチ/コウモリなどに対応 省エネ 静音無毒 子供やペットに安心

2022年9月 4日 (日)

Raspberry PiでUSBマイクから連続録音させる

表題の通りです。Raspberry Piで録音させます。

とある仕事で、環境音を拾う必要性が出たため、一番手ごろなRaspberry Piを使おうと思った次第。

このため、

1.Raspberry Piを起動したら、録音開始

2.ある一定時間ごとのファイルを作っては、次々に保存していく

という、この2つの機能を有することが条件です。

1.については、/etc/rc.local あたりをいじって自動実行させればいいですが、2.についてはどうすればいいの?

と思って調べてみたら、思いの外、簡単でした。

ということで、手順を書いていきます。

と、その前に。

Img_2265

こういうものを買っておきました。USB接続のマイクです。なんと700円ほど。

Raspberry Piには、マイクがないですからね。USBで実装するのがもっともお手軽な方法。

にしてもこのパッケージ、どこかで見たような……妙に既視感があるので、過去に同じものを買ってる可能性があります。

Img_2268

で、こいつをシンプルに、USBポートにぶっ刺して起動します。

さて、録音する方法にもいろいろとあるんですが、一番手っ取り早いのは「arecord」というコマンドを使う、という方法。

今どきのRaspberry Pi OSには元々から入ってるみたいです。

まず、Raspberry Piにて、

> arecord -L

と入力。すると、

Raspi_mic_01

こんな感じの画面がずらずらっと出てきます。こいつの中で、最後の赤線の部分の名前を使います。

で、続いて、

> arecord --device "plughw:CARD=Device,DEV=0" --channels 1 --format S16_LE --rate 22050 --max-file-time 10 --use-strftime "%Y%m%d/%Y%m%d_%H%M%S_%v.wav"

と入力してやります。

少々長いですが、注意する点は

 --device の後ろに”(さっきのコマンドで調べた機器名)” を入れる

 --max-file-time の後ろに、区切りたい秒数を入れる(ここでは10秒おき)

の二つですかね。あとはそのまま使います。

なお、--rate の後ろの数値(サンプリングレート)を22050ではなく、44100を使いたいところですが、そうするとRaspberry Piがオーバーフローを起こしてしまうようで、上手くいきませんでした。

これを実行すると、あとは勝手に録音を開始、WAVファイルを生成し続けます。止めるときは、Ctrl+Cにて。

すると、arecordを実行したディレクトリに日付のフォルダができて、その下に”(日付)_(時刻)_(No.).wav”みたいなファイルができているはずです。

Raspi_mic_03

これをPCにもっていき、音声を確認。

マイクがヘボなおかげか、ちょっと音が小さかったですね。

が、確かに10秒おきの録音ができておりました。

で、ここまでで、目的のことは可能になりました。

が、これでおしまいでは面白くないので、音声をヒートマップ化して確認してみます。

引用元が分からなくなってしまったのですが、とあるところから入手したコードを、ちょっとだけいじって利用。


import sys
import numpy as np
import librosa
import matplotlib.pyplot as plt
import scipy.io.wavfile
import librosa.display
 
 
#音声ファイル読み込み
args = sys.argv
wav_filename = "20220904_162319_01.wav"
rate, data = scipy.io.wavfile.read(wav_filename)
 
#16bitの音声ファイルのデータを-1から1に正規化
data = data / 32768
# フレーム長
fft_size = 1024
# フレームシフト長
hop_length = int(fft_size / 4)  

# 短時間フーリエ変換実行
amplitude = np.abs(librosa.core.stft(data, n_fft=fft_size, hop_length=hop_length))
 
# 振幅をデシベル単位に変換
log_power = librosa.core.amplitude_to_db(amplitude)
 
# グラフ表示
librosa.display.specshow(log_power, sr=rate, hop_length=hop_length, x_axis='time', y_axis='hz', cmap='jet')
plt.colorbar(format='%+2.0f dB')  
plt.title('スペクトログラム' ,fontname="MS Gothic")
plt.show()

これを使い、WAVファイルをスペクトログラム表示させます。

Raspi_mic_02

こんな感じになりました。

マイクの特性か、8000Hzに妙な筋が入りますね。

ラジオの音を拾わせていたんですが、まあまあの周波数分布が得られます。

こちらは、ご参考まで。

とりあえず、狙いとする環境音の収集・分析には使えそうな感触。

ただし、マイクだけはもうちょっといいものを使うのが推奨かなぁ、と感じます。今どきはリモート会議用にいいものが売られているので、それを使うのが良さげですよね。

コンデンサーマイク USBマイク PCマイク 単一指向性 PCゲームマイク ノイズ軽減 ミュートボタン LED指示ライト マイクスタンド付き Skype 録音 生放送 YOUTUBE ゲーム実況 在宅勤務に適応

2021年12月31日 (金)

2021年まとめ

そういえば今年は、自分用のデジタル端末をまったく買わなかった年ですね。

いや、厳密には全く買わなかったわけではないのですが……ジャンク品と家族用を除いた、自分用のものという意味ですが。

さて、年末恒例、今年の振り返りです。

【1月】

簡単にSFなCGが作れるツール「とてかんCG」を使ってみた: EeePCの軌跡

そういえば、こんなツール使いましたね。これ、今年の1月だったんですか。もっと以前かと思ってました。

最近は、全然使ってませんね。相変わらず、熱しやすく、冷めやすいです。

【2月】

AUKEY製バッテリー&充電器、ケーブル2本到着: EeePCの軌跡

まったく外に行く機会がないというのに、モバイルな用品ばかりそろえてました。

去年買ったSurface Goを強化するために買ったのですが、今のところ、本来の出番はありません。

もし今、出張があれば、これを持ち歩くところなんですけどねぇ……東京はおろか、名古屋出張すらありませんし。

なお、この時買ったバッテリーは、ちょくちょく使ってます。

【3月】

久しぶりの大須(コロナ禍で2回目): EeePCの軌跡

大須に行きましたね。コロナ禍でもなんだかんだと、2度目です。

なお今年は8月と11月、そして12月にも、大須に立ち寄ってます。遠出ができない分、近場のここに立ち寄ることが多いです。

そういえば、今年はデジタル端末買ってないと書いてますが、こういうものは買っているんですよね。Xperia Z4。iPhone 6/6 Plusと同時期のスマホです。

2200円で買ったわりに、綺麗でした。デザインもいい。

が、遅すぎて使い物にならないんですよ、これ。我が家でもまだiPhone 6/6 Plusは使われているというのに、ここまで遅くはないですけどね。Androidってやっぱり、製品寿命が短いです。

【4月】

非接触温度計で”体温”を測ってみた: EeePCの軌跡

非接触温度計を買いました。一応、体温計ではありません。

が、体温計モードがついてます。

といっても、体表面温度+4度という補正をやってるだけのようですが。

体温測定の時間がかかってしょうがないので、多少不正確でもいいから素早く測れるやつと思って購入したんですが。

結論からいうと、ワクチン接種の副反応時に、異常を検知できませんでした。37.8度の時に、36.7度と返してきました。

やはり、安物ですね。

【5月】

iPhone SE(第2世代)を購入: EeePCの軌跡

iPhone SE(第2世代)、買いました。

といっても、長男用です。

今でも元気に使われてます。速度面、バッテリーでは、まったく不満はないようです。

1TBのWD製M.2 NVME SSDとワイヤレス静音マウス買った: EeePCの軌跡

さて、自分向けとしては、こんなものも買ってます。

1TB M.2 NVME SSDです。メインPCであるGR1650TGF-T用に買いました。

元々が512GB SSDがついてましたが、やはり1TBはないと使い辛いですね。重宝してます。なによりもWD製ということで安心。Windows 11に変えた今でも、快適に動作してます。

【6月】

Jetson Nanoの固定カメラで人の動きを分析する「動線分析」をやらせてみた: EeePCの軌跡

そういえば、Jetson Nano 2GB版を買ったんですよ。

それを応用したのが、こちらの事例。

今年は物体検出の応用にちょくちょく手出ししてたのですが、今のところ、あまり役になってませんね。

来年くらいからでしょうか、この辺が使われだすのは。

USB-C to MagSafe2ケーブルと65W USB-C電源でMacBook Airを充電してみた: EeePCの軌跡

またしても、出張した時に備えた買い物をしました。

先に買ったこの65W電源と合わせて使えば、MacBook Airも持ち出しやすくなります。

が、先のモバイルバッテリー同様、未だにこいつの真価を発揮する使い方をできてません。

【7月】

月の土地、買いました: EeePCの軌跡

スケールだけは、過去最大規模の買い物です。

月のこの辺りに、1200坪の土地を買いました。

ただし、未だに現地に行けていないので、手に入れた実感がないのが残念です。

死ぬまでに、いけるかなぁ……

【8月】

SONYのCD/ラジオ/BluetoothスピーカーのCMT-X3CDを購入: EeePCの軌跡

前から欲しかったものを、ようやく手に入れました。

SONY製のBluetoothスピーカー兼ラジオ兼CDプレーヤーです。

予想以上に、ラジオの出番が多いです。Bluetoothスピーカーがメインだったつもりですが、気が付いたらラジオばかりつけてますね。

ということで、近頃はCDもよく使ってます。が、最初のローディングが遅すぎて、デジタル音楽に慣れ切った体には、ちょっと辛いかも。

第9回 ネット小説大賞 一次選考通過は2作品: EeePCの軌跡

性懲りもなく、今年もチャレンジしてます。

相変わらず2次通過はできなかったのですが、今回初めて、下記の連載中の作品が一次選考を通過しました。

新鋭艦隊のポンコツ旗艦の提督と戦乙女たち

なおこの作品、11月には1000pt、10万PV、100万文字を突破してます。

【9月】

在宅勤務用のUSB式ヘッドセット買ってみた: EeePCの軌跡

在宅ワーク用に、買いました。

うちのメインPCのGR1650TGF-Tのマイク端子が死んでいて、USB接続でないとヘッドセットが使えないことが判明。

もう何度か使ってますが、使い勝手は良好です。

怪しいパルスオキシメーター買ってみたんですが……: EeePCの軌跡

こんなものも購入。

どちらかというと、こういう製品の闇を暴いてやろうと思って買ったのですが、私の能力では暴けないほど、一見まっとうな動きをしてくれます。

なお、値が正確かどうかは、まったく分かりません。確かめるすべがないですから。

【10月】

エアコン設置のために机を片付けていたら、Windows黎明期の雑誌に魅了された件: EeePCの軌跡

エアコン設置のために、その真下にあるPC机を動かしたんですが、ついでにいろいろと整理整頓してたら、昔の雑誌が出てきて読みふけるという事案が発生。

例えば上の画像は28年前のベーマガですが、他のページを見ると「ああ、28年のコンピューターの発達ぶりは凄まじいものがあるなぁ」と感動するんですが、教育に関しては、ほぼ28年前と今で状況が変わっていないという……

ここだけ、現代の話をしているのかと思いました。ほんとに。

機械が発達しても、人間ってやつ(いや、日本の教育ってやつ)はほとんど変わっていないことの証左です。

【11月】

「新鋭艦隊のポンコツ旗艦の提督と戦乙女たち」が1000pt越えを達成: EeePCの軌跡

新鋭艦隊のポンコツ旗艦の提督と戦乙女たち

連載中の「新鋭艦隊のポンコツ旗艦の提督と戦乙女たち」という小説が、1000ptを超えました。

なお、この小説、8月のところにも書いた通り、10万PV、100万文字も超えております。

ネット小説大賞で1次も突破し(2次は落選……)、久々にいろいろと大台を超えた作品となりつつあります。

 Windows 11にアップグレードしてみた: EeePCの軌跡

メインPCであるGALLERIA GC1650TGF-Tを、思い切ってWindows 11にアップグレードしてみました。

不具合だらけでヒャッハーってなるのかと覚悟してましたが、思ったより安定してて拍子抜けです。

スタートメニューなどが大きく変わったものの、あれが使い易いとはあまり思えませんが……ただ、今どきのデザインになり、ちょっとだけ新鮮な気分を味わいました。

このブログのアクセス数がついに1600万PVに!: EeePCの軌跡

ブログのアクセス数が、1600万PVを超えました。

100万の桁を更新するのは、実に2年8か月ぶり。

Yogibo買いました: EeePCの軌跡

「人をダメにするクッション」に、ついに手を出してしまいました。

実は今年一番の散財は、これです。

昨年はいろいろ買ったためか、今年はあまり大物を買いませんでしたね。

なお、座り心地はなかなかです。

【12月】

12月は、いろいろと買いました。

まずは、Fire HD 10。

Fire HD 10を購入: EeePCの軌跡

お次は、iPhone 13。

iPhone 13買いました(ただし妻用): EeePCの軌跡

実は両方とも、妻用です。

12月に、自分向けに買ったのは、こいつ。

Traybo 2.0を買ってみた: EeePCの軌跡

yogiboで使うPCテーブルです。在宅勤務で使いましたが、リモート会議をこれでやると、映像が揺れますね。一人作業向けです。

気づけば、風呂上がりで足から汗が噴き出るときに、PCを湿気から守るとき以外は、あまり使ってませんね。

……というわけで、今年は静かな1年でした。

といっても、決して穏やかではありません。なんせ、まだコロナ禍ですから。

デジタル端末を買わなかったということもあるんでしょうが、特筆すべき何かがあったという年ではありません。

別に買おうと思ったものがなかったというわけではありませんが。実際、iPad miniの第6世代をどうしようかと思ったのは事実。

ところが、近所のApple専門店に行っても、入荷未定というありさま。まさに、モノ売ってるレベルじゃねえ、ですよ。ほんと。

来年は、こういうのが解消されているといいんですが。

今年も残すところ、あとわずか。

これが、今年最後の更新となります。

というわけで、皆さま、良いお年を。


Mr.PC (ミスターピーシー) 2022年2月号 [雑誌]

2021年10月30日 (土)

Raspberry Pi Zero 2 W 発表

名前からも分かる通り、Raspberry Pi Zero Wの後継です。

性能が5倍になった「Raspberry Pi Zero 2 W」 - PC Watch

性能的には、Raspberry Pi 3B+並みだとどこかで見ましたが、クロックは落とされてるようですね。

とはいえ、個人的にはちょっと期待したんですが……メモリーがですね、512MBだそうです。

うーん、私の用途には1GBはないと使えないなぁ。ちょっと価格が上がってもいいから、1GB搭載モデルを出して欲しかった。

なお、日本での発売はまだ未定ですが、スイッチサイエンスさんのサイトを見ると、2200円で売る予定のようです。

ただしこの半導体不足のご時勢、どれだけ数がそろうかが不明です。年末までの出荷が20万個とか言ってますし。焼け石に水ですね。

半導体不足が叫ばれる昨今、この手の製品の値段がどんどんと上がりますね。早く下がってくれないかしらん。

I-O DATA Raspberry Pi メインボード Bluetooth(R) Wi-Fi対応モデル Raspberry Pi 3 model B 安心の1年間ハードウェア保証 UD-RP3

2021年7月11日 (日)

ケーブルクリップやらRaspberry Pi 4用ケース等を買ってみた

いろいろ買いました。

Img_0520

百均で買ったものと、Amazonから届いたものが入り混じってますが、順に紹介を。

Img_0521

これは、百均で買った結束バンド。

これ、たまに使うんですが、とうとう使い切ったので購入。それだけです。

Img_0522

で、これはケーブルクリップ。買う予定はなかったのですが、店頭で見て思わず購入。

Img_0528

と、いうのも、せっかくディスプレイアームを購入してスッキリしたはずの机の上が、このぴょんぴょんした充電ケーブル類で台無し感があったので、何とかしてやりたいとずっと思っていたところです。

Img_0531

が、こんな感じに、ディスプレイの下面に張り付けちゃえばすっきりするじゃん、と思った次第。

実際、」結構スッキリしました。

Img_0530

使うときは、こんな勢いで引っ張ればヨシ!

Img_0523

で、お次はこれ。

スマホの画面を拡大するっていう、虫眼鏡なやつです。

Img_0527

まあ、要するにこうやって……

Img_0526

スマホの画面が拡大……

とは、なかなかいきませんね。

このレンズ、中央以外はぼやけて、まるで見えません。

Img_0524

もっとも、これを買った目的は、こういう使い方をするためなんですが。

今度、会社でRaspberry Pi電子工作+Pythonな講座をやるので、それをリモート(Zoom)で流そうと思ったら、拡大しないとダメそうだなと思って買ってきたやつです。

中央に持ってくることさえ忘れなければ、どうにか使えそうです。

Img_0532

とまあ、百均の品が前座を務めてくれましたが、いよいよここで本命登場。

端にあった小さな段ボール風の箱の中身は、Raspberry Pi 4用のケースです。これだけ、Amazonでの購入品です。

Img_0533

といっても、上下をアクリル板で囲むだけの簡単なやつ。

見た目は簡素ですが、作るのはこの通り、大変そうです。

このケースにしたのは、側面に隙があった方が、何かと便利そうだったから、というだけの理由です。

早速、組み立て開始。

Img_0534

ところがこのケースの説明文、めちゃくちゃ不親切です。

1コマ目からいきなりアクリル板の表面のフィルムをはがしてから、4本のねじを立ててくれ、プリーズ!

って、書いてあるんですが……

Img_0535

その台座のねじを置こうにも、どう見てもそのままではつきません。

その下から、ねじを通さなきゃいけない模様。

ですが、このアクリル板と台座ネジの間には、どの大きさのねじを使うのかが全く書かれていないので、

Img_0536

この中から、探すしかありません。なんという、不親切な……

Img_0537

で、分かったのは、この組み合わせで使えばいいということ。

Raspberry Piの台座部分のねじは上の細いやつ、ケース上下面をつなぐ長い台座のネジには、太いねじを使う模様。

これに気づけって、素人には無理です、絶対。

Img_0538

で、あっさりした説明書とは裏腹に、実際にはまず普通のネジを穴に通して、

Img_0539

台座となるこのねじを締め付けます。

Img_0540

これを4本分、繰り返します。これでようやく、台座部分が完成。

Img_0541

で、Raspberry Pi 4を載せて、ナットで締めると、

Img_0542

その外側に、長い台座ネジを取り付け。

Img_0543

一方、上面の方には、ファンを取り付けます。

Img_0545

で、あとはこれを外側の4本のねじに止めれば

Img_0546

と、その前に、カメラのフレキシブルケーブルを取り付けます。

Img_0547

で、上面を取り付けます。

これで、ケースは完成。

Img_0548

なお、CPUのヒートシンクとファンの間は、こんな関係です。

なんだかちょっと、ファンの位置がずれてますね。

Img_0544

ちなみに、ヒートシンクが2種類ついてました。

Raspberry Pi 4用と、3B+用がついてました。

が、すでにヒートシンクがついていたため、これは使わずにとっておきます。

Img_0549

で、このケースにカメラを両面テープで固定したのち、以前、3COINSという300円均一の店で買ったスマホスタンドに取り付けます。

こんなことして、何をするのかといえば……

実はこれを使って、Raspberry Pi 4でmediapipeを動かして、人の姿勢を「数値化」してみようと思ってまして。

Img_0551

で、MediaPipeのコードを少し書き換えて、関節の一部の数値をCSVファイルとして出力するやつを作りました。

Img_0552

ちょっと見難いですが、椅子に座っている私を読み込んでおります。

数値もちゃんと、出力してました。

こいつを使って、ちょっと会社で遊んで(?)みようかと企んでます。

ということで、久々の百均 & Raspberry Piケースネタは以上です。

また何かあれば(姿勢推定の話も含め)、このブログで報告します。

Raspberry Pi 4 4B-64GB(技適マーク入)MicroSDHCカード64G/Raspbianシステムプリインストール/カードリーダ /5.1V/3A Type-C スイッチ付電源/MicroHDMI-to-HDMIケーブルライン/三つヒートシンク/簡単に取り付けケース/日本語取扱説明書/24ヶ月保証

2021年7月 2日 (金)

Raspberry Pi 4でWindows 11が動く!?

非公式、非推奨、非サポートな方法であることを承知の上で、こちらをご覧ください。

Raspberry Pi 4にARM版 Windows 11をインストールしてみる。 | Miya-Gadget

なんと、Raspberry Pi 4の4GBモデルで、Windows 11のARM版を動かしてしまったというお話。 

動画もありました。

本当に動いてますね。思ったより、スムーズです。やはり、UIがスマホに近づいたからでしょうか?

ただし、こういう無理やりハードな使い方は、たいていは実用性がないというのが落ちです。さすがにアプリケーションを使うのには不便なのではないかと。

話題としては、面白いですけどね。

しかし、Raspberry Pi 4でも動くくらいのOSなら、Surface Go 1でも動かせるようにならなかったのか……

昔は、手のひらサイズの端末でWindowsが動かせることがとてもワクワクしましたけど、今はスマホがあるためか、わざわざ小型の端末でWindowsを動かそうという気持ちにはなれないですよね。

携帯機は、AndroidやiOSで十分。キータイプが多い用途には、12~15インチサイズのノート型PCで。そういう時代です。


Microsoft Windows 10 Home April 2018 Update適用 32bit/64bit 日本語版【最新】|オンラインコード版

2021年6月27日 (日)

Jetson Nanoの固定カメラで人の動きを分析する「動線分析」をやらせてみた

Jetson Nanoでやってみたかったことの一つに、人の「動線分析」があります。

お店や工場の中で、ここはよく通る、ここはあまり人が通らないという人の動きを視覚化する、その動きを分析することでお店の商品配列や工場内の配置を変えるというのを「動線分析」と言います。

例えば、こんな感じのやつ。

Jetdetect5

こういう人が歩く場所の動画から、

Jetdetect6

こんな感じに、人が通ったところほどに色が付き、特に人が滞留しやすい場所ほど赤く表示させる(ヒートマップ化)というやつを、このJetson Nanoにやらせてみました。

(ちなみに上の画像は、Jetson Nanoの”/usr/share/visionworks/sourses/data”の中にあったデモ用の動画”pedestrians.mp4”を使って作ってます)

なお、この人検出 → ヒートマップ化するというコードが、全然ネット上に公開されていないんです。

やっぱり、動線分析って商売になるからでしょうかね。いくらググっても、動線分析のソフトやベンダーばかりが引っ掛かって見つかりません。

悔しいので、なんとか試行錯誤して無理矢理作りましたので、公開します。

あ、これ以降は、下記サイトで紹介した「Jetson Nano 2GB版+USBカメラでの物体検出」を実行済みであることが前提です。

Jetson Nano 2GBを購入しました: EeePCの軌跡

それじゃ、順番に解説。

流れとしては、1.Jetson Nanoで人検出データを作成(csvファイル) → 2.PCにてヒートマップ化 の2つです。

リアルタイムに、ヒートマップ表示できるわけではありません。また、Jetson Nanoだけで完結できませんでした。

その辺りは予め、ご了承ください。

【1.人検出データ】

Jetson Nanoで人の位置を検出させます。

そのために前回使ったDockerを使って、物体検出させて、”人”として認識されたボックスの中心座標を、CSVファイルとして出力させます。

その作業ディレクトリを作成。

ホームディレクトリの直下に「heatmap」というディレクトリを作りました。

$ mkdir heatmap

でその中に、以下のコードをエディターで書きこみ、「detect.py」という名前で保存しておきます。


import jetson.inference
import jetson.utils

net = jetson.inference.detectNet("ssd-mobilenet-v2"threshold=0.5)
camera = jetson.utils.videoSource("/dev/video0")      # '/dev/video0' for V4L2
display = jetson.utils.videoOutput("display://0"# 'my_video.mp4' for file

frg=0

with open("./xydetect.csv","w"as f:
    while display.IsStreaming():
        img = camera.Capture()
        if frg==0:
            jetson.utils.saveImageRGBA('test.png',img,img.width,img.height)
            frg=1
        detections = net.Detect(img)
        display.Render(img)
        display.SetStatus("Object Detection | Network {:.0f} FPS".format(net.GetNetworkFPS()))
        for detect in detections:
            #print(detect.ClassID,",",detect.Confidence,",",detect.Center)
            datad = str(detect.ClassID) + ","+str(detect.Confidence) + "," + str(detect.Center)
            data2 = str(detect.Center).replace("(","").replace(")","") + "\n"
            print(datad)
            if detect.ClassID==1:
                f.write(data2)

かなり無理やり感たっぷりなコードです。ご了承ください。

その後に、以下のコマンドでDockerを起動。

$ docker/run.sh --volume ~/heatmap:/heatmap

このコマンドで、先ほど作った「heatmap」というディレクトリがDocker内でもマウントされて、先ほどのプログラムコードにアクセスできます。

いや、最初、これが全然わからなくて、苦労しました。なにせ、Dockerというもの自体が初めてなもので。

で、sudoのパスワードを打ち込むと、Dockerに入ります。

そこで、すかさずディレクトリを移動。

$ cd /heatmap

と入力して、先ほど作ったディレクトリに移動します。

ここで、

$ python3 detect.py

と実行すると、USBカメラからの画像から物体を検出するコードが走り出します。

Img_0510

こんな感じです。

しばらく、うろうろします。

止めるときは、実行したターミナルで「Ctrl+C」を押します。

で、Jetson Nano内でファイルマネージャーを開き、「ホームフォルダ」の「heatmap」の中を覗くと、「test.png」「xydetect.csv」という2つのファイルができているかと思います。

test.png」・・・USBカメラの1枚目の画像

Jetdetect01

xydetect.csv」・・・人の動きの中心座標

Jetdetect2

この2つのファイルを、どうにかしてPCへ持っていきます。

私はTeratermのSSH_SCPの転送を使いましたが、USBメモリーを挿して持って行ってもOKです。

【2.PCにてヒートマップ化】

すべてJetson Nano上で完結したかったのですが、Jetson Nanoって、どういうわけかOpenCVがうまく使えないんですよね(入って入るようですが、メモリー不足のようなメッセージが出て動作せず)。

おまけにpipコマンドまで省かれているので、もう手も足も出ません。

というわけで、データ取得後から先は、PCで作業します。

うちのPCには、Python 3.7.9、ライブラリとしては、OpenCV、numpy、matplotlibが入ってます。まずは、この辺りを予め入れておいてください。

そこで、以下のコード「heatmap_detect.py」を適当なフォルダに入れておきます。


import numpy as np
import matplotlib.pyplot as plt
import csv
import math
import cv2

#画像サイズを入力
xmax = 1280
ymax = 720

x = []
y = []

with open("./xydetect.csv","r"as f:
    reader = csv.reader(f)
    for line in reader:

        x.append(math.floor(float(line[0])))
        y.append(math.floor(float(line[1])))

# 無理やり画像サイズを入れる
x.append(0)
x.append(xmax)
y.append(0)
y.append(ymax)

# numpy形式に変換
x = np.array(x)
y = np.array(y)

heatmap, xedges, yedges = np.histogram2d(y, x, bins=10)
extent = [xedges[0], xedges[-1], yedges[0], yedges[-1]]

heatmap = cv2.resize(heatmap, (xmax,ymax))

heatmapshow = None
heatmapshow = cv2.normalize(heatmap, heatmapshow, alpha=0beta=255norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8U)
heatmapshow = cv2.applyColorMap(heatmapshow, cv2.COLORMAP_JET)
cv2.imshow("Heatmap", heatmapshow)
cv2.waitKey(0)

img1 = cv2.imread('test.png')

img1 = cv2.resize(img1,(xmax,ymax))

alpha = 0.5
blended = cv2.addWeighted(img1, alpha, heatmapshow, 1 - alpha, 0)

cv2.imwrite('image.png',blended)

# 結果を表示する。
plt.imshow(cv2.cvtColor(blended, cv2.COLOR_BGR2RGB))
plt.axis('off')
plt.show()

このコードと同じ場所に、先ほどの「test.png」「xydetect.csv」を入れておきます。

そういえば、うちのカメラは「1280×720」の解像度なので、コード中のxmax、ymaxを上のようにしてますが、そこは「test.png」の解像度に合わせておいてください。

で、あとはこれを走らせます。Windows PowerShellあたりで上のコードの入ったフォルダに入った後、

$ python heatmap_detect.py

と実行するだけ。

以下のような画像(image.png)が出力されるはずです。

Jetdetect4

ちょっと見づらいですが、写真とヒートマップが重なってます。

入り口付近と、その少し横の引き戸の辺りにピークがありますね。この両方を往復していたため、こういうデータが得られたわけですが。

なお、先ほどの人検出したCSVファイルをプロットしてみると、こんな感じでした。

Jetdetect3

部屋が狭いので、ほとんど横しか動けてませんね。多少、しゃがんだりはしたのですが、もうちょっと派手に動けば、よかったですかね?

このため、ヒートマップもほぼ真横にしか色がついてません。

これが公園や、あるいは食品売り場のような、人が縦横にうろうろする場所に設置すれば、もっと面白い絵が取れるんでしょうけど。

ともかく、これで一応、目的のものは作れました。

なお、「detect.py」の5行目、


camera = jetson.utils.videoSource("/dev/video0"


camera = jetson.utils.videoSource("./pedestrians.mp4"

とすると、動画ファイルを読み込んでくれます。

また、24行目にあるif文


            if detect.ClassID==1:

のClassIDを


            if detect.ClassID==3:

1から3に変えると、「人」ではなく、「車」を検出するコードに早変わりです。

Jetdetect7

試しに、うちの隣の駐車場を写してみましたが……あまり物体検出精度が高くなくて、微妙なヒートマップができました。

正面から撮れば、もうちょっと色が付いたであろうと思われます。

こんな感じに、いろいろと使えそうです。

Raspberry Pi 4あたりと変わらないくらいの廉価なJetson Nano 2GBですが、こんなものが作れてしまうとは……正直、驚いてます。

とりあえず私はこれを使って、会社内の工場や会議場内の人の動線分析をやろうかと企んでます。

これと、以前に紹介した「Raspberry Pi 4でmediapipeを動かしてみた: EeePCの軌跡」も使えば、様々な人の動きがデータ化できます。

こうなったら、会社中をRaspberry PiとJetson Nanoだらけにしてやろうかと。

少々、使い勝手の悪いコードですが、使ってみたいという方はご自由に。


NVIDIA Jetson Nano 2GB 開発者キット

2021年6月21日 (月)

Jetson Nano 2GBを購入しました

先日、NVIDIAの人と打ち合わせる機会があって、そのNVIDIAの方の話を聞いていたら、なんだか急にJetsonが欲しくなって、思わず買ってしまいました。

Img_0444

といっても、Nanoの2GBという、Jetsonでも一番安いやつ。お値段は、7千円弱。Raspberry Pi 4とはいい勝負くらいの価格です。

Img_0448

開封すると、出てきました。2GB版Jetson Nanoの開発キット。

Img_0449

4GB版と比べると、いろいろなものが省かれてます。まず、USB-Aの端子が3つしかないし、AC電源コネクターもなし。その代わり、USB-Cコネクターがついてます。なお、その名の通り、メモリーが2GBしかありません。

もっとも、必要最小限なものはあるので、十分かと。

で、早速いじろうかと思ったのですが。

そういえばこれ、モニターどうしようか?となりまして。

Img_0445

しょうがないので、デスクトップ機で使っていたあの23インチモニターを復活させました。

う……せっかく作ったスペースが、丸つぶれに。

Img_0446

何よりも気になったのは、このUSB-HDDと干渉すること。

あと1センチ高ければ干渉しないというのに、ほんのわずかガチ当たりです。仕方がないので、机を少しスライドするなどして、モニターを無理矢理収めます。

Img_0447

いろいろと配置を変えて、どうにかすっきりさせました。

さて、この先少し、備忘録も兼ねて、Jetson Nanoのセットアップから、物体検出を動かすまでをまとめます。

以下、ちょっと長いので、簡単に目次をつけてみました。

準備

Img_0450_20210620142801

他ではあまり書かれてませんが、Jetson Nanoだけでは動きません。

まず、Jetson Nanoって、Wi-Fiがありません。

うちでは、そこらへんに転がっていたWi-Fiドングルをぶっ挿しておきました。

他にもキーボード、マウス、そしてモニター、画像認識的なことをやらせるには、さらにUSBカメラも必要です。USBが3つしかないので、キーボード、マウスは一体型のドングルを使うやつがいいですね。

また、電源にはUSB-C PD対応電源も必要。

上の画像の左端にUSB-Cコネクターがついてますが、ここに最低でも5V 3A(15W)を供給しなきゃいけないようです。

私はこの間買った、Aukey製の20WのUSB-C電源を使いました。最近はPD対応電源も安いし、iPhone/Androidスマホの急速充電もできるので、一つは持っておいた方が便利かと。

SDカードですが、UHS-I対応のmicroSDXC 64GB以上が推奨。ですが、私は東芝製32GBを使ってます。

環境インストール

(1) OS (JetPack)のインストール

まず、microSDカードにOSを入れます。

「JetPack」という、Ubuntu + 必要環境があらかじめ収められたイメージファイルを落として使うのが便利です。

このあたりは、Raspberry Piよりは親切です。

ダウンロード元は、以下。

Jetson Download Center | NVIDIA Developer

ですが、ここでひとつ注意が。

ここで「JETSON NANO DEVELOPER KITS」の「For Jetson Nano 2GB Developer Kit:」の下にある「Download the SD Card Image」を押してしまいそうになりますが、そこではなく、下にスクロールして現れる「> Jetson Nano 2GB Developer Kit SD Card Image 4.5」というのをクリックします。

普通にクリックすると最新のバージョンが4.5.1が入手できるのに対し、以下のリンク先を見る限りでは、どうやら4.5を選ばないといけない模様('21/6/21現在)。

jetson-inference/aux-docker.md at master · dusty-nv/jetson-inference · GitHub

ここを見ると、JetPack 4.5、4.4.1、4.4の3種類しか書かれてません。

いや、もしかしたら4.5.1でもいけたのかもしれませんが、やり直しとなると、とんでもなくめんどくさいことになるので、ここは無難に4.5にしておきました。

Jetnano01

なお、すごく時間がかかりました。3時間以上かかりましたかね。

ダウンロードしたZipファイルを展開し、イメージファイルを取り出します。

で、このイメージファイルを、以下のサイトから入手した「balenaEtcher」というソフトでSDカードに書き込みます。

balenaEtcher - Flash OS images to SD cards & USB drives

この時、間違ってもOSのドライブや外付けの記憶デバイスなどを選択しないように注意しましょう(一度やらかしました)。

書き込みが終わったら、Jetson Nano本体に挿し込みます。

なお、バカでかいヒートシンクの裏側辺りに、SDカードスロットがあります。そこにカチッとはめればOK。

(2) Dockerなどの導入

物体認識、物体検出を動かすための、Dockerイメージを導入します。

やり方は、先に載せたリンク「jetson-inference/aux-docker.md at master · dusty-nv/jetson-inference · GitHub 」にも載ってますが、ターミナルを開いて、以下のようなコマンドを打ち込みます。

$ git clone --recursive https://github.com/dusty-nv/jetson-inference
$ cd jetson-inference
$ docker/run.sh

最初のgit cloneに時間がかかりますが、しばらく頑張って待ちます。

なお、この「cd jetson-inferene」と「docker/run.sh」は、電源を入れなおすたびに実行が必要です(この環境を使いたい場合)。

これでとりあえず、Jetson Nano 2GB版を動作できるところまで来ました。

テスト動作(物体検出)

さて、いよいよ動作です。

USBカメラをつけた状態で、以下を実行します。

ターミナルでは「jetson-inference」というディレクトリにいると思うので、その状態で

$ cd build/aarch64/bin

と入力。

「ls」と打ち込むと、たくさんコードらしきものが入ってますが、物体検出を動かします。

動かし方は、簡単。ここで、以下のコマンド

$ ./detectnet.py /dev/video0

を入力し、Enterキー。

Img_0457

初回実行だけ、なにかを構築しているみたいで、えらく時間がかかります。が、

Jetnano02

そのうち、こんな風に物体検出の画面が出てきます。

私が「person」として認識されてますね。

Jetnano03

カメラをメインPCに向けると、見事「laptop」と「mouse」で認識されてます。

Jetnano05

なお、この状態のSurface Goも「laptop」時々「book」と認識されました。

Jetnano04

iPhone 7 Plusとダイソー製Bluetoothスピーカー。

iPhoneの「cell phone」はともかく、スピーカーの「suitcase」はなんやねん?

Jetnano06

という具合に、結構遊べます。

速度はだいたい、20fps出てますね。エッジ端末でこの速度はなかなかすごい。

ちなみにこの物体検出のアルゴリズムはSSD(Single Shot multibox Detect)+mobileNetだそうです。いわゆるYoloよりはちょっと劣る感じかなぁと。

Img_0465

そうそう、これを動かしてる最中に、このバカでかいヒートシンクに触れると、めちゃくちゃ熱いです。

多分ですが、60度以上はありそう。

安定動作には、ファンは必須でしょうね。

とまあ、お手軽Jetson Nano 2GBを入手して、お手軽に物体検出をさせてみました。

以前は、ここまで到達するだけでも一苦労だったんですけどね……楽になりました。

問題は、これをどう応用するか、なんですけどね。


NVIDIA Jetson Nano 2GB 開発者キット

2021年6月 6日 (日)

Raspberry Pi 4でmediapipeを動かしてみた

今年の1月に、姿勢推定の仕組みである「mediapipe」を使って遊んでみました。

高精度な手足、身体の姿勢推定API「MediaPipe」を使って体の姿勢を数値化させてみる: EeePCの軌跡

が、ちょっと思うところがあり、Raspberry Pi 4で動かせないかと調べていると、そのやり方が出てきました。

と、いうわけで、そのプロセスをまとめておきます。

なお、Raspberry Pi 4上でmediapipeを動かすにはOSを64ビット版にする必要があり、Raspberry Pi OSの64ビット版か、Ubuntu辺りをインストールする必要があります。

ここでは、64ビット版Raspberry Pi OSを入れます。

まず、下記サイトにアクセスします。

Index of /raspios_arm64/images

Raspi6400

あまり新しいバージョンはだめらしいので、ここでは「2020-08-24」を選びました。

ゲットしたいバージョンのフォルダーをクリックすると、その中に一つ「zip」の拡張子のがあるので、それをダウンロード。

で、その圧縮ファイルを展開すると、なかからimgファイルが出てきます。

続いて、下記のサイトから、Raspberry Pi Imagerをダウンロードしておきます。

Raspberry Pi OS – Raspberry Pi

ちょっと下の方に「Download for Windows」というのがあるので、それをクリックすると、Raspberry Pi Imagerが得られます。

インストーラーがあるので、それをインストールし、起動。

「CHOOSE OS」をクリックすると、こんな選択画面が出ますが、

Raspi6401

これをずっと下までスクロールし、一番下にある「Use custom」を選択。

Raspi6402

するとファイル選択画面が出てくるので、先ほどダウンロードしたイメージファイルを選択します。

Raspi6403

で、StrageはSDHC CARDを選択するんですが、

Img_0434

一度、痛い目にあってますからね。またUSB HDDを消されないように、抜いておきました。

Raspi6404

ドキドキしながら、書き込みを待ちます。

Raspi6405

無事、終了しました。

Img_0436

で、これを8インチのアナログディスプレイにつないで起動。

5インチのやつでは、画面表示しませんでした。仕方なく、最初は8インチで。

最初に、パスワードの設定や言語選択、Wi-Fiの設定などをした後、解像度も一番低いやつに変えておきました。

で、リブートすると、いよいよmediapipeのインストールです。

やり方は、以下のサイトを参照。

GitHub - PINTO0309/mediapipe-bin: MediaPipe Python Wheel installer for RaspberryPi OS aarch64, Ubuntu aarch64, Debian aarch64 and Jetson Nano.

ここの「2.Install」の項目から忠実に実行しました。

あ、Installには2つの項目があって、Raspberry Pi OS 64bit BrusterとUbuntu 20.04 aarch64がありますが、ここでは64bit Brusterの方を実行。

で、「3.Sample」にある通り、サンプルコードをgitで入手し、「python3 sample_hand.py」を実行。

Img_0437

動きました。先のページにある通り、だいたい8fpsくらいで動きますね。

Img_0438

ちなみに、「python3 sample_pose.py」を動かすと、上のように身体の骨格推定も動きます。こちらは、だいたい5fpsくらいでした。

まあまあの速度ですね。Raspberry Piであることを思えば、悪くありません。

Img_0439

せっかくなんで、5インチの方でも動かしてみました。

ちょっと狭いですが、かなりコンパクトになりました。ただ、なぜかWi-Fiが動きません。電力不足か?

これのよくある使い方ですが、これを工場や作業場に持ち込んで、細かい作業姿勢や手の動きを分析させてみたいなぁと思ってます。

そうなると、小型のRaspberry Piが便利なんですよね。

ただ、実際の動きと画像が1秒ほどずれるのが気がかり。ちゃんと推定できているので、問題はないんですが、画面を見ながら動くとちょっと戸惑いそうです。

Raspberry Pi 3B+ばかり使ってて、しばらく4の方はほったらかしでしたが、これを機にRaspberry Pi 4も使ってみましょうかね。

より以前の記事一覧

当ブログ内検索

スポンサード リンク

ブログ村

無料ブログはココログ