身近なものでIoT!使わなくなったiPhoneで顔認識する監視カメラをつくってみた!

身近なものでIoT!使わなくなったiPhoneで顔認識する監視カメラをつくってみた!

ソフトバンク・au・ドコモの方は、公式のオンラインショップを利用すれば頭金不要で通常のショップよりお得に購入できます。

最近IoTという言葉をよく聞きますね!
IoTとはInternet of Thingsという略称で、和訳で「モノのインターネット」と言われております。

wikipediaより引用してみます

モノのインターネット(Internet of Things、IoT)は、一意に識別可能な「もの」がインターネット/クラウドに接続され、情報交換することにより相互に制御する仕組みである[1]。「Internet of Everything」や「Smart Everything」、「サービスのモノ化」ともいう[2][3][4]。「Internet of Things」という用語は、1999年にケビン・アシュトン(英語版)(Kevin Ashton)が始めて使った用語である[5]。ここでいう「もの」とは、スマートフォンのようにIPアドレスを持つものや、IPアドレスを持つセンサーから検知可能なRFIDタグを付けた商品や、IPアドレスを持った機器に格納されたコンテンツのことである。

世の中にあるあらゆる「もの」がインターネットにつながるイメージですね。
以前より記事にしているibeaconもIoTとしてくくることも考えれます。

私の中でのIoTとは
「今までインターネットにつながっていなかったものがインターネットにつながる」
と思っております。

しかしながら今現在、技術の普及はありながらも身の回りにIoTを実感できる機器は少ないですので、私なりの「簡単に体験できるIoT」を作ってみました。

準備

【用意したもの】

 ・iPhone5s(椅子を撮影しつづけております)と Webサーバー

image04

【デモ画面】

 ◼︎アプリ側
 ・侵入者がきた!!
  image07

 ◼︎サーバー側
 ・インターネット経由でサーバーに画像を送信してWEBから見ることができます。

image06 

【全体の概要】

 ◼︎アプリ側
  1:アプリ起動後リアルタイムに映像を撮影し続けます

  2:顔を検知したらサーバーに画像をPOST送信します。
 以降延々とこれを繰り返します。
 
 ◼︎サーバー側
  1:受け取った画像を任意のフォルダの中に保存します
  2:HTML側ではそのimgを表示し続けます。

実装部分

アプリ側(Objective-c)

・AVCaptureSession
 これはカメラやマイクの入出力を管理するためのクラスです
 このsessionに設定を加えて
 [c][session startRunning];[/c]  とすると撮影が始まります。

 画面への表示は
・AVCaptureVideoPreviewLayer
 を使います。
[c] layer = [AVCaptureVideoPreviewLayer layerWithSession:session];[/c]  こうすることで、上記のAVCaptureSessionの動画を画面に表示しつづけます。

・AVCaptureMetadataOutput
・AVCaptureVideoDataOutput
 これらのクラスを先ほどの AVCaptureSessionに追加します
 [c][session addOutput:~][/c]  そしてdelegateを設定すると
 撮影されている動画のリアルタイムな情報を取得することが可能になります。
 ↓

[c]-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection{[/c]  1秒間にすごい回数このイベントが呼ばれており、
 CMSampleBufferRefから画像を取得することが可能です。
 ただし、この段階では顔を検知することはできません。

[c]- (void)captureOutput:(AVCaptureOutput *)captureOutput
didOutputMetadataObjects:(NSArray *)metadataObjects
fromConnection:(AVCaptureConnection *)connection[/c]  このイベントはとても便利です。
 「様々な1次元2次元バーコード情報」+「顔」を認識した時に、このイベントがよばれます。

この2つの組み合わせて顔認識された瞬間に画像を取得しています。
そして取得した画像を非同期通信(NSURLConnection)にてサーバーにPOST送信しています。
 
 ※注意点1 取得した画像をそのままのサイズで送信するととてもサイズが大きく送信に時間がかかるのでサイズを小さくしましょう!
 ※注意点2 上記delegateイベント内で非同期通信がうまくできない可能性があるので、別の箇所で実装してみるといいと思います。

サーバー側(php)

サーバー側では$_FILESより送信された画像情報を取得し、move_uploaded_fileにてphpファイルが置かれているフォルダと同じ箇所に随時画像を上書きしています。

[php]
[/php] たった2行ですがこんな感じです。

拡張例

 ・サーバーに画像を送信した同時に、手元にある端末にプッシュ通知を送ることですぐに侵入者の発見/通報をすることができますね!(メールでも可)

 ・アプリ側では侵入者が発見されたタイミングでビープ音を鳴らすことで侵入者を驚かすこともできます。

最後に

 今回はiPhone1台のみで作ってみましたが、これが複数あれば玄関/窓/寝室 いろんなところに設置して安心して旅行に出かけることができそうですね。

 普通の監視カメラをわざわざ買うのは高いですし、身の回りにあるiPhoneをリサイクルしてみてはいかがでしょうか?

 使わなくなったiPhoneによるIoTを私は「IoI(Internet of iPhone iPhoneのインターネット化)
→そのままですね。

 「IoT(Internet of Trash 廃棄物のインターネット化)
→「ゴミ」としたかったのですが、iPhoneは私の財産ですので言い方を変えて廃棄物とさせていただきました。

 などと名付けたいと思います。

ソフトバンク・au・ドコモの方は、公式のオンラインショップを利用すれば頭金不要で通常のショップよりお得に購入できます。

【週刊bitWave】(メルマガ)始めました!

登録はこちらからメールアドレスを入力してお申込みください。

ご登録いただいたメールアドレスは 【週刊bitWave】の更新情報の配信にのみ使用します。

個人情報の取扱いに関しては、「プライバシーポリシー」をご確認ください。解除はいつでもこちらから行うことが可能です。

あなたにおすすめ

  • [HTML5] Desktopにメッセージを送るNotification こんにちは。ハンナです。 最近注目を集めているチームコミュニケーションツールの【Slack】のウェブバージョンを見るとプログラムを設置したこともないのにBrowserではなくDesktopにアラームが表示されていることを …
  • docomoのボットAPI「Repl-AI」を試してみた 近年、様々なツールがボット用のAPIを公開して話題になっていますね。 そんな中、先日NTTドコモから対話式チャットボットプラットフォーム「Repl-AI」のβ版が公開されました。 Repl-AIの売りは「コードを一行も …
  • 【初心者向け】Seleniumをまわしてみよう③ こんにちは。2月は毎日筋トレを欠かさなかったM.Sです。 ちなみに、持続のコツは短時間で集中して行うことです。筋トレは10分間と決めています。 このSelenium講座も継続して連載できていますねw 早速ですが、 …
  • 形態素解析をしよう(2) どうも、さむらいです。 前回スタートしました企画『改めて形態素解析について復習してみました。』の続きです。 <参照> ・bitWave過去記事『形態素解析をしよう(1)』。 今回の命題は前回の宣言通り『IGO-PHPが …