Home Made Garbage

みんなのラズパイコンテスト ー見たいところに目が届くヘッドマウントディスプレイ「遊EYE離脱」

ホーム
電子工作
Raspberry Pi
WordPress
IOT

 

みんなのラズパイコンテスト2016に応募するために「遊EYE離脱」を作成しました!

機能

本機はヘッドマウントディスプレイと内視鏡型カメラで構成されています。

図1

図2

ヘッドセットのディスプレイにはRaspberry Pi 3を用いて右目用と左目用に同一の内視鏡カメラ映像2つがリアルタイムで表示されます。

%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-09-08-19-28-24

カメラを様々な方向や対象に向けることで、まるで目が体から離脱したような体験ができます。

使い方

機器を起動しヘッドマウントディスプレイを装着します。カメラを手に持ち対象物に向けます。
以下のようなシチュエーションで本機の有用性がより発揮されます。

  • ヘアチェック
    図3

 

  • ヒゲや鼻毛の処理
    図4

 

  • 耳かき
    図5png

仕組み

構成

%e3%83%95%e3%82%99%e3%83%ad%e3%83%83%e3%82%af%e5%9b%b3

Raspberry Pi 3に7インチIGZOディスプレイと内視鏡カメラを接続し電源にモバイルバッテリを使用した。ディスプレイを市販のVRゴーグルを加工して実装しヘッドマウントディスプレイを構成している。

ビックカメラ | BELL スマートフォン用[4〜6インチ] VRゴーグル3D ホワイト 3DVR-WH
BELLスマートフォン用[4〜6インチ] VRゴーグル3D ホワイト 3DVR-WHの購入ならビックカメラ公式通販サイト。価格、スペック情報、レビュー情報もあります。お店で貯めたポイントも使えます!

ラズパイ設定

経緯

最初は Raspberry Pi Zero での実装予定だったのですが、IGZOパネルが高精細ということもあり、カメラ画像を遅延無く表示させるには、画像サイズを320×240 位に落とさねばなりませんでした。

Raspberry Pi Zero に OpenCV を入れてWebカメラをキャプチャする

それだと、IGZOパネル上では上記の様に画面が小さすぎる為、Raspberry Pi Zero での実装を断念し、高性能な Raspberry Pi 3 を使用しました。

(ちなみにRaspberry Pi 2 はこのブログを動かしているサーバーにしています。)

設定

Raspberry Pi 3 セットアップ

まずは、Raspberry Pi 3 のセットアップ、IGZOパネルの接続、固定IPの設定を行いました。

Mac で Raspberry Pi 3 セットアップ(IGZOパネル接続、Wi-Fi固定IP迄)

Python版OpenCVのインストール

Raspberry Pi 3 に Python版OpenCV をインストールします。

内視鏡カメラの接続

こちらは接続しただけで認識されました。

OpenCV

Python コード

PYTHON コード 解説

ウィンドウの作成

ウィンドウは、ここで宣言された順番に表示されるので、表示順に下記のウィンドウを作成します。

  1. 黒背景用ウィンドウ
  2. 左目用カメラウィンドウ
  3. 右目用カメラウィンドウ
  4. カメラウィンドウのタイトルバーを消す為のウィンドウ

4についてですが、OpenCVのウィンドウはタイトルバーを消すことは出来ない様なので、苦肉の策として、タイトルバーの上に更に黒背景のウィンドウを重ねるという手段をとっています。

塗りつぶし用配列の作成

  1. IGZOパネルのウィンドウサイズ(1920*1200) 配列を作り、黒(0)で塗りつぶします。
  2. 前述の、タイトルバーを消す為のウィンドウサイズ(1920*275)配列を作り、黒で塗りつぶします。高さは、実際に画面を見ながら調節しました。
ウィンドウの配置

各ウィンドウの配置を行います。左上を0として、横、縦のピクセルを指定します。画面の配置は、最初は真ん中に置いてから画面を見ながら調整しました。

カメラを開く

カメラウィンドウのリサイズ

画面を見て丁度良い感じのサイズが1.2倍だったので、リサイズ用の変数をセットします。

最初、カメラの解像度がわからなかったため、whileの中に下記コードを入れて取得しました。

print すると、LXTerminal 上に フレーム毎に数値が出力されました。

背景ウィンドウの表示

背景ウィンドウはwhileの中に入れる必要が無いので、先に表示させます。
(最初、whileの中に入れてしまったのですが、それだと結構遅延が発生しました。)

画面の表示

フレーム取得、表示を繰り返します。

キャプチャ画面を取得します。

フレームが無い場合終了します。

先ほどセットしたサイズにリサイズします。

imshowで画面を表示します。ちなみにここでの順番は、表示順には関係ありませんでした。

エスケープキーを押したら終了するコードです。

終了時は、画面を破棄し、カメラを開放します。

 

実際に鼻の穴や耳の穴をみると、思いの外の臨場感で気持ち悪かったです。。。。。

追記(16/9/16)

Adafruit様のブログで紹介していただけました!

Nirvana is a head mounted endoscopic camera display #piday #raspberrypi @Raspberry_Pi
Cool project from HomeMadeGarbage on hackster.io: “Nirvana” consists of a head-mounted display and the endoscopic camera . The display of headset show the two real-time video of endosco…

追記(16/11/18)

みんなのラズパイコンテスト2016で優秀賞頂きました!!

追記(17/1/18)

ITproさんで紹介して頂きました!

見たいところに目が届くヘッドマウントディスプレイをラズパイで製作
 「遊EYE離脱」は、ヘッドマウントディスプレイに内視鏡型カメラを組み合わせたラズパイ電子工作です。ヘッドセットのディスプレイにはRaspberry Pi 3を用いており、右目用と左目用に同一の映像を表示します。カメラは内視鏡なのでさまざまな方向に向けることができ...

コメントを残す

メールアドレスが公開されることはありません。コメントのみでもOKです。

TOP