見出し画像

その3; 一眼レフをIPカメラにする

前回のあらすじ

前回はHDMIキャプチャーが届くまでの時間を利用してカメラスタンドを自作した.激安HDMIキャプチャーはAmazonからオーダーしたのだが,中国からの直送で,届くまで2~3週間かかりそうだ.待ちきれなくなってしまい,日本に在庫のある業者に同じものを注文したところ,2日後には届いてしまった.

USB3.0接続と書いていたが,現在2.0に訂正されている.実物を見るとコネクタの色はUSB3.0で推奨されている青だが,コネクタへの配線は2.0のようだ.がっかり.

激安HDMIキャプチャーを試してみる

ノートPCのUSBに接続すると勝手にドライバのインストールが始まり,あっさりと認識された.すばらしい! カメラのHDMI出力をキャプチャーに接続して,OBS Studioという定番のソフトを立ち上げる.これも問題なし,画面上にはきれいな映像が映し出されている.あれれ,でも余計な撮影情報やフォーカスの赤枠が映ったままだ.なんとか消そうとカメラをいじくるが,どうしても消せない.グーグル先生に訊いてみると,どうやらHDMIパススルーという機能がないと,余計なものが消せないらしい.ところがNikon D5100にはその機能がなく,ここで暗礁に乗り上げてしまった.

下調べをしっかりしなかった自分が悪いのだが,これを知っていたら一眼レフは買わなかったので,むしろ知らなくてよかったかもしれない.

USB接続に再度挑戦

結局Web会議で使える映像を得るには,USB接続するしかないのだが,私の場合は,会社PCのUSBメモリライトプロテクトの問題があり,どうやってもうまくいかない.とにかくライトプロテクトのかかっていないPCと一眼レフカメラを接続するしかないのだが,そのあとどうすれば良いか思い当たらず途方に暮れてしまった.しかし,いろいろ調べてみると,Raspberry Piのようなシングルボードコンピュータを使って,webカメラをネットに繋がったカメラ,いわゆるIPカメラにするプロジェクトがいくつかみつかった.そこで使われているのは,mjpeg-streamerというストリーミングソフトなのだが,実はこのソフト,調べてみるとPTPというプロトコルに準拠したカメラなら,webカメラと同様に入力できるらしい.Nikon D5100からの映像フォーマットはMotion-JPEGらしいので,これがそのまま配信できれば,画像の劣化も少なく,処理の負担も小さいので好都合だ.配信された映像は,同じWi-Fiルーターに接続されたWindows PC上でOBS Studioを立ち上げて受信して,模擬的なWebカメラに変換すれば良いようだ.Wi-Fiを経由すると映像遅延の問題が起きそうだが,とにかくトライしてみよう.

ソフトウエアのセットアップ

プログラムをインストールするだけなのだが,結構面倒な作業である.まずはUbuntu 18.04LTSがインストールされたLinux PC(CPUはIntel Core i3-9350KF)で作業した.おおまかな手順は以下のとおり.

まずgphoto2という,デジタルカメラを操るソフトをインストールする.これは,Ubuntu18.04からは以下のように,

sudo apt install gphoto2 libgphoto2-dev

簡単にインストールできる.

さらに,mjpg-streamerで動画を配信する準備をする.まずビルドに必要なソフトをインストールする.

sudo apt install build-essential imagemagick libv4l-dev libjpeg-dev cmake git

次に,/optにプログラム一式をダウンロードする.

cd /opt
sudo git clone https://github.com/jacksonliam/mjpg-streamer.git
cd mjpg-streamer/mjpg-streamer-experimental

mjpeg-streamerがインストールされたディレクトリにcdコマンドで移動したら,makeしてinstallしよう.

sudo make
sudo make install

ソフトのインストールはできたので,ここでカメラのストレージがマウントされている場合はアンマウントしておこう.コマンドラインから以下のとおり入力して正常に動作するのを確認する.(#で始まる行はコメント行なので入力しなくて良い)

#!/bin/sh 
# 露出補正 +2/3
gphoto2 --set-config exposurecompensation="0.666" 
# 絞りをF=4.2に固定
gphoto2 --set-config f-number="f/4.2" 
# ホワイトバランスをCluodyに設定
gphoto2 --set-config-value whitebalance="Cloudy"
# カメラから映像を取り込み,ストリーミングする
export LD_LIBRARY_PATH="$(pwd)"
./mjpg_streamer -i "./input_ptp2.so -u 10" -o "./output_http.so -w ./www --port 8081"

これは,startCamera.shというスクリプトファイルにしてmjpeg-streamerがインストールされたディレクトリに保存した.

これで準備は整ったので,Windows PCからブラウザでhttp://(コンピュータ名).local:8081/stream.htmlを開き,映像が映っているか確認する.ここで(コンピュータ名)はLinux PCのコンピュータ名(host_name)で,avahi-daemonがインストールされていると,IPアドレスは数字を指定する代わりに,host_name.localで代用することができる.映像が確認ができたら,OBS Studioを立ち上げ,ソースからブラウザを選び,入力にhttp://(コンピュータ名).local:8081/stream_simple.htmlを設定する.次にOBS StudioのツールメニューからVirtualCamを選択し,AutoStartをチェックする.最後に普段使っているWeb会議ソフトを立ち上げて,OBS-Cameraから動画を受信する.私の場合は,Microsoft Teamsが会社から指定されているので,これで確認した.

画像1

OBS Studioで映像をトリミングしてモニターしているところ.窓からの光が逆光となって最悪の条件だが,問題なく(カメが)映っているのがわかる.USBから得られる映像の解像度が640x428しかなく,Web会議で使うにしても,もう少しほしいのだが,これはカメラの仕様なのでいたしかたない.
OBS StudioとVirtualCamのインストールはこちらを参照してほしい.

使い方の手順

カメラが繋がったLinux PCから
・カメラのストレージがマウントされている場合は,アンマウントする.
・startCamera.shを実行する.

Web会議ソフトを使うWindows PCから
・OBS Studioを立ち上げ,映像を取り込む
・Web会議ソフトに映像を取り込んで,会議に参加する.

という手順になる.

まとめ

ここまで予想外に苦労したが,なんとか一眼レフを使ったWeb会議システムができあがった.私の場合,会社仕様のPCのためにちょっと複雑なシステムになってしまった.しかし,顔認識やオートフォーカスも正常に作動し.露出補正もできて,画質は格段に上がって満足している.懸念していた映像の遅延は,若干あるものの許容できるレベルだ.

次回は,カメラが繋がっているLinux PCの代わりにRaspberry Piを利用して,使い勝手の良いシステムにする予定だ.

この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?