ã¯ããã«
11/3ã4 ã§éå¬ããã¦ãã Maker Faire Tokyo 2013 ã«ãid:jonki 㨠å¸Pï¼Mont Blanc Pj.ï¼ã¨ãããã¿ã§åºå±ãã¦ãã¾ãããã¬ã´ã§ä½ã£ãã¹ãã¼ã¸ã«ã²ã¼ã ç»é¢ãããã¸ã§ã¯ã·ã§ã³ãããã³ã°ããã¬ã´ãåããã¨ã²ã¼ã å
ã®ãããã¯ãåçã«å¤æ´ããããããã®ã²ã¼ã å
ã®ç©ä½ã¨ãã¼ãã¦ã§ã¢ãé£åããããããã¨ãããã¿ã§ãããã®ã¥ããç³»ã®ã¤ãã³ãã«åºå±ããã®ã¯ä»åãåãã¦ã§å®æãç´åã«ãªã£ã¦ãã¾ãã¾ããããä½ã¨ãå½¢ã«ãããã¨ãåºæ¥ã¾ãããããã¦2æ¥é大ããªåé¡ãèµ·ãããã¨ãªãå¤ãã®æ¹ã«ä½é¨ãã¦ããã ããã¨ãåºæ¥ã¦ãã¨ã¦ã楽ããæéãéãããã¨ãåºæ¥ã¾ããã
åºå±ä¸ã¯æéã®é½åä¸ãã£ããã¨ãã説æåºæ¥ãªãã£ãã®ã§ãããç§ã¯ä¸»ã«ã½ããé¢ãæ
å½ããã®ã§ããã®è©³ç´°ãªä»çµã¿ãã³ã¼ããæ¬ã¨ã³ããªã§ç´¹ä»ããã¦ããã ããã°ã¨æãã¾ãã
æ¦è¦
å±ç¤ºã§åçãã¦ããç´¹ä»åç»ã以ä¸ã«ãªãã¾ãã
ã³ã³ã»ããã¯ã
- ç½è²ã®ã¬ã´ï¼ç«ä½ï¼ã§ä½ã£ãã¹ãã¼ã¸ã«ããã¸ã§ã¯ã·ã§ã³ãããã³ã°ããã²ã¼ã
- ã²ã¼ã ä¸ã®ãªãã¸ã§ã¯ãã¨ãã¼ãã¦ã§ã¢ãé£å
- ã¬ã´ãçµã¿æ¿ããã¨ã²ã¼ã ã®ä¸çãå¤å
ã® 3 ç¹ã§ãã2x2 ã®ã¬ã´ãã²ã¼ã ç»é¢ã®ã©ããã«ã¤ããã¨ãã²ã¼ã å
ã§ãããã«ãããã¯ãåºã¦ãã¦å½ããå¤å®ãçºçããä¸ãæ©ããããã«ãªã£ãããä¹ãã¨ã¸ã£ã³ãããããã«ãªã£ãããããã¨ããã¨ãããæ
å½ãã¾ããã
èªèã®ä»çµã¿
ä¸çªå¤ãã£ã質åããã©ããã£ã¦ãããã¯ã追å ããã¦ãããã¨ãèªèãã¦ããã®ãï¼ãã¨ãããã®ã§ãããããã¯ä¸ã®åç»ã§ã説æãã¦ããã®ã§ããããã詳細ã«å³è§£ãã¾ãã
ä¸å³ã®ãããªå½¢ã«ãªãã¾ããä¸çªã®ãã½ã¯ãèæ¯ã«ã¯ç°è²ã®ã¬ã´ãå©ç¨ãã¦ã追å ãããããã¯ã«ã¯ç½è²ã®ã¬ã´ã使ç¨ãã¦ãããã¨ã§ããããã«ãã 2 æ¥éã®ãã¢ã«ãèãããå®å®æ§ã確ä¿åºæ¥ã¾ããï¼åãã¦ããç½é»ç»ã¯åç»åç
§ï¼ã
ã¯ããã¯ä¸å¯è¦ARãã¼ã«ã®ããã«å帰æ§åå°æã使ããã¨æã£ãã®ã§ãããç½ã¬ã´ã®èµ¤å¤ç·ã®åå°ãå¼·ãã常ã«ç½ãæ®ãã¦ãã¾ãããä½ããã¾ãè¡ãã¾ããã§ãããæ¬¡ã¯æå
æ©ãæãããå½ã¦ã¦å½±ãä½ã£ã¦èªèãããã¨ãèãã¾ãããããããã¯æ®µå·®ãæ¤ç¥ããã«ã¯ä¸ããã¨ä¸ãã両æ¹ããï¼ãããã¯å·¦å³ä¸¡æ¹ããï¼å
ã交äºã«å½ã¦ã¦å½ã¦ã¦å½±ãåããªãã¨ãã©ãã§æ®µå·®ãä¸ãã£ãããæ®ããä»çµã¿ãè¤éã«ãªããããããããã¾ãããããã¦æå¾ã«è¡ãçããã®ãä»åæ¡ç¨ããææ³ã§ãããã¾ãã¾èæ¯ã«ç¨ããã¬ã´ãç°è²ãã売ã£ã¦ãããã仿¹ãªãè²·ã£ã¦ãããã試ãã¦ããã¨ããããã¾ãã¾å¤©äºã«èµ¤å¤ç·ã©ã¤ããå½ã¦ãç¶æ
ã§èµ¤å¤ç·ã«ã¡ã©è¦ã¦ã¿ãã¨ããæãã«ç½é»ãæ®ãã¦ãããã³ã¬ã ï¼ã¨æ¡ç¨ãã¾ããã
ã½ããæ§æ
ã²ã¼ã 㯠Unity ã§ä½æãã¦ãããããã«å¯¾ãã¦ãããã¯ã®è¿½å /åé¤æç¤ºãè¡ãå°ç¨ã®ãã£ãªãã¬ï¼ç»åè§£æãã¼ã«ã OpenCV + Qt*1ã§ä½æãã¾ãããã¾ããåç»ã«ã¯ãªãã®ã§ããæ¬çªã§ã¯ãããã¯ã®ç¨®é¡ãã¿ãã¬ãããã夿´ã§ããããã«ãã¾ãããããã¯åæ¥ä½ããã¨ã«ãªããæéããªãã£ãã®ã§ HTML 㨠Node.js ã§ä½æãã¾ããããäºãã«ã©ãåãã¦ãããã¯ä¸è¨ã«ãªãã¾ãã

åºæ¬çã«ä¿¡å·ã¯ OSC ã§éã£ã¦ãã¾ãã
ã²ã¼ã
ã²ã¼ã 㯠Unity ã§ä½æãã¦ãã¾ããå®ã¯æãããè¦ãã¨3次å
ã«ãªã£ã¦ããããã¾ããåç´ã«çµã¿è¾¼ã¿ã®ç©çã¨ã³ã¸ã³ãå©ç¨ãã¦ãææãã§ä½æãã¦ãã¾ããããç´ ã®ç©çã¨ã³ã¸ã³ã¯ä½ã 2D ã²ã¼ã ã§ã¯è¡çªå¤å®ã¾ããã§ãã¾ãåãã¦ãããªãã®ã§ãçµå±æ¨ªæ¹åã®å½ããå¤å®ãªã©ã¯ Raycast ããããã¦ãã¾ããUnity ç¨ã® 2D ã® UI ãã¬ã¼ã ã¯ã¼ã¯ã使ãã°ãã£ã¨ç°¡åã ã£ãã®ãããããªãã®ã§æ¬¡åæ©ä¼ãããã°ä½ãå©ç¨ãã¦ã¿ããã¨æãã¾ãã
éä¿¡å¨ã㯠UnityOSC ãå©ç¨ãã¦ãã¾ãã
ç»åè§£æãã¼ã«
ã²ã¼ã ããã主ã«åãå ¥ããã®ããã¡ãã«ãªãã¾ããMFT ã«éã«åãããããã«å¤§åé©å½ã«ãªã£ã¦ãã¾ãããã³ã¼ãã¯ä»¥ä¸ã§å ¬éãã¦ãã¾ãã
主ã«ä»¥ä¸ã®æ§ãªå¦çãè¡ã£ã¦ãã¾ãã

æªã¿è£æ£ã¯ãã«ã¡ã©ç»ãçµæ§æªæ²ãã¦ãããããã¬ã´ãã°ãªããã§åºåãã¨ãºã¬ã¦ãã¾ãã¨ããåé¡ãããã¾ãããããã§ OpenCV ã® cv::undistort ã使ç¨ãã¦ã«ã¡ã©ã®æªã¿ãè£æ£ãã¦ãã¾ãã
æªã¿è£æ£ã«ä½¿ç¨ãããã©ã¡ã¼ã¿ã¯ Media Lab ã®ä»¥ä¸ã®ãã¼ã«ãå©ç¨ãã¦ãã¾ãã
ãã ãã®æ°å¤ã ãã§ã¯ç¶ºéºã«è£æ£ããããªãã£ãã®ã§ãã®å¤ãä¸å¿ã«å¾®å¦ã«ãã©ã¡ã¿ããããã UI ã Qt ã§ä½æãã¾ããã

å®ã¯ç´è¿ã® Qt é¢é£ã®è¨äºã¯ MFT ç¨ã«æ¸ãã¦ãããã®ã§ããã
- Qt Quick 2 で使える OpenCV 用の QML 要素を作ってみた - 凹みTips
- Qt Quick Controls でデスクトップ用アプリの UI を簡単に作る - 凹みTips
- Qt Quick Local Storage で設定をお手軽に保存する - 凹みTips
Qtï¼Qt Quick 2ï¼ã¯å¦ç¿ã³ã¹ãã¯ã¡ãã£ã¨é«ãã§ãããä¸åº¦è¦ãã¦ãã¾ãã° C++ 㨠JS ãã¨ã¦ãç°¡åã«ãå ·ä½çã«ã¯ 1 è¡æ¸ãã ãã§ãã¡ã³ãã JS ã«ã¨ã¯ã¹ãã¼ãåºæ¥ãããã¾ãã
UI ã QML 㨠JS ãçµã¿åããã¦å¼·åãªããããã£ãã¤ã³ãã£ã³ã°ãå©ç¨ãããããªãããµã¯ãµã¯ããã¾ããã¾ããä»åã¯ç»åå¦çã ã C++ ã§è¡ã£ã¦ãå¾ã®æ°å¤ã®å¦çï¼ã©ããé»ããç½ã«ãªã£ããå¤å®ãªã©ï¼ã¯ JS ã®ã¬ã¤ã¤ã§è¡ã£ã¦ã¿ã¾ããã製åã§ãªãããããã£ããããã¿ã¤ããå¶ä½ããä¸ã§ã¯ãå¦ä½ã«éããã©ã¤ï¼ã¨ã©ã¼ããããéµã«ãªãã¨æãã®ã§æ¬æ§æã«ããã®ã§ããããé°ã§æã£ã¦ãããããæ©ãå¦çãè¨è¿°ãããã¨ãåºæ¥ã¾ããããããã¿ã¤ããä½ãä¸ã§ããããã£ãã¹ã¯ãªããè¨èªãé©åãªç®æã§å©ç¨ãããã¨ã¯ã¨ã¦ãéè¦ã ã¨æãã¾ãã
ããã¦åæ§ã«ä»¥ä¸ã®ãããªç»åè§£æé¨ã使ãã¾ããã

éè¦è¦ããã®ã¯ããã¢ãæ¢ããªãããã«å®è¡æã«ç´ æ©ãåãã£ãªãã¬åºæ¥ãããã«ãããã¨ã§ãããªã®ã§åçã«ã¡ãã·ã¥é åãç§»å / æ¡å¤§ãªã©å¤æ´åºæ¥ãããã«ãã¦ããã¾ãããããã§ããã¸ã§ã¯ã¿ããºã¬ã¦ãã¾ã£ãæããæºãå¯ãããããã¦å¾ãã¦ãã¾ã£ãã¨ãã«ãããªã¢ã«ã¿ã¤ã ã«ï¼ãã¬ãªãããã«ï¼èª¿æ´åºæ¥ãããã«ãã¦ãã¾ãï¼ãã£ãªãã¬ã®æ§åã¯åç»åç
§ï¼ãããã Qt ã§ç°¡åã« GUI ãæ¸ããå©ç¹ãå©ç¨ãã¦ãããã¡ãã·ã¥é¨å㯠HTML5 ç¸å½ã® Canvas ã§æ¸ãã¦ãã¾ãï¼Qt ãããï¼ã
ããã¦ãããã®è§£æçµæã OSC ã§éä¿¡ããã¨ããã¯ãèªåã§ oscpack ã QML è¦ç´ ã«ãã¦éãããã«ãã¾ããã
ããã¯å¥ä»¶ã§ãå©ç¨ããããã徿¥ã¨ã³ããªãã¾ã¨ãã¾ãã
ãªã¢ã³ã³
ç´åã«ããã£ã±ããããã¯å¤ãããã¨æãæ¥é½ä½æãã¦ã¿ãã¬ããã§è¡¨ç¤ºããå½¢ã«ãã¾ãããã¬ã¯ã¯é©å½ã« jQuery 㨠jQuery.Transit ã使ã£ã¦ãã¿ã³ãæ¼ãããæã«ã¢ãã¡ã¼ã·ã§ã³ããããã«ãã¦ãã¾ãã
ãããã OSC ãé£ã°ãã«ã¯ãsocket.io ã使ã£ã¦ãµã¼ãå´ã«æ å ±ãéãããããã㯠node-osc ã§ Unity 㸠OSC çµç±ã§ã¡ãã»ã¼ã¸ãéã£ã¦ãã¾ãã
ãªã©ã¨èª¬æãã¦ã¿ã¦ã¾ãããã³ã¼ãçã«ã¯ã¯ã©ã¤ã¢ã³ãããåä½ã® WebSocket ãé£ã°ãã®ã¯ 3 è¡ããµã¼ãå´ã§ã¡ãã»ã¼ã¸ãåãåã£ã¦ OSC ãéãã®ã 3 è¡ã§æ¸ãã¾ãã
ã¯ã©ã¤ã¢ã³ã
// ã¯ãªãã¯ãããã夿´ã¤ãã³ãããµã¼ãã¸éã $('#button1').on('click', function() { socket.emit('change', kind); });
ãµã¼ã
var client = new osc.Client('127.0.0.1', 4567); // socket io.sockets.on('connection', function(socket) { // 夿´ã¤ãã³ããåãåã£ã¦ OSC éä¿¡ socket.on('change', function(kind) { client.send('/LegoAnalyzer/ChangeBlock', kind); }); });
Node.js ã¯ãããã¿ã¤ãããã®ã«æ¬å½ã«ä¾¿å©ã§ãããã¤ãã£ãã¨ã®é£æºãç°¡åãªã®ã§æ¯éèå³ãæãæ¹ã¯ä½¿ã£ã¦ã¿ã¦ä¸ããã
ãããã«
ä½äººãã®æ¹ã«ãã©ããã¦ä½ããã¨æã£ãã®ã§ããï¼ãã¨ãã質åãé ããã®ã§ãããä»åã¯åç´ã«ãMFT ã«åºãããï¼ãã¨ããæããããã¿åºããããããã¸ã§ã¯ã·ã§ã³ãããã³ã°ã§ä½ããããï¼ããå§ã¾ããä½ãæä½ã§ãããã®ã«ããããã¨ãªãããã®ã¢ã¤ãã£ã¢ãæãã¤ãã¦ããããï¼ã¨ãªã£ãå½¢ã§ããMFT ã«åºããããããã§ããããã®ãããã§ãä»å Qt ã®ãã¹ã¯ãããç¨ã¢ããªã® GUI å¨ãã®ä½æã OpenCV ã«ããç»åèªèã¯åãã¦ã ã£ãã®ã§ãããè¯ã顿ããã¨ã«åå¼·ãã¦ã¡ãã£ã¨ä½¿ããããã«ãªãã¾ããããããã£ãåæ©ãä¸ãã¦ãã ãã£ããã¾ãç´ æ´ãããçºè¡¨ã交æµã®å ´ãæä¾ãã¦ãã ãã£ã MFT ã®é¢ä¿è ã®æ¹ã ã«æè¬ãããã¾ããã¾ãæ¥å¹´ãä»åã®çºå±å½¢ãå¥ã®é¢ç½ããã®ãæãã¤ãããåºãã¦ã¿ããã§ããåãæ¢ããã¯ç¸æ¹ã«å§ãã¦ãã¾ã£ããã¼ãã¦ã§ã¢å¨ããåå¼·ãã¦ããã£ã¨å¹ ãåºãã¦ããããã¨æã£ã¦ãã¾ãã
*1:ããã§ãã Qt ã¯ä¸»ã« Qt Quick 2 ã®ãã¨ãæãã¾ã








