ä½ã£ã
éæ
è¯ãç¹ã¯ã»ã¼ååæ¸ãã¦ãéããªã®ã§ã以ä¸ã«è¿½å ã§æ°ã«ãªã£ãç¹ãæ¸ãã
è¦ãã¦ãé åã«è¦ç·ãã®ã¾ã¾è¡¨ç¤ºããã¨å¼ãã¥ããã
æ
£ããã°ä½ã¨ããªãããã ããå°å³ã«å½±é¿ããã®ã§åé¢ããã»ããããã¨æãããã
ãã°ãåããªãå¥æ®ãã§åæãããçã®æéãæããã®ã§å²ã¨é¢åã§ããã
ç»é¢ã¯å¤§ãããã¦ãå°ãããã¦ããããªã
ã§ããããã¨ç«¯ã®ç²¾åº¦ãè½ã¡ããã The monitor must be max 24âãã¨ããéããªã®ã§ããã¯ä»æ¹ãªãã
ä¸éã«ã¤ãã¦ã¯ç¹ã«è¨è¼ãç¡ãã£ãããå°ãããããã®ãæ¢ãã¦ãããã»ããè¯ãã
è·é¢ãè¿ã¥ããããããã¨æããããã£ãªãã¬ã¼ã·ã§ã³ã®é£æ度ãä¸ããé åããã¦è¯ãã¨ãªã¢ãã ãã¶çã¾ãã
6.2ã¯ç¡çã9.7ã§ãããªãå³ããã15ï½26ã¤ã³ããããããã¹ããªæ°ãããã
ã²ã¼ã ç¡çã§ãã
å
¬å¼ã®PVã§Winã¿ãã£ã½ãã®ã«EyeTribeè²¼ãä»ãã¦ææã¡ã§FruitNinjaãã£ã¦ãæ§åãããããããããæä½èªä½ãé«ç²¾åº¦ã«ããã®ãé£ããä¸ãä¸è¨ã®ç»é¢ãµã¤ãºã®çç±ãããå®éå
¨ç¶ä½¿ãç©ã«ãªããã¨æãã
ã«ã¼ã½ã«åããªãããçå¼¾åãã¾ããããããã§ãªãã«ãã¦ãæãåã«çªãåºãã¦åºå®ããçãã¬ã¨åæãã¬ã¤ãããã¨ã«ãªããèªå¤§åºåæããã
åç»é¢ã«è¡¨ç¤ºããã§ããã°ä½ã§ã使ãã
ãã£ãªãã¬ã¼ãã®éè¦ã¦ããç»é¢ã¨åãç»é¢ãè¦ãç¶æ³ã«ããããã°ãå座æ¨ãè¦ã¦ãããã¨ã«ãªãã
ã½ããèªä½ã¯Win/Macã®ã¿å¯¾å¿ã ãã測å®å¯¾è±¡ã¨ãã¦ã¯åç»é¢ããåºåããã§ããã°ä½ã§ã使ããã
ã¿ãã¬ããããEyeTribeã®æ¥ç¶ãããæ©å¨ã«VNCããã°ãé£æ度ã¯é«ããç¡çãããã£ãªãã¬ã¼ãåºæ¥ãªãã¯ãªãã
ãã£ãªãã¬ã¼ãæã®ã¿ä¸æçã«PCã¤ãªãã°æ¸ãã®ã§ãç°å¢ã許ããªã表示å´ã«å¤é¨å
¥åãã使ããã°ãµã¤ãã¼ã¸ã§ãã²ã¼ã»ã³ã®çä½ã§ããªãã§ãããããã¨ã
ãã£ã¹ãã¬ã¤è¨ç½®ã¦ãããã»ãã
ãããå
¬å¼ã«ãã£ã¹ãã¬ã¤ä¸é¨ã«ã¹ã¿ã³ã使ãããã£ã¤ãã¦ãçµµããããå®éã«ã¯ä»ãã¦ããªãã
ç»é¢ã®åã«ä¸èç½®ãã®çµæ§éªéãªã®ã§ãããä»ãã¦æ¬²ããã£ãã
ããç¨åº¦ä¸åãã®è§åº¦ãã¤ããªãã¨ãªããªãã®ã§ããã®ã¾ã¾è²¼ãä»ããã ãã§ã¯ä½¿ãããä¸è使ããªãã¨å®ç¨çãªèªèãã§ããªãã
EyeProofã«ã¤ãã¦
å
¬å¼ããåºã解æç¨webã¢ããªã
æ½é¸å¼ã®Î²çã ãEyeTribeæã£ã¦ãã¨æ°æ¥ã§ã¢ã«ã¦ã³ãè²°ããã
ä»ã®ã¨ããéæ¢ç»ã«å¯¾ããã¼ããããã¨ã¹ãã£ã³ãã¹ãä½æå¯è½ããã¼ããããã¯ããã使ã£ãã
解æ対象ãWebä¸ããç»é²ããä¸ã§ããã¨é£åãããã¹ã¯ãããã¢ããªã®ã¬ã³ã¼ããèµ·åããã¼ã¿åéããã
å¤æ°ã®ãµã³ãã«ããã®ãã¼ã¿åéãåæã¨ãã¦ããããããç»é²æã«æ°åå¹´é½¢æ§å¥ã®ãã¼ã¿ãä»å ããããã¨ãåºæ¥ãã解ææã«ç¹å®ã®å¯¾è±¡ç¾¤ã®ã¿ã«çµããããªå¦çããããå ã«ããçµ±è¨å¦çãåºæ¥ãã£ã½ãã
é¸æããå¯è¦åã®å½¢å¼ãä¿æãããªãã®ã§ä¸æä¸æé¸ã°ãªãããªããªãã£ããã
解ææã®ç»åãµã¤ãºã解å度ã«ä¾åããªãã®ã§é«è§£å度液æ¶ã ã¨ç»é¢çãä¸ã«å°ãããã表示ã«ãªã£ããããªã©ç´°ããç¹ã¯æ°ã«ãªã£ããå
¨ä½ã¨ãã¦ä½¿ãåæã¯æªããªããã¾ã βãªã®ã§ãã®ãã¡ä½ã¨ããªãã¨æãã
対å¿å½¢å¼å¢ããã¤ãããããããã§webãµã¤ãã®è§£æã¯ã¾ããªã対å¿ããã¨æ¸ãã¦ããã
ãã®èª¿åã§åç»ã«ã対å¿ãã¦ã»ããã
ã½ã¼ã¹
SDKãåªç§ãªã®ã§ãµã³ãã«ã«ã¡ãã£ã¨æ¸ã足ããã ããç°¡åã
æç»ã®ä»æ¹ãããã ãã§ãå°å³ã«éã¹ãã
ããæ°ã¯ãªããã©ã¡ãã£ã¢ã¢ã¼ãã¨ãããããæ¹åã«ä½¿ããããããã¨æã£ãã
import javax.swing.JFrame; import javax.swing.JPanel; import java.awt.Color; import java.awt.Graphics; import com.theeyetribe.client.GazeManager; import com.theeyetribe.client.GazeManager.ApiVersion; import com.theeyetribe.client.GazeManager.ClientMode; import com.theeyetribe.client.IGazeListener; import com.theeyetribe.client.data.GazeData; public class draw extends JPanel { //ã¦ã£ã³ãã¦ãµã¤ãº final static int winwidth = 854; final static int winheight= 480; //âã®ãµã¤ãº static final int ovalsize = 30; //æç»æ° static final int trackmax = 30; //解å度åå¾ static java.awt.GraphicsEnvironment env = java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(); static java.awt.DisplayMode displayMode = env.getDefaultScreenDevice().getDisplayMode(); static int width = displayMode.getWidth(); static int height = displayMode.getHeight(); static int[][] positions = new int[trackmax][2]; public static void main(String[] args){ JFrame frame = new JFrame(); draw app = new draw(); frame.getContentPane().add(app); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(winwidth, winheight); frame.setTitle(""); frame.setVisible(true); final GazeManager gm = GazeManager.getInstance(); boolean success = gm.activate(ApiVersion.VERSION_1_0, ClientMode.PUSH); final GazeListener gazeListener = new GazeListener(frame); gm.addGazeListener(gazeListener); Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() { gm.removeGazeListener(gazeListener); gm.deactivate(); } }); } public void paintComponent(Graphics g){ g.clearRect(0, 0, winwidth, winheight); for ( int i = positions.length-1; 0 <= i ; --i ) { //ã°ã©ãã¼ã·ã§ã³ããã Color c = new Color(255 - i * (255/positions.length), 0, i * (255/positions.length), 80 - i * (80/positions.length) ); g.setColor(c); //ãã¤ã³ãéã®ç´ç· if(i!=0){ g.drawLine(positions[i-1][0], positions[i-1][1], positions[i][0], positions[i][1]); } //ãã¤ã³ã int size = ovalsize - (ovalsize/2 * i / positions.length); g.fillOval(positions[i][0] - size/2, positions[i][1] - size/2, size, size); if(i==0){ g.setColor(Color.WHITE); size = ovalsize / 2; g.fillOval(positions[i][0] - size/2, positions[i][1] - size/2, size, size); } } } private static class GazeListener implements IGazeListener { static JFrame parent; public GazeListener(JFrame frame) { parent = frame; } @Override public void onGazeUpdate(GazeData gazeData) { int Xpos = (int) gazeData.smoothedCoordinates.x; int Ypos = (int) gazeData.smoothedCoordinates.y; //å±¥æ´ã®ä¿æ for ( int i = (positions.length-1); 0 < i; --i ) { positions[i][0] = positions[i-1][0]; positions[i][1] = positions[i-1][1]; } positions[0][0] = Xpos * winwidth / width; positions[0][1] = Ypos * winheight/ height; if(Xpos == 0 && Ypos ==0){ positions[0][0] = positions[1][0]; positions[0][1] = positions[1][1]; } parent.repaint(); if(Xpos ==0 && Ypos ==0){ return; } } } }