【RaspberryPi】HDMIカメラ化する

最初に公開してから、若干追記を行いました。

最近、知り合いとコロナ禍の配信界隈で大人気BlackmagicさんのATEM miniの話になって、HDMIで接続するカメラ高いよね~という話で盛り上がりました。

通常の使用を考えると3つぐらいの入力はなんとなく想像できるのですが、どんなものを映像ソースとしてしようしているのかなと興味はあります。(PC画面、手元、全景ぐらいかなと思うのですが)YouTuberの方々がよく使用されているデジタル一眼レフHDMI接続し、それを入力ソースとしてしようすることも考えられるのですが、そこまで気合をいれるというのも価格的には厳しいので、Raspberry Piをカメラ化できると嬉しいよねという話になりました。古いiPhoneがあるなら、それを使ったほうが画質はいいのかも?というのはやめておきますw

今年に入ってRaspberry Pi High Quality Camera RPI-HQ-CAMERAが公式から発表されたこともあるので、これを使用すればかなりの画質の向上も望めます。

www.seeedstudio.com

CSI接続のカメラをHDMI化するモジュールもでているそうなのですが、そのままHDMIの画面をスイッチャーに入力すればもう少し安くできるよねという話になったので、その検証をとなります。

既に、そのときに話をしていたSeeedの中の方が行っていますが、現状機材のない自分はとりあえずできるところまでやってみることにしました。以下のエントリーとほぼ同じですので以下を先に見てから、余談程度にみてもらえるといいかなと思います。

lab.seeed.co.jp

参考エントリーと異なる点としては

  • ATEM miniはないのでHDMIキャプチャデバイスで代用(到着まち)
  • RaspberryPiHQカメラがないのでRaspberryPiカメラV1.3で代用(到着まち)
  • RaspberryPi Zero用の変換フレキシブルケーブルがないのでRaspberryPi3Bで代用(到着まち)

これぐらいの制限付きで行っています。手元にものが揃えばRaspberryPi Zeroでも大きく変更なく実現できるかと思います。他にもRaspberry Pi2が手元に余っていれば、HQカメラモジュールをつけると有効利用できるのでは?と思います。

作業手順

手順は以下の通りになるかなと思います。

  1. Raspberry Pi OSのインストール(X環境が必要になると思いますが、基本的にはほぼデフォルトの状態でOKのはず)
  2. CSIカメラモジュールでの録画(コマンドのテスト)
  3. カメラアプリケーションの起動時の自動起動
  4. ファイルシステムのリードオンリー化

1. Raspberry Pi OSのインストールに関して

通常のインストールで問題ないと思います。 ネットワーク設定とカメラ接続・カメラインターフェース有効化(raspi-config)は行っておきましょう。

カメラインターフェースのCLIでの設定

raspi-configコマンドを実行して

$ sudo raspi-config

f:id:ueponx:20200810141140p:plain

カーソルを移動して、【5. Interfacing Options】でEnterキー押下。

f:id:ueponx:20200810141304p:plain

【P1 Camera】でEnterキーを押下。

f:id:ueponx:20200810141517p:plain

【Would you like the camera interface to be enabled?】と尋ねられるので【<はい>】(yes)でEnterキーを押下します。

f:id:ueponx:20200810141400p:plain

f:id:ueponx:20200810141804p:plain

あとはメニューに戻り終了時に再起動を求められるので、再起動すればCameraモジュールを使用する事ができるようになります。

f:id:ueponx:20200810141910p:plain

カメラインターフェースのGUIでの設定

GUIの場合にはX上の設定から行うことができます。

メニューのRaspberryPiの左上のアイコンをクリックして、プルダウンメニューから【設定】→【RaspberryPiの設定】をクリックします。

f:id:ueponx:20200810142133p:plain

設定のダイアログが表示されるので、【インターフェース】タブをクリックして、

f:id:ueponx:20200810140203p:plain

一番上にあるカメラのラジオボタンの設定を【有効】に変更して【OK】ボタンをクリックします。

f:id:ueponx:20200810142533p:plain

設定後に再起動を行えばカメラモジュールの使用ができるようになります。

カメラモジュールの接続確認

インターフェースを有効後に再起動ができたら、以下のコマンドを実行して認識状況を確認します。

$ vcgencmd get_camera

実行後の結果のdetectedの値が1になっていれば認識が行われています。(接続されていない場合はこの値は0になっています)

f:id:ueponx:20200810142949p:plain

これでOKです。

追記:GUI環境のオートログインの設定も必要になります。設定しない場合には、起動後にログイン画面が表示されっぱなしになります。raspi-configコマンドなどで同様に設定を行ってください。

2. CSIカメラモジュールでの全画面表示(コマンドのテスト)

あとはXの画面上にカメラ映像が表示されれば良い状態になります。ただし全画面設定にしないとカメラっぽくならないのでその部分は注意かなと思います。

結論としてはRaspberryPiで標準に存在するraspividコマンドを使用すればよいようです。自分は勘違いしていて、全画面表示を行ってもメニューは残ってしまうのかなと思ってしまい、Pythonでpicameraモジュールを使用して実装していました。OpenCVなどを使用するならそのやり方もなくはないので念の為そちらも紹介します。

raspividコマンドを使用

以下のコマンドで実行すると全画面表示+時間無制限の表示ができます。通常は録画を行うことがほとんどなのですが、オプションをつけることでカメラのような動きをさせることができます。

$ /usr/bin/raspivid -f -t 0

pythonからpicameraモジュールを使用

以下のようなpythonのコードでも同様のことが行なえます。start_preview()は録画を行わずに表示だけを行います。このプログラムはCtrl+Cで終了します。(pythonはVersion3系を使用しています)

import picamera

camera = picamera.PiCamera()
try:
    camera.start_preview()
except KeyboardInterrupt:
    pass
finally:
    camera.stop_preview()
    camera.close()

どちらも同じ動きをしますが、pythonを使用する方が負荷が高くなります。(CPU負荷はRaspberryPi 3B使用時の値です)

  • raspividコマンドの場合 … CPU負荷2%以下
  • pythonpicameraモジュールを使用した場合 … CPU負荷20%前後

RaspberryPi Zeroでの使用を考えるならば、raspividコマンドを使用する方がいいでしょう。OpenCVなどで編集や文字入れをするのであれば、後者でもいいかもしれませんが、コマ落ちする可能性は多分にあると思います。

HDMIからの出力

f:id:ueponx:20200810160115p:plain

やっぱり標準カメラの画質は良くない。HQカメラモジュールの到着を期待したいところですね。今回はHDMIの出力をAverMediaのキャプチャデバイスを使用して静止画をとっています。


3. カメラアプリケーションの起動時の自動起動

電源投入時にアプリケーションを自動的に実行することになりますが、これは以下のエントリーが非常に詳しいので参考にしています。

qiita.com

今回はX上のプログラムの自動起動なので

autostart を使用する方法を使います。

$ mkdir -p ~/.config/lxsession/LXDE-pi
$ cp /etc/xdg/lxsession/LXDE-pi/autostart ~/.config/lxsession/LXDE-pi/
$ echo '/usr/bin/raspivid -f -t 0' >> ~/.config/lxsession/LXDE-pi/autostart

これでOKです。再起動を行うと自動的にHDMIポートからカメラの映像が出力されます。VNCなどではdisplay設定ができていないの表示されません。リアルなデバイスを使用して確認することをオススメします。


4. ファイルシステムのReadOnly化

あとはRaspberryPiの電源を、物理的に落とせる用にするためにファイルシステムをReadOnlyにします。本当であれば、ログなどの処理を止めたりするのがいいのかなと思いますが、私は結構めんどくさがりなので、ファイルシステムをOverlay設定にすることで、対処しようと思います。Overlay設定は厳密にいうとReadOnly化ではなくファイルの追記をtmpfsに書き込み、再起動をすると揮発するというものになります。

本格的に使用するのであればこちらを参考に設定することをお願いします。

github.com

億劫な人向けの設定

Overlay化は以下の手順で行います。

メニューのRaspberryPiの左上のアイコンをクリックして、プルダウンメニューから【設定】→【RaspberryPiの設定】をクリックします。

f:id:ueponx:20200810140157p:plain

RaspberryPiの設定ダイアログが表示されたら【パフォーマンス】タブをクリックします。

f:id:ueponx:20200810140203p:plain

表示が変わったら、Overlay File System項目の【Configure…】ボタンをクリックします。

f:id:ueponx:20200810140209p:plain

設定ダイアログが表示されます。

f:id:ueponx:20200810140214p:plain

Overlayの値を【Enabled】、Boot Partisionの値を【Read-only】に変更して、【OK】ボタンをクリックします。

f:id:ueponx:20200810152634p:plain

すると再起動を求められるので【はい】をクリックします。(別作業中であれば【いいえ】をクリックして改めて再起動してください)

f:id:ueponx:20200810140224p:plain

この設定で/bootはRead-onlyに変更して、/はOverlayに変更できています。

試しに/内にファイルを書き込み再起動を行うと、ファイルは消えます。

/bootファイルシステムへファイルの書き込み(Read-onlyなので失敗します)

f:id:ueponx:20200810153639p:plain

/ファイルシステムへファイルの書き込み

f:id:ueponx:20200810140230p:plain

再起動後の確認(書き込んだファイルがなくなっています)

f:id:ueponx:20200810140235p:plain

これで起動すれば自動的にカメラモジュールの映像がHDMI側に出力されます。電源リモート接続してshutdownコマンドで行わなくても大丈夫かなと思います。

終わりに

とりあえず、RaspberryPiのカメラモジュールを使ってHDMIカメラを作ることができたかなと思います。RaspberryPi Zeroなどにすればかなりお安くHDMIカメラデバイスが作れるのでいいかなと思います。HQカメラが届いたら、Cマウントのレンズや広角レンズをつかうことで、どれぐらい画質がよくなるのかを試してみたいと思います。

追記:このエントリーを書いた後にRaspberry Pi Zeroとカメラモジュールを接続するフレキシブルケーブルが届いたので、同じ設定を行いましたが問題なく動作しました。

f:id:ueponx:20200810214750j:plain

【参考】

lab.seeed.co.jp

qiita.com

【RaspberryPi】でZoomを使用する事ができるか?

まえまえから気になっていたので、試してみたという内容のものです。

f:id:ueponx:20200806012945p:plain

結構古いPCでもZoomは使用できるのですが、RaspberryPiで参加することができれば、PCの画面を専有しないので カンファレンスっぽいもの(自分が話さない前提)の場合は有効に使えるんじゃないかなと思いました。

スペックとしてはタブレットなどでも使えるZoomRaspberryPi 4Bであれば問題なく使えるのではないかと思っての実験となります。

続きを読む

またか…USBメモリが壊れた!プチ復活への道のり

既に言わずともわかると思いますが、実際に行う場合には自己責任でお願いいたします

また、手持ちのUSBメモリが認識できなくなりました。認識できなくなったというのはちょっと微妙で、PCに挿すとエクスプローラー上ではドライブが認識できるのですが、書き込むこともプロパティを見ることもできないという状況でした。

この状態になって、あーこれはパーティションテーブルが壊れたかなと思いました。ですが、該当のUSBはデータ専用に使っていたので、フォーマットを行うこともなかったので、なんで壊れたかなという疑問がでてきました。こういう手合は大概RaspberryPiあたりに挿してパーティションテーブルを復帰させてしまえば治るだろうと思ってやってみたのですが、認識することはありませんでした。というかdmesgコマンドでも途中までの認識をするのですが、ストレージとしての認識ができませんでした。

本格的に壊れてしまったのかも…と思い今度は物理フォーマットツールを使ってみたんですが、そもそもストレージとして認識されないので実行もできない状態でした。

捨てるか…そんな状態から始まる今回のエントリーになります。

ちなみに今回使用したUSBメモリはこちらになります。もう購入できないものです。

復旧できるのか?

基本自分の中ではもう使えないんだろうなと思っていたので、分解供養することにしました。

分解するとこんな感じでした。ネジなどはないので、プラスチックのカードなどを使ってこじ開けます。もう2度と元には戻らない感じですけどね。

f:id:ueponx:20200731232817j:plain

コントローラーはSM社のSM3255Q ABというチップが使われていて、メモリはSAMSUNGのものが使われていました。基板をみても原因となりそうな部分はなく、チップ系のトラブルかなというところでしょうか。

f:id:ueponx:20200731232838j:plain

コントローラーチップの部分を拡大するとこんな感じ。

f:id:ueponx:20200731232851j:plain

廃棄しようと思っていたのですが、YouTubeの修理系の動画を見ていたらコントローラーチップ名とMPToolを検索ワードにしてググってれば復旧するようなツールが出てくるという話が載っていました。

そこで、検索してみると…以下のようなサイトを発見しました。

f:id:ueponx:20200731233916p:plain

見るからに怪しい…一か八かでダウンロードして使用してみることにしました。(既に言わずともわかると思いますが、自己責任でお願いいたします

サイトの下に行くとコントローラーチップごとのツールのダウンロードリンクがあるので、新しいバージョンのものをダウンロードします。

f:id:ueponx:20200731234358p:plain

ダウンロードすると以下のようなrarファイルが入手できます。

f:id:ueponx:20200731234730p:plain

これを展開するとこんな感じのファイル構成になっています。この中のsm32Xtest.exeという実行ファイルを起動します。

f:id:ueponx:20200731234743p:plain

起動するとこんな感じ。該当のUSBメモリをPCに挿して、【Scan USB(F5)】ボタンをクリックすると、

f:id:ueponx:20200731234803p:plain

UI上にUSBメモリが認識されます。今回挿したUSBポートはPORT1だったようです。READYの表示がでたら、【Start(Space Key)】ボタンをクリックしてメモリのテストを行います。ボタンの表示は崩れていますが、問題なく機能します。

f:id:ueponx:20200731234823p:plain

テストを行っていくのですが…

f:id:ueponx:20200731234854p:plain

Windowsからのフォーマットするかといったダイアログメッセージが表示されて、チェックは失敗してしましました。ただ、これまではフォーマットすらできない状態だったので、状態は少し前進したともいえます。ダイアログで【ディスクのフォーマット】ボタンをクリックすると

f:id:ueponx:20200731234858p:plain

ディスクフォーマットのダイアログが表示されました。勝ったかも!

f:id:ueponx:20200731234902p:plain

FAT32で通常フォーマット(クイックフォーマットのチェックをOFFにします)をかけてみます。

f:id:ueponx:20200731234905p:plain

問題なくフォーマットが完了できました。\(^o^)/

f:id:ueponx:20200731234909p:plain

Windowsのディスク管理ツールからも、ドライブレターだけでなくディスク構成もちゃんと見えています。(今回はDドライブとして認識)

f:id:ueponx:20200731234912p:plain

念の為、どこかのセクター(?)が死んでいるのかもしれないと思ったので、チェックディスクをかけて見るのですが、問題は検出されませんでした。

f:id:ueponx:20200731234915p:plain

フリーのEaseUS Partition Master 14.5を使ってディスクのチェックを行ってみますが、同様に問題は検出されません。

f:id:ueponx:20200731234922p:plain

f:id:ueponx:20200731234918p:plain

ちょっと原因がわからないですが、うまく復帰はできたようです。以前入っていたファイルに関してはフォーマット時に削除されていますが、 使えないよりはましでしょう。

おわりに

今年に入ってからUSBメモリが壊れるのでは3回目かも…。使用回数のリミットもあるデバイスなので、ある程度きたらリプレイスするというのが一番いい解決法なのかもしれません。復活をした該当のUSBメモリもいつ壊れてもおかしくないと思うので、重要なデータを入れるのではなく、データの入れ替えで仕方なくしようするというレベルにとどめて置こうかなと思います。

コロナウイルスの関係で自分もYouTubeを見ることが多くなったのですが、一番良く見るのは修理系動画です。修理系動画をみているとふと分解したくなるのは自分だけなんでしょうかね。外出自粛期間中に分解用の工具も結構購入してしまった様に思います。でも分解のテクニックや方法がわかるので割と情報が得られるので助かります。

参考

uepon.hatenadiary.com

uepon.hatenadiary.com

【RaspberryPi】Node-REDからAlexaを発話(TTS)させる

そろそろ、Node-REDを使ってalexaを発話させてみたいなと思いました。家にはかなりのスマートフォンの第一世代があるのですが、全部つけてしまうと部屋よりも多いのでさすがに部屋に積んであるといった状態です。Node-REDで使用できると、色々な連携もできますし、先日アマゾンさんのSmartPlugも購入したこともあるので、このあたり連携できると面白いなんて思っています。

以下を参考にしながら作業を行いました。参考にしたエントリは完成度が高いので、基本的にはこのリンク通りに行うのであれば問題はなく動作できます。このエントリを読み飛ばしても大丈夫かなと思いますが、うまく行かなかった場合のみてもらえればと思います。

qiita.com

dream-soft.mydns.jp

続きを読む

契約から一ヶ月ようやくRakuten Miniが到着!

個人で使用しているLINE MOBILEのSIMカードでしたが、所有しているのは2枚でそのうち1枚はワークショップとかの補助に使えるかなと思って使用していました。 ただ、いまのご時世、ワークショップもリモートとなってしまい自宅からのオンラインとなってしまえば、用途的にはあまり使えないといった状況。

そんなときにRakutenMobileの1年間無料のRakuten UN-LIMITプランを知りました。まあ、LINE MOBILEを解約するのであればちょっと使ってみるのもいいかなと思って契約をしました。LINE MOBILEの契約が1年間1万5千円程度なのでその分が無料になるのはお財布的に助かります。

今回は6月4日に契約を行ったのですが、その後ステータスは【準備中】のままで契約が進んでいるのかも、うまくできていないのかもさっぱりの状態でした。何度か問い合わせをしようとしても全くサポートにもつながらないし…そしてもうその存在自体も忘れた一ヶ月後にようやく端末が到着しました。(7/4に到着)

いざ開封

箱は通常のスマートフォンのものよりも2周りぐらい小さい感じですかね。本体が小さいので箱が小さいのも当然といえば当然です。

f:id:ueponx:20200707210519j:plain

開けると、USB充電器、USBケーブル(Type A-Type C)、オーディオType C-pin変換、Rakuten Mini本体が入っています。

f:id:ueponx:20200707210528j:plain

USB充電器はかなり小型ですが、ちょっとプラスチッキーな感じで安っぽさあります。これでも急速充電ができるのかなと思ったらできないみたいです。出力は5V1.0A、急速充電できたらいいのになあと思っていましたが、本体価格のキャンペーンなどを考えれば、まあいいかと納得はできます。(残念だと思いますが)あと付属のUSBケーブルは少し太いかな。ただ、USB TypeCで充電できるのはいい感じです。

f:id:ueponx:20200707210539j:plain

端末の大きさはRaspberry Piの基盤よりちょっと小さい感じで、重さはそこまで軽くないかな。自分は手がかなり小さい方なので、この端末でも普通につかえるかなと思っていましたが、やっぱり小さすぎるかなという感じです。特にロックの解除は指紋認証などが使用できないためパターンなどを設定することになりますが、小さいのでわりの入力ミスは頻発します。慣れの問題もあるかなと思いましたが。

同梱されている紙面は以下となります。このスタートアップガイドはかなり素人が作った感があるような印象…まあこの手順通りやれば特にトラブルなく追われるかなと思います。たまに、マニュアルの手順がアップデートなどに阻まれることもありましたので、広い気持ちでの対応しましょう。

f:id:ueponx:20200707210547j:plain

初期設定

電源をONするとAndroidが起動します。Androidのバージョンは9で設定もごくごく普通のAndroid端末となっていました。

f:id:ueponx:20200707210557j:plain

初期設定が終わるとこんな感じの画面になります。UIがちょっと特殊かな。個人的には通常のUIのほうがいいかなと思いましたが、これはこれで小さい画面の中でアプリを立ち上げるには悪くないかもしれないです。ちょっとどうかなと思ったのは電話アプリのボタンやティザリングのボタンがこのUIを違う形で表示されます。ちょっと見た目がもったいないかな~

f:id:ueponx:20200707210608j:plain

画面は以下のような感じです。

f:id:ueponx:20200707214204p:plain

アプリは普通に起動できますが、画面が小さすぎて表示などは最低限って感じです。この端末でYoutubeやゲームをするなどはなさそうなのでベンチマークとか不要かなと思います。 入力に関してはデフォルトのキーボードは使いにくいのでGoogle日本語入力などのアプリで変更したほうがいいかなと思います。画面が小さいので快適に入力ができるとは思わないほう良いと思います(できないとは言っていない)

おわりに

RakutenMiniは通信量1年間無料(事務手数料+端末代で3000円ほどかかりますが)ということなので、1年間どんな感じなのか見定めるにはいいかなとは思います。Rakutenエリア外の場合にはau回線などが使えるのですが、5GBの転送容量の縛りが発生します。自分はLINE MOBILEでは3GBのプランを使用していたので問題はなさそうです。

pocketWiFiがAndroid端末(カメラ付きだし)になったと思えばいいのかなというのが正直な感想です。着信の音声通話端末としても十分つかえるので、使用用途を割り切ればいい端末なのかもしれません。解約後は音楽プレイヤーにしてもいいサイズだと思いますw。

一番の問題点は、楽天モバイル側の事務手続きの遅さ。申込みしてから端末が届くまでに一ヶ月かかったので解約するにも時間がかかる可能性はあります。そのあたりはかなり注意をしたほうがいいような気がします。

契約手続き後に技適的な話でいろいろあった端末なので、気分は微妙ですが。1年間使ってみようかなと思います。