ネットワークカメラワークショップ02資料 - Tripodworks(トライポッド

Download Report

Transcript ネットワークカメラワークショップ02資料 - Tripodworks(トライポッド

トライポッドITセミナー
ネットワークカメラ
フレームワークを用いた
クリエイティブワークショップ
#2
トライポッドワークス株式会社
はじめに
 本セミナーで取り扱う「ネットワークカメラ」は
以下の機能を有するものとする
•
製品自身で自律的に静止画/動画を撮影することができる
•
製品単体でLAN or WANに接続することができる
•
製品自身がサーバーとして稼働することができる
2013/4/26
Copyright (C) Tripodworks Co., Ltd. All right reserved
2
はじめに
 ネットワークカメラの低価格化
コンシューマ向けカメラは1万円以下で入手可。
ネットワークカメラが気軽に利用可能に。
価格.comの売れ筋
ランキングTOP10のうち
半数が1万円以下!
画像引用: kakaku.com
ただし、扱いづらい点も…
•
ブラウザ/アプリ/クラウドを経由しなければ映像が見られない
•
製品ごとに仕様が異なる。
•
クライアントが増えると極端に動作が遅くなることも。
↓
あったらいいな カメラフレームワーク!
2013/4/26
Copyright (C) Tripodworks Co., Ltd. All right reserved
3
はじめに
 一般的な使い方
INTERNET
Cloud
2013/4/26
LAN
Copyright (C) Tripodworks Co., Ltd. All right reserved
4
Network Camera
camfwd
Application
camfwlib
deQueue
enQueue
メッセージキュー
Camera
Command
Camera Control
A-Camera
Plugin
B-Camera
Plugin
C-Camera
Plugin
Storage Engine
カメラ初期化・接続開始
カメラ設定変更
キャプチャ開始・終了
Daemon
Command
接続カメラリスト
デーモンステータス
Storage
Command
画像データ一覧取得
画像データ実体取得
Common
Response
共通レスポンス体系
File
Plugin
Database
Plugin
Memory
Plugin
Config
2013/4/26
Global Setting
Plugin’s Parameter
Plugin Select
Queuing Parameter
Copyright (C) Tripodworks Co., Ltd. All right reserved
5
Network Camera
マシン1台構成
camfwd
Application
Storage
camfwlib
アプリ・カメラ間通信遅延は最少。
ストレージタイプをメモリとすると、画像処理にも使いやすい。
Copyright (C) Tripodworks Co., Ltd. All right reserved
Network Camera
マシン2台構成
camfwd
Storage
Application
camfwlib
camfwd と camfwlib のマシンを分けることで負荷を分散。
Copyright (C) Tripodworks Co., Ltd. All right reserved
Network Camera
外部ストレージ構成
Storage
Application
camfwd
camfwlib
FTPサーバや、Google, Amazon 等のクラウドを利用する場合。
ストレージが不要になることでアプリ側のマシンに
安価なボードコンピュータの利用も可能。
Copyright (C) Tripodworks Co., Ltd. All right reserved
Network Camera
camfwd
Application.py
ソケット通信
camfwlib.py
Webサーバ
メッセージキュー
Application.c
ソケット通信
camfwlib.c
画像処理
メッセージキュー
Application.java
ソケット通信
camfwlib.java
Androidアプリ
メッセージキュー
9
2013/4/26
::
Network Camera
camfwd
Application
camfwlib
deQueue
enQueue
メッセージキュー
Camera
Command
Camera Control
A-Camera
Plugin
Daemon
Command
B-Camera
Plugin
Storage
Command
C-Camera
Plugin
Common
Response
Storage Engine
File
Plugin
Database
Plugin
Memory
Plugin
Config
2013/4/26
Global Setting
Plugin’s Parameter
Plugin Select
Queuing Parameter
10
使用カメラ紹介
 製品名: iPUX Cube IP Camera ICS303C (台湾Fitivision社製)
 1/5インチCMOSセンサー搭載
 最大解像度640×480(30万画素)、最大フレームレート30fps
 Ethernet(100Base-T)、Wi-Fi(IEEE802.11 b/g/n)搭載
 動画記録形式: MJPEG
 ナイトモード搭載
 動体検知機能搭載
 価格: 45台湾ドル
(約4000~5000円ぐらい)
2013/4/26
Copyright (C) Tripodworks Co., Ltd. All right reserved
11
使用カメラのインターフェース(一部)
HTTPサーバとして機能し、Webページの提供だけではなく、
以下のような機能を有する。
 http://192.168.1.30/cgi/admin/restart.cgi
Method:GET
カメラを再起動する
 http://192.168.1.30/cgi/mjpg/mjpeg.cgi
Method:GET
MJPEGストリーム映像を返す
 http://192.168.1.30/cgi/jpg/image.cgi
Method:GET
jpeg画像を返す
 http://192.168.1.30/cgi/admin/param.cgi
Method:GET/POST
カメラのパラメータを返す、設定する
2013/4/26
Copyright (C) Tripodworks Co., Ltd. All right reserved
12
camfwlib API
camfwsemi_130628/index.html を参照。
2013/4/26
Copyright (C) Tripodworks Co., Ltd. All right reserved
13
サンプル実行環境
お使いいただく環境は Ubuntuです。
Linuxでは、Pythonは標準インストールされています。
 環境構築
1. VirtualBoxのインストール
VirtualBox-4.2-14-86644-Win.exe よりインストールします。
2. 仮想マシンファイルのインポート
VirtualBoxのインストールが終了したら起動し、「ファイル →
仮想アプライアンスのインポート」から D仮想マシンファイル、ubuntu-ja-12.10-i386.ova を
インポートします。
2013/4/26
Copyright (C) Tripodworks Co., Ltd. All right reserved
14
サンプル実行環境
 環境構築
3. Ubuntuを立ち上げる
仮想マシンのインポートが終了したら「起動」から仮想マシンを起動、ログインします。
アカウント名:user
パスワード:camera
2013/4/26
Copyright (C) Tripodworks Co., Ltd. All right reserved
15
サンプル実行環境
 環境構築
4. 端末(ターミナル)の起動
ランチャーから「Dashホーム」を起動
検索ボックスに「Term」と入力
「端末」があるのでこれを起動
2013/4/26
Copyright (C) Tripodworks Co., Ltd. All right reserved
16
サンプル実行環境
 環境構築
5. サンプルプログラム
ホームディレクトリにある camfwsemi_130628/以下に必要なファイルがあります。
2013/4/26
Copyright (C) Tripodworks Co., Ltd. All right reserved
17
サンプルを動かしてみよう
 サンプル実行の方法
端末で下記の順番でコマンドを入力してください。
$ cd camfwsemi_130628/
$ python sample.py
※ サンプルは動き続けます。適当なタイミングで Ctrl+C を押して止めてください。
2013/4/26
Copyright (C) Tripodworks Co., Ltd. All right reserved
18
撮影した画像を確認してみよう
 画像の確認方法
下記の手順で確認してください。
1. ブラウザを立ち上げます。
2. camfwsemi_130628/sample.html ファイルをブラウザ上にドラッグ&ドロップします。
3. 3つのカメラの映像が表示されます。これらの画像は周期的に更新されます。
2013/4/26
Copyright (C) Tripodworks Co., Ltd. All right reserved
19
サンプル解説
 ファイル名: sample.py
# カメラフレームワーククラスのインスタンス生成。
# この時、camfwd側のIPアドレス、ポート番号を設定可能。
# 併せて、ログの出力先ファイルとレベルを設定。
cf = camfwClient (‘192.168.1.30’, 15680, ‘./camfw.log’, camfwlib.DEBUG)
# get_camlist()メソッドにより、camfwdが認識しているカメラのIDを取得(リスト型)
cam_list = cf.get_camlist()
# cam_list の中身は、[ ‘cam1’, ‘cam2’, ‘cam3’ ]
# 取得したカメラのIDを出力。レベルはDEBUG。
cf.log(camfwlib.DEBUG, ‘returned camera id list : ‘ + ‘ ‘.join(cam_list))
2013/4/26
Copyright (C) Tripodworks Co., Ltd. All right reserved
20
サンプル解説
 ファイル名: sample.py
while True :
# IDを1つずつ引数として与え、get_snapshot()をコール。各カメラのスナップショットを取得。
for cam in cam_list:
filepath = path + cam + ‘.jpg’
# カメラのIDとファイルパスが引数。成功時はTrueが返る。
res = cf.get_snapshot(cam, filepath)
if res == True :
# レベルが’DEBUG’ のログメッセージを出力
cf.log(‘DEBUG’, filepath + ‘ updated’)
#インターバル(2秒)を挟んで、同じ処理を繰り返す。
time.sleep(2)
2013/4/26
Copyright (C) Tripodworks Co., Ltd. All right reserved
21
Pythonコードの読み方
データは全てオブジェクト。整数、文字列等のデータも然り。
ここでは、文字列オブジェクトが持つ join()メソッドをコール。
cf = camfwlib.camfwClient(‘192.168.1.30’, 15680, ‘./camfw.log’, camfwlib.DEBUG)
変数の型定義は不要
cam_list = cf.get_cameralist()
cf.log(camfwlib.DEBUG, ‘returned camera id list : ‘ + ‘ ‘.join(cam_list))
while True :
文字列オブジェクト同士を足し算して、
文字列を連結。
for cam in cam_list:
filepath = path + cam + ‘.jpg’
res = cf.get_snapshot(cam, filepath)
if res == True :
cf.log(‘DEBUG’, filepath + ‘ updated’)
time.sleep(2)
このインデントされた行が if 文の中身
このインデントされた行が while 文の中身
このインデントされた行が for 文の中身
22
サンプル解説
 ファイル名: sample.html
sample.py は周期的に各カメラ(cam1, cam2, cam3)のスナップショットを取得、
それぞれファイルに上書きします。
sample.html は周期的に、そのファイルを参照します。
中身は、Javascript で記述しており、周期的に各画像ファイルを参照するため、
ブラウザ上に表示されるカメラ画像も更新されます。
2013/4/26
Copyright (C) Tripodworks Co., Ltd. All right reserved
23
今後の開催予定
 「ネットワークカメラフレームワークを用いた
クリエイティブワークショップ」は全5回の開催を予定しています
 第3回目: 8/23 (金)
 第4回目: 10/25 (金)
 第5回目: 12/27 (金)
2013/4/26
Copyright (C) Tripodworks Co., Ltd. All right reserved
24
2013/4/26
Copyright (C) Tripodworks Co., Ltd. All right reserved
25
雑談
 Sphinx ・・・ Pythonベースのドキュメント生成ツール
様々なフォーマットに対応
HTML, TEXT, MAN, JSON, HTMLHELP, EPUB, LATEX, PDF, TEXINFO, INFO ・・・
豊富な拡張パッケージ
BLOCKDIAG, SEQDIAG, NWDIAG等を使うと、テキストで図を挿入することも可能
ソースコード内にドキュメントを埋め込める
ソースコード内にテストコードを記述し、単体テスト実施可能
文法は ReStructuredText (REST)
2013/4/26
Copyright (C) Tripodworks Co., Ltd. All right reserved
26