SlideShare a Scribd company logo
1 of 21
SensorBeeのご紹介
Gopher Night #1
@disktnk
2016/03/17
自己紹介
 田中大輔 (@disktnk)
– 某ピー社アニオタ枠採用
– 元金融工学ライブラリ屋さん
– I love Java!
2
コンテンツ
 本日話すこと
– 3/14 にOSS化した SensorBee の紹介
– BQLの簡単な説明
– UDFなどの拡張について
– 実例と、簡単なデモ
 本日話さないこと
– Go言語による実装の詳細
– 機械学習について。Deep Learningについて。
– 機械学習を含めた SensorBee の説明については、昨日行われた「第15回
elasticsearch勉強会」の資料をご参照ください
Elasticsearchと機械学習を実際に連携させる
http://www.slideshare.net/nobu_k/elasticsearch-59627321
3
(特に) ネットワークのエッジ / フォグにおいて
ストリームデータに対して
機械学習 (特にDeep Learning) を利用した
非構造化データ向けのETLを
低レイテンシで適用することを目的としたツール
Lightweight Stream Processing Engine for IoT
http://sensorbee.io
4
ちょっとだけ詳しい説明
 Stateful
– 非構造化データの加工・転送を担う
– プラグインと連携することにより、特徴量抽出や機械学習が可能。
 Expressive
– CQL (Continuous Query Language) の方言である BQL という、SQLライクなスク
リプトにより操作。
– スキーマレスであり、JSONライクな構造データを扱う
 Lightweight
– 実行ファイルは大体30MBくらい。Go言語で書かれている (←ここにいる最大の理由)
– OS は特に限定していないが、普段は Linux や Mac で開発している
– Raspberry Pi でも動く (確認済)
– Windows でももちろん動くが、一部ブラグインでは要修正 (cgo周り)
5
サンプル例:監視カメラから人物認識をやりたい
6
{
"id": 123,
"age": ”35",
"gender": “female",
"location": {
"x": 252.1,
"y": 179.3
},
…
}
{
"id": 131,
"age": ”22",
"gender": “male",
"location": {
"x": 120.5,
"y": 80.2
},
…
}
サンプル例:監視カメラからデータを取得
7
[Source]
監視カメラデータ=フレームデータを
取得
{
"id": 123,
"age": ”35",
"gender": “female",
"location": {
"x": 252.1,
"y": 179.3
},
…
}
{
"id": 131,
"age": ”22",
"gender": “male",
"location": {
"x": 120.5,
"y": 80.2
},
…
}
サンプル例:画像データから人物を切り取り
8
[Stream+UDF]
人物の抽出
{
"id": 123,
"age": ”35",
"gender": “female",
"location": {
"x": 252.1,
"y": 179.3
},
…
}
{
"id": 131,
"age": ”22",
"gender": “male",
"location": {
"x": 120.5,
"y": 80.2
},
…
}
サンプル例:切り取った人物画像を解析
9
[Stream+UDF]
人物データの解析
{
"id": 123,
"age": ”35",
"gender": “female",
"location": {
"x": 252.1,
"y": 179.3
},
…
}
{
"id": 131,
"age": ”22",
"gender": “male",
"location": {
"x": 120.5,
"y": 80.2
},
…
}
サンプル例:解析データを出力
10
{
"id": 123,
"age": ”35",
"gender": “female",
"location": {
"x": 252.1,
"y": 179.3
},
…
}
{
"id": 131,
"age": ”22",
"gender": “male",
"location": {
"x": 120.5,
"y": 80.2
},
…
}
[Sink]
解析データの保存
Source
 (非構造化)データのStreaming
– カメラの画像データ
– (web)ログ
– fluentd
– MQTT subscribe etc...
– センサーデータ
– 温度データ
– 振動データ etc...
– 各種TYPEは独自に拡張可能
– “opencv_capture_from_uri”
はopencvプラグインにある
11
BQL例
CREATE SOURCE camera0
TYPE opencv_capture_from_uri
WITH
uri=“http://webcamera...”,
frame_skip=0,
next_frame_error=false;
Stream
 データの操作
– 結合 (Join)
– 集約 (Aggregation)
– 抽出 (Filtering) etc...
 ストリームされるデータはJSONのよ
うにアクセス可能
– camera0:* の部分
 右記例では、”detect_human” や
”recognize” という人物認識のUDF
を作成したという設定
12
BQL例
CREATE STREAM regions0
AS SELECT RSTREAM
detect_human(camera0:*) AS
detected
FROM camera0 [RANGE 1 TUPLES];
CREATE STREAM recognized
AS SELECT RSTREAM
recognize(’params',
regions0:detected)
AS recognized
FROM regions0 [RANGE 1
TUPLES];
Sink
 データをDBやクラウドソースに出力
– fluentd
– MQTT publish
– DBへ直接INSERT etc...
– Souceと同じく各種TYPEは独自に拡
張可能
 右記例では、解析した結果を fluentd
を使用して出力、という設定
– fluentd source/sink は fluentdプラ
グインにある
13
BQL例
CREATE SINK analyzed
TYPE fluentd;
CREATE STREAM tagged_result
AS SELECT RSTREAM
“analyzed” AS tag,
recognized:* AS data
FROM recognized [RANGE 1
TUPLES];
INSERT INTO analyzed
FROM tagged_result;
デモ: 顔認識
 OpenCV の CascadeClassifier を使用した顔認識
– 今回は ultraist様のLBPモデルを使用
http://ultraist.hatenablog.com/entry/20110718/1310965532
14
ここで顔認識を行う
→x,y,w,h を出力するUDF
デモ: 顔認識→からの笑い男
 ハッカーの憧れ
15
x,y,w,h を元に画像を貼るUDF
デモ: 顔認識→からの笑い男→もう一度動画へ
 OpenCV の VideoWriter を使用して動画にまとめる
16
動画ファイル
を作るSink
デモ: ラブライブOP (第1期) と笑い男
17
デモ: BQL全体像 (ご参考までに)
18
CREATE PAUSED SOURCE camera TYPE
opencv_capture_from_uri WITH
uri="videos/lovelive1_op.mp4",
frame_skip=0, next_frame_error=false;
CREATE STATE face_detector TYPE
pencv_cascade_classifier WITH
file="data/lbpcascade_animeface.xml”;
CREATE STREAM detected AS SELECT
RSTREAM
opencv_detect_multi_scale("face_detect
or", c:*) AS rects, c:* AS raw_image
FROM camera [RANGE 1 TUPLES] AS c;
-- draw warai-otoko
CREATE STATE warai TYPE
opencv_shared_image WITH
file="data/warai_flat.png”;
CREATE SINK warai_avi TYPE
oencv_avi_writer WITH
file_name="result/warai", fps=30;
CREATE STREAM warai_avi_images AS
SELECT RSTREAM
opencv_mount_image("warai",
d:raw_image, d:rects) AS img FROM
detected [RANGE 1 TUPLES] AS d;
CREATE STREAM fmt_warai_avi_images AS
SELECT RSTREAM wai:img.format AS
format, wai:img.width AS width,
wai:img.height AS height,
wai:img.image AS image FROM
warai_avi_images [RANGE 1 TUPLES] AS
wai
INSERT INTO warai_avi FROM
fmt_warai_avi_images;
デモ: BQL全体像 (ご参考までに)
19
CREATE PAUSED SOURCE camera TYPE
opencv_capture_from_uri WITH
uri="videos/lovelive1_op.mp4",
frame_skip=0, next_frame_error=false;
CREATE STATE face_detector TYPE
pencv_cascade_classifier WITH
file="data/lbpcascade_animeface.xml”;
CREATE STREAM detected AS SELECT
RSTREAM
opencv_detect_multi_scale("face_detect
or", c:*) AS rects, c:* AS raw_image
FROM camera [RANGE 1 TUPLES] AS c;
-- draw warai-otoko
CREATE STATE warai TYPE
opencv_shared_image WITH
file="data/warai_flat.png”;
CREATE SINK warai_avi TYPE
oencv_avi_writer WITH
file_name="result/warai", fps=30;
CREATE STREAM warai_avi_images AS
SELECT RSTREAM
opencv_mount_image("warai",
d:raw_image, d:rects) AS img FROM
detected [RANGE 1 TUPLES] AS d;
CREATE STREAM fmt_warai_avi_images AS
SELECT RSTREAM wai:img.format AS
format, wai:img.width AS width,
wai:img.height AS height,
wai:img.image AS image FROM
warai_avi_images [RANGE 1 TUPLES] AS
wai
INSERT INTO warai_avi FROM
fmt_warai_avi_images;
すみません、このSinkはまだ公
開してません m(__)m
他の部分は公開済
→opencvプラグインを使った
tutorialは作る予定 (issue #27)
Autonomous robot car control demonstration in CES2016
 https://www.youtube.com/watch?v=7A9UwxvgcV0
– こちらはちゃんとした実用例、バックエンドにSensorBeeを使用
20
ぜひ使ってみてください!
 http://sensorbee.io
 http://docs.sensorbee.io/en/latest/
 https://github.com/sensorbee/sensorbee
 今回のデモ動画: https://github.com/disktnk/sb_facedetect_demo 参照
21

More Related Content

What's hot

Deep Learningハンズオン勉強会「Caffeで画像分類を試してみようの会」
Deep Learningハンズオン勉強会「Caffeで画像分類を試してみようの会」Deep Learningハンズオン勉強会「Caffeで画像分類を試してみようの会」
Deep Learningハンズオン勉強会「Caffeで画像分類を試してみようの会」Yasuyuki Sugai
 
Kerasで深層学習を実践する
Kerasで深層学習を実践するKerasで深層学習を実践する
Kerasで深層学習を実践するKazuaki Tanida
 
Jupyter Notebookでscikit-learnを使った機械学習・画像処理の基本
Jupyter Notebookでscikit-learnを使った機械学習・画像処理の基本Jupyter Notebookでscikit-learnを使った機械学習・画像処理の基本
Jupyter Notebookでscikit-learnを使った機械学習・画像処理の基本Norihiko Nakabayashi
 
Jubatus使ってみた 作ってみたJubatus
Jubatus使ってみた 作ってみたJubatusJubatus使ってみた 作ってみたJubatus
Jubatus使ってみた 作ってみたJubatusJubatusOfficial
 
「深層学習」の本に出てきたデータセット達
「深層学習」の本に出てきたデータセット達「深層学習」の本に出てきたデータセット達
「深層学習」の本に出てきたデータセット達Hiromasa Ohashi
 
Jubakit の紹介
Jubakit の紹介Jubakit の紹介
Jubakit の紹介kmaehashi
 
Introduction to Chainer and CuPy
Introduction to Chainer and CuPyIntroduction to Chainer and CuPy
Introduction to Chainer and CuPyKenta Oono
 
Jubatus分類器の活用テクニック
Jubatus分類器の活用テクニックJubatus分類器の活用テクニック
Jubatus分類器の活用テクニックJubatusOfficial
 
PythonによるCVアルゴリズム実装
PythonによるCVアルゴリズム実装PythonによるCVアルゴリズム実装
PythonによるCVアルゴリズム実装Hirokatsu Kataoka
 
Python 機械学習プログラミング データ分析ライブラリー解説編
Python 機械学習プログラミング データ分析ライブラリー解説編Python 機械学習プログラミング データ分析ライブラリー解説編
Python 機械学習プログラミング データ分析ライブラリー解説編Etsuji Nakai
 
Development and Experiment of Deep Learning with Caffe and maf
Development and Experiment of Deep Learning with Caffe and mafDevelopment and Experiment of Deep Learning with Caffe and maf
Development and Experiment of Deep Learning with Caffe and mafKenta Oono
 
Software for Edge Heavy Computing @ INTEROP 2016 Tokyo
Software for Edge Heavy Computing @ INTEROP 2016 TokyoSoftware for Edge Heavy Computing @ INTEROP 2016 Tokyo
Software for Edge Heavy Computing @ INTEROP 2016 TokyoShohei Hido
 
Deep Learning Implementations: pylearn2 and torch7 (JNNS 2015)
Deep Learning Implementations: pylearn2 and torch7 (JNNS 2015)Deep Learning Implementations: pylearn2 and torch7 (JNNS 2015)
Deep Learning Implementations: pylearn2 and torch7 (JNNS 2015)Kotaro Nakayama
 
分類問題 - 機械学習ライブラリ scikit-learn の活用
分類問題 - 機械学習ライブラリ scikit-learn の活用分類問題 - 機械学習ライブラリ scikit-learn の活用
分類問題 - 機械学習ライブラリ scikit-learn の活用y-uti
 
Chainer on Azure 2 年の歴史
Chainer on Azure 2 年の歴史Chainer on Azure 2 年の歴史
Chainer on Azure 2 年の歴史Hirono Jumpei
 
Pythonによる機械学習入門 ~SVMからDeep Learningまで~
Pythonによる機械学習入門 ~SVMからDeep Learningまで~Pythonによる機械学習入門 ~SVMからDeep Learningまで~
Pythonによる機械学習入門 ~SVMからDeep Learningまで~Yasutomo Kawanishi
 
ルールベースから機械学習への道 公開用
ルールベースから機械学習への道 公開用ルールベースから機械学習への道 公開用
ルールベースから機械学習への道 公開用nishio
 
Chainerの使い方と 自然言語処理への応用
Chainerの使い方と自然言語処理への応用Chainerの使い方と自然言語処理への応用
Chainerの使い方と 自然言語処理への応用Yuya Unno
 
Jubatusのリアルタイム分散レコメンデーション@TokyoWebmining#17
Jubatusのリアルタイム分散レコメンデーション@TokyoWebmining#17Jubatusのリアルタイム分散レコメンデーション@TokyoWebmining#17
Jubatusのリアルタイム分散レコメンデーション@TokyoWebmining#17Yuya Unno
 
画像処理でのPythonの利用
画像処理でのPythonの利用画像処理でのPythonの利用
画像処理でのPythonの利用Yasutomo Kawanishi
 

What's hot (20)

Deep Learningハンズオン勉強会「Caffeで画像分類を試してみようの会」
Deep Learningハンズオン勉強会「Caffeで画像分類を試してみようの会」Deep Learningハンズオン勉強会「Caffeで画像分類を試してみようの会」
Deep Learningハンズオン勉強会「Caffeで画像分類を試してみようの会」
 
Kerasで深層学習を実践する
Kerasで深層学習を実践するKerasで深層学習を実践する
Kerasで深層学習を実践する
 
Jupyter Notebookでscikit-learnを使った機械学習・画像処理の基本
Jupyter Notebookでscikit-learnを使った機械学習・画像処理の基本Jupyter Notebookでscikit-learnを使った機械学習・画像処理の基本
Jupyter Notebookでscikit-learnを使った機械学習・画像処理の基本
 
Jubatus使ってみた 作ってみたJubatus
Jubatus使ってみた 作ってみたJubatusJubatus使ってみた 作ってみたJubatus
Jubatus使ってみた 作ってみたJubatus
 
「深層学習」の本に出てきたデータセット達
「深層学習」の本に出てきたデータセット達「深層学習」の本に出てきたデータセット達
「深層学習」の本に出てきたデータセット達
 
Jubakit の紹介
Jubakit の紹介Jubakit の紹介
Jubakit の紹介
 
Introduction to Chainer and CuPy
Introduction to Chainer and CuPyIntroduction to Chainer and CuPy
Introduction to Chainer and CuPy
 
Jubatus分類器の活用テクニック
Jubatus分類器の活用テクニックJubatus分類器の活用テクニック
Jubatus分類器の活用テクニック
 
PythonによるCVアルゴリズム実装
PythonによるCVアルゴリズム実装PythonによるCVアルゴリズム実装
PythonによるCVアルゴリズム実装
 
Python 機械学習プログラミング データ分析ライブラリー解説編
Python 機械学習プログラミング データ分析ライブラリー解説編Python 機械学習プログラミング データ分析ライブラリー解説編
Python 機械学習プログラミング データ分析ライブラリー解説編
 
Development and Experiment of Deep Learning with Caffe and maf
Development and Experiment of Deep Learning with Caffe and mafDevelopment and Experiment of Deep Learning with Caffe and maf
Development and Experiment of Deep Learning with Caffe and maf
 
Software for Edge Heavy Computing @ INTEROP 2016 Tokyo
Software for Edge Heavy Computing @ INTEROP 2016 TokyoSoftware for Edge Heavy Computing @ INTEROP 2016 Tokyo
Software for Edge Heavy Computing @ INTEROP 2016 Tokyo
 
Deep Learning Implementations: pylearn2 and torch7 (JNNS 2015)
Deep Learning Implementations: pylearn2 and torch7 (JNNS 2015)Deep Learning Implementations: pylearn2 and torch7 (JNNS 2015)
Deep Learning Implementations: pylearn2 and torch7 (JNNS 2015)
 
分類問題 - 機械学習ライブラリ scikit-learn の活用
分類問題 - 機械学習ライブラリ scikit-learn の活用分類問題 - 機械学習ライブラリ scikit-learn の活用
分類問題 - 機械学習ライブラリ scikit-learn の活用
 
Chainer on Azure 2 年の歴史
Chainer on Azure 2 年の歴史Chainer on Azure 2 年の歴史
Chainer on Azure 2 年の歴史
 
Pythonによる機械学習入門 ~SVMからDeep Learningまで~
Pythonによる機械学習入門 ~SVMからDeep Learningまで~Pythonによる機械学習入門 ~SVMからDeep Learningまで~
Pythonによる機械学習入門 ~SVMからDeep Learningまで~
 
ルールベースから機械学習への道 公開用
ルールベースから機械学習への道 公開用ルールベースから機械学習への道 公開用
ルールベースから機械学習への道 公開用
 
Chainerの使い方と 自然言語処理への応用
Chainerの使い方と自然言語処理への応用Chainerの使い方と自然言語処理への応用
Chainerの使い方と 自然言語処理への応用
 
Jubatusのリアルタイム分散レコメンデーション@TokyoWebmining#17
Jubatusのリアルタイム分散レコメンデーション@TokyoWebmining#17Jubatusのリアルタイム分散レコメンデーション@TokyoWebmining#17
Jubatusのリアルタイム分散レコメンデーション@TokyoWebmining#17
 
画像処理でのPythonの利用
画像処理でのPythonの利用画像処理でのPythonの利用
画像処理でのPythonの利用
 

Similar to SensorBeeのご紹介

OpenCVをAndroidで動かしてみた
OpenCVをAndroidで動かしてみたOpenCVをAndroidで動かしてみた
OpenCVをAndroidで動かしてみた徹 上野山
 
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011Hiroh Satoh
 
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!Masaki Muranaka
 
2017年05月27日 AITCシニア技術者勉強会 第6回「OpenCV入門」
2017年05月27日 AITCシニア技術者勉強会 第6回「OpenCV入門」2017年05月27日 AITCシニア技術者勉強会 第6回「OpenCV入門」
2017年05月27日 AITCシニア技術者勉強会 第6回「OpenCV入門」aitc_jp
 
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
2020/06/16 tsjp-azure-staticwebapps-vs_codespacesIssei Hiraoka
 
Core Graphics on watchOS 2
Core Graphics on watchOS 2Core Graphics on watchOS 2
Core Graphics on watchOS 2Shuichi Tsutsumi
 
NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法Naruto TAKAHASHI
 
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしようYasuhiro Yoshimura
 
Stack2017 自動化困難な状況での活動方法
Stack2017 自動化困難な状況での活動方法Stack2017 自動化困難な状況での活動方法
Stack2017 自動化困難な状況での活動方法Tatsuya Ishikawa
 
【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMat
【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMat【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMat
【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMatYasuhiro Yoshimura
 
runC概要と使い方
runC概要と使い方runC概要と使い方
runC概要と使い方Yuji Oshima
 
OSS奨励賞受賞プレゼン 活動紹介
OSS奨励賞受賞プレゼン 活動紹介OSS奨励賞受賞プレゼン 活動紹介
OSS奨励賞受賞プレゼン 活動紹介Hiromu Yakura
 
組込みAndroid入門実習
組込みAndroid入門実習組込みAndroid入門実習
組込みAndroid入門実習ksk sue
 
Docker入門 - 基礎編 いまから始めるDocker管理
Docker入門 - 基礎編 いまから始めるDocker管理Docker入門 - 基礎編 いまから始めるDocker管理
Docker入門 - 基礎編 いまから始めるDocker管理Masahito Zembutsu
 
MUGT02 - vamp demo
MUGT02 - vamp demoMUGT02 - vamp demo
MUGT02 - vamp demoTetsuya Sodo
 
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜Hideki Takase
 
Programming camp Codereading
Programming camp CodereadingProgramming camp Codereading
Programming camp CodereadingHiro Yoshioka
 

Similar to SensorBeeのご紹介 (20)

Bp study39 nodejs
Bp study39 nodejsBp study39 nodejs
Bp study39 nodejs
 
OpenCVをAndroidで動かしてみた
OpenCVをAndroidで動かしてみたOpenCVをAndroidで動かしてみた
OpenCVをAndroidで動かしてみた
 
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
 
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
 
2017年05月27日 AITCシニア技術者勉強会 第6回「OpenCV入門」
2017年05月27日 AITCシニア技術者勉強会 第6回「OpenCV入門」2017年05月27日 AITCシニア技術者勉強会 第6回「OpenCV入門」
2017年05月27日 AITCシニア技術者勉強会 第6回「OpenCV入門」
 
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
 
ロボット用Open Source Software
ロボット用Open Source Softwareロボット用Open Source Software
ロボット用Open Source Software
 
Core Graphics on watchOS 2
Core Graphics on watchOS 2Core Graphics on watchOS 2
Core Graphics on watchOS 2
 
NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法
 
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
 
Stack2017 自動化困難な状況での活動方法
Stack2017 自動化困難な状況での活動方法Stack2017 自動化困難な状況での活動方法
Stack2017 自動化困難な状況での活動方法
 
【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMat
【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMat【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMat
【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMat
 
runC概要と使い方
runC概要と使い方runC概要と使い方
runC概要と使い方
 
OSS奨励賞受賞プレゼン 活動紹介
OSS奨励賞受賞プレゼン 活動紹介OSS奨励賞受賞プレゼン 活動紹介
OSS奨励賞受賞プレゼン 活動紹介
 
Driverについて
DriverについてDriverについて
Driverについて
 
組込みAndroid入門実習
組込みAndroid入門実習組込みAndroid入門実習
組込みAndroid入門実習
 
Docker入門 - 基礎編 いまから始めるDocker管理
Docker入門 - 基礎編 いまから始めるDocker管理Docker入門 - 基礎編 いまから始めるDocker管理
Docker入門 - 基礎編 いまから始めるDocker管理
 
MUGT02 - vamp demo
MUGT02 - vamp demoMUGT02 - vamp demo
MUGT02 - vamp demo
 
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
 
Programming camp Codereading
Programming camp CodereadingProgramming camp Codereading
Programming camp Codereading
 

SensorBeeのご紹介

  • 2. 自己紹介  田中大輔 (@disktnk) – 某ピー社アニオタ枠採用 – 元金融工学ライブラリ屋さん – I love Java! 2
  • 3. コンテンツ  本日話すこと – 3/14 にOSS化した SensorBee の紹介 – BQLの簡単な説明 – UDFなどの拡張について – 実例と、簡単なデモ  本日話さないこと – Go言語による実装の詳細 – 機械学習について。Deep Learningについて。 – 機械学習を含めた SensorBee の説明については、昨日行われた「第15回 elasticsearch勉強会」の資料をご参照ください Elasticsearchと機械学習を実際に連携させる http://www.slideshare.net/nobu_k/elasticsearch-59627321 3
  • 4. (特に) ネットワークのエッジ / フォグにおいて ストリームデータに対して 機械学習 (特にDeep Learning) を利用した 非構造化データ向けのETLを 低レイテンシで適用することを目的としたツール Lightweight Stream Processing Engine for IoT http://sensorbee.io 4
  • 5. ちょっとだけ詳しい説明  Stateful – 非構造化データの加工・転送を担う – プラグインと連携することにより、特徴量抽出や機械学習が可能。  Expressive – CQL (Continuous Query Language) の方言である BQL という、SQLライクなスク リプトにより操作。 – スキーマレスであり、JSONライクな構造データを扱う  Lightweight – 実行ファイルは大体30MBくらい。Go言語で書かれている (←ここにいる最大の理由) – OS は特に限定していないが、普段は Linux や Mac で開発している – Raspberry Pi でも動く (確認済) – Windows でももちろん動くが、一部ブラグインでは要修正 (cgo周り) 5
  • 6. サンプル例:監視カメラから人物認識をやりたい 6 { "id": 123, "age": ”35", "gender": “female", "location": { "x": 252.1, "y": 179.3 }, … } { "id": 131, "age": ”22", "gender": “male", "location": { "x": 120.5, "y": 80.2 }, … }
  • 7. サンプル例:監視カメラからデータを取得 7 [Source] 監視カメラデータ=フレームデータを 取得 { "id": 123, "age": ”35", "gender": “female", "location": { "x": 252.1, "y": 179.3 }, … } { "id": 131, "age": ”22", "gender": “male", "location": { "x": 120.5, "y": 80.2 }, … }
  • 8. サンプル例:画像データから人物を切り取り 8 [Stream+UDF] 人物の抽出 { "id": 123, "age": ”35", "gender": “female", "location": { "x": 252.1, "y": 179.3 }, … } { "id": 131, "age": ”22", "gender": “male", "location": { "x": 120.5, "y": 80.2 }, … }
  • 9. サンプル例:切り取った人物画像を解析 9 [Stream+UDF] 人物データの解析 { "id": 123, "age": ”35", "gender": “female", "location": { "x": 252.1, "y": 179.3 }, … } { "id": 131, "age": ”22", "gender": “male", "location": { "x": 120.5, "y": 80.2 }, … }
  • 10. サンプル例:解析データを出力 10 { "id": 123, "age": ”35", "gender": “female", "location": { "x": 252.1, "y": 179.3 }, … } { "id": 131, "age": ”22", "gender": “male", "location": { "x": 120.5, "y": 80.2 }, … } [Sink] 解析データの保存
  • 11. Source  (非構造化)データのStreaming – カメラの画像データ – (web)ログ – fluentd – MQTT subscribe etc... – センサーデータ – 温度データ – 振動データ etc... – 各種TYPEは独自に拡張可能 – “opencv_capture_from_uri” はopencvプラグインにある 11 BQL例 CREATE SOURCE camera0 TYPE opencv_capture_from_uri WITH uri=“http://webcamera...”, frame_skip=0, next_frame_error=false;
  • 12. Stream  データの操作 – 結合 (Join) – 集約 (Aggregation) – 抽出 (Filtering) etc...  ストリームされるデータはJSONのよ うにアクセス可能 – camera0:* の部分  右記例では、”detect_human” や ”recognize” という人物認識のUDF を作成したという設定 12 BQL例 CREATE STREAM regions0 AS SELECT RSTREAM detect_human(camera0:*) AS detected FROM camera0 [RANGE 1 TUPLES]; CREATE STREAM recognized AS SELECT RSTREAM recognize(’params', regions0:detected) AS recognized FROM regions0 [RANGE 1 TUPLES];
  • 13. Sink  データをDBやクラウドソースに出力 – fluentd – MQTT publish – DBへ直接INSERT etc... – Souceと同じく各種TYPEは独自に拡 張可能  右記例では、解析した結果を fluentd を使用して出力、という設定 – fluentd source/sink は fluentdプラ グインにある 13 BQL例 CREATE SINK analyzed TYPE fluentd; CREATE STREAM tagged_result AS SELECT RSTREAM “analyzed” AS tag, recognized:* AS data FROM recognized [RANGE 1 TUPLES]; INSERT INTO analyzed FROM tagged_result;
  • 14. デモ: 顔認識  OpenCV の CascadeClassifier を使用した顔認識 – 今回は ultraist様のLBPモデルを使用 http://ultraist.hatenablog.com/entry/20110718/1310965532 14 ここで顔認識を行う →x,y,w,h を出力するUDF
  • 16. デモ: 顔認識→からの笑い男→もう一度動画へ  OpenCV の VideoWriter を使用して動画にまとめる 16 動画ファイル を作るSink
  • 18. デモ: BQL全体像 (ご参考までに) 18 CREATE PAUSED SOURCE camera TYPE opencv_capture_from_uri WITH uri="videos/lovelive1_op.mp4", frame_skip=0, next_frame_error=false; CREATE STATE face_detector TYPE pencv_cascade_classifier WITH file="data/lbpcascade_animeface.xml”; CREATE STREAM detected AS SELECT RSTREAM opencv_detect_multi_scale("face_detect or", c:*) AS rects, c:* AS raw_image FROM camera [RANGE 1 TUPLES] AS c; -- draw warai-otoko CREATE STATE warai TYPE opencv_shared_image WITH file="data/warai_flat.png”; CREATE SINK warai_avi TYPE oencv_avi_writer WITH file_name="result/warai", fps=30; CREATE STREAM warai_avi_images AS SELECT RSTREAM opencv_mount_image("warai", d:raw_image, d:rects) AS img FROM detected [RANGE 1 TUPLES] AS d; CREATE STREAM fmt_warai_avi_images AS SELECT RSTREAM wai:img.format AS format, wai:img.width AS width, wai:img.height AS height, wai:img.image AS image FROM warai_avi_images [RANGE 1 TUPLES] AS wai INSERT INTO warai_avi FROM fmt_warai_avi_images;
  • 19. デモ: BQL全体像 (ご参考までに) 19 CREATE PAUSED SOURCE camera TYPE opencv_capture_from_uri WITH uri="videos/lovelive1_op.mp4", frame_skip=0, next_frame_error=false; CREATE STATE face_detector TYPE pencv_cascade_classifier WITH file="data/lbpcascade_animeface.xml”; CREATE STREAM detected AS SELECT RSTREAM opencv_detect_multi_scale("face_detect or", c:*) AS rects, c:* AS raw_image FROM camera [RANGE 1 TUPLES] AS c; -- draw warai-otoko CREATE STATE warai TYPE opencv_shared_image WITH file="data/warai_flat.png”; CREATE SINK warai_avi TYPE oencv_avi_writer WITH file_name="result/warai", fps=30; CREATE STREAM warai_avi_images AS SELECT RSTREAM opencv_mount_image("warai", d:raw_image, d:rects) AS img FROM detected [RANGE 1 TUPLES] AS d; CREATE STREAM fmt_warai_avi_images AS SELECT RSTREAM wai:img.format AS format, wai:img.width AS width, wai:img.height AS height, wai:img.image AS image FROM warai_avi_images [RANGE 1 TUPLES] AS wai INSERT INTO warai_avi FROM fmt_warai_avi_images; すみません、このSinkはまだ公 開してません m(__)m 他の部分は公開済 →opencvプラグインを使った tutorialは作る予定 (issue #27)
  • 20. Autonomous robot car control demonstration in CES2016  https://www.youtube.com/watch?v=7A9UwxvgcV0 – こちらはちゃんとした実用例、バックエンドにSensorBeeを使用 20
  • 21. ぜひ使ってみてください!  http://sensorbee.io  http://docs.sensorbee.io/en/latest/  https://github.com/sensorbee/sensorbee  今回のデモ動画: https://github.com/disktnk/sb_facedetect_demo 参照 21