原标题:三分钟磨练眼球追踪术,AI就了解你在望着哪些妹子 |
TensorFlow.js代码

小说是一款jquery
提醒插件鼠标移上圆角框图片唤醒代码,他能够很好详细表达那张图纸的功效与用途哦,并且还是能够是图形文本混合表达。

投机引以为戒、发明的JS弹窗,有jquery和mootools多个本子

具体的原理笔者就不多说了,间接贴代码。
html代码:

圆栗子 编写翻译整理

小说是一款jquery
提醒插件鼠标移上圆角框图片唤醒代码,他得以很好详细表明那张图纸的功能与用途哦,并且还是能够是图片文本混合表达。

务求:jquery版本>=1.2.6,mootools用新型版本

复制代码 代码如下:

澳门金沙4787.com官网 1

<!doctype html public “-//w3c//dtd html 4.01//en”
“;
<html>
<head>
 <meta http-equiv=”content-type”
content=”text/html;charset=gb2312″/>
 <title>jquery 提示插件鼠标移上圆角框图片唤醒</title>
 <script type=”text/网页特效”
src=”js/jquery-1.4.1.min.js”></script>

 <script type=”text/javascript”>

 // load this script once the document is ready
 $(document).ready(function () {
  
  // get all the thumbnail
  $(‘div.thumbnail-item’).mouseenter(function(e) {

   // calculate the position of the image tooltip
   x = e.pagex – $(this).offset().left;
   y = e.pagey – $(this).offset().top;

   // set the z-index of the current item,
   // make sure it’s greater than the rest of thumbnail items
   // set the position and display the image tooltip
   $(this).css教程(‘z-index’,’15’)
   .children(“div.tooltip”)
   .css({‘top’: y + 10,’left’: x + 20,’display’:’block’});
   
  }).mousemove(function(e) {
   
   // calculate the position of the image tooltip   
   x = e.pagex – $(this).offset().left;
   y = e.pagey – $(this).offset().top;
   
   // this line causes the tooltip will follow the mouse pointer
   $(this).children(“div.tooltip”).css({‘top’: y + 10,’left’: x +
20});
   
  }).mouseleave(function() {
   
   // reset the z-index and hide the image tooltip
   $(this).css(‘z-index’,’1′)
   .children(“div.tooltip”)
   .animate({“opacity”: “hide”}, “fast”);
  });

 });

 </script>
 <style>

.thumbnail-item {
 /* position relative so that we can use position absolute for the
tooltip */
 position: relative;
 float: left; 
 margin: 0px 5px;
}

.thumbnail-item a {
 display: block;
}

.thumbnail-item img.thumbnail {
 border:3px solid #ccc; 
}
  
.tooltip {
 /* by default, hide it */
 display: none;
 /* allow us to move the tooltip */
 position: absolute;
 /* align the image properly */
 padding: 8px 0 0 8px;
}

 .tooltip span.overlay {
  /* the png image, need ie6 hack though */
  background: url(images/overlay.png) no-repeat;
  /* put this overlay on the top of the tooltip image */
  position: absolute;
  top: 0px;
  left: 0px;
  display: block;
  width: 350px;
  height: 200px;
 }
 </style>
</head>
<body>
   
   
   
 <div class=”thumbnail-item”>
  <a href=”#”><img src=”images/small1.jpg”
class=”thumbnail”/></a>
  <div class=”tooltip”>
   <img src=”images/big1.jpg” alt=”” width=”330″ height=”185″
/>
   <span class=”overlay”></span>
  </div>
 </div>
     
 <div class=”thumbnail-item”>
  <a href=”#”><img src=”images/small2.jpg”
class=”thumbnail”/></a>
  <div class=”tooltip”>
   <img src=”images/big2.jpg” alt=”” width=”330″ height=”185″
/>
   <span class=”overlay”></span>
  </div>
 </div>
 
 <div class=”thumbnail-item”>
  <a href=”#”><img src=”images/small3.jpg”
class=”thumbnail”/></a>
  <div class=”tooltip”>
   <img src=”images/big3.jpg” alt=”” width=”330″ height=”185″
/>
   <span class=”overlay”></span>
  </div>
 </div>   
   
 <div class=”clear”></div>

  
</body>
</html>

先看截图啊:

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN”
“;
<html xmlns=”;
<head>
<title>Draw rectangle</title>
<meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″
/>
<script src=”jquery-1.6.2.min.js”
type=”text/javascript”></script>
<script src=”jquery.ui.core.js”
type=”text/javascript”></script>
<script src=”jquery.ui.widget.js”
type=”text/javascript”></script>
<script src=”jquery.ui.mouse.js”
type=”text/javascript”></script>
<script src=”jquery.ui.draggable.js”
type=”text/javascript”></script>
<link href=”catch.css” rel=”stylesheet”
type=”text/css”;charset=gb2312/>
<script src=”catch.js”
type=”text/javascript”;charset=gb2312></script>
<!–[if gte IE 7]>
<style type=”text/css”>
</style>
<![endif]–>
</head>
<body>
<!– header –>
<div id=”header”>
<label>Draw!</label>
</div>
<!– content –>
<div id=”content”>
</div>
<!– bottom –>
<div id=”bottom”>
</div>
</body>
</html>

嘿,老董的眼神飞过来了,还难过切回工作界面?

源码下载地址

在firefox、chrome、高版本ie下:有影子、圆角作用

css代码:

往常,大家大致不能够躲避来本人后的目光,但近日不自然了。

效率预览地址 ps教程/”>

 

复制代码 代码如下:

假使有个眼球追踪AI,加上人脸识别,也许就能在被老总盯上的须臾间,进入奋力工作形式。

提醒插件鼠标移上圆角框图片唤醒代码,他可以很好详细表明那张图纸的效应与用途哦,并且还是能够是图表文本混合表明。…

调用方法:

body
{
font-family: “Helvetica Neue”, “Lucida Grande”, “Segoe UI”, Arial,
Helvetica, Verdana, sans-serif;
margin: 0px;
}
#header
{
width:150px;
margin:0px auto;
}
#header label
{
font-size:45px;
font-weight:bolder;
}
#content
{
width:90%;
height:600px;
margin:10px auto;
border:1px solid blue;
}
.new_rect
{
opacity: 0.7;
-moz-opacity: 0.7;
filter: alpha(opacity=70);
-ms-filter: alpha(opacity=70);
background:#A8CAEC;
border:1px solid #3399FF;
position:fixed;
float:left;
}
.new_rect:hover{
cursor:move;
}
.mousedown{
-webkit-box-shadow:5px 5px 5px black;
-moz-box-shadow:5px 5px 5px black;
box-shadow:5px 5px 5px black;
z-index:999;
}

戏是稍微多。然则眼球追踪那件事,只要有电脑的松手录制头,再有个浏览器,真的可以形成。

 

js代码:

澳门金沙4787.com官网 2

1 <input type=”button”  value=”居中”
onclick=”mybox({title:’老衲’,content:’B你好<br><br><br><br>世界’,width:200,height:100,pos:’center’})”
/> 

复制代码 代码如下:

根源罗马的先后猿MaxSchumacher,就用TensorFlow.js做了1个模型,你看向显示器的某一点,它就明白你在看的是哪一点了。

2   

//////////////////////////////////////////////////////////
$(function () {
//$(“div[title=new_rect]”).click(function(){alert(“click”);});
//$(“.new_rect”).draggable();
drow_rect(“#content”);
})
/////////////////////////////////////////////////////////
function drow_rect(the_id){//theid代表作为画布的层
var num=1;
var x_down=0,y_down=0;
var new_width=0,new_height=0;
var x_original=0,y_original=0;
var original_flag=true,down_flag=false;
var x_point=0,y_point=0;
var append_string;
var MouseDown=function(e){
down_flag=true;
x_down=e.pageX;
y_down=e.pageY;//记录鼠标的此时此刻坐标
if(original_flag){//倘诺是率先次点击,把初叶点的坐标记录到 x_original
和 y_original中
x_original=e.pageX;
y_original=e.pageY;
original_flag=false;
}
};
var MouseMove=function(e){
if(down_flag){//鼠标有移动
x_down=e.pageX;
y_down=e.pageY;
x_point=x_original;
y_point=y_original;
new_width=x_down-x_original;
if(new_width<0){//鼠标向左运动
new_width=-new_width;
x_point=x_down;
}
new_height=y_down-y_original;
if(new_height<0){ //鼠标向右运动
new_height=-new_height;
y_point=y_down;
}
$(“div[name='”+num+”‘]”).remove();//把前面包车型客车层删除,并在末端的代码中生成新的层
append_string=”<div class=’new_rect’
style=’left:”+x_point+”px;top:”+y_point+”px;”+”width:”+new_width+”px;height:”
+new_height+”px’ name='”+num+”‘ title=’第”+num+”个’></div>”;
$(the_id).append(append_string);
}
}
$(the_id).bind(“mousedown”,MouseDown);
$(the_id).bind(“mousemove”,MouseMove);//事件绑定
$(the_id).mouseup(function(e){//松手鼠标左键,开头化标志位
down_flag=false;
original_flag=true;
$(“div[name='”+num+”‘]”).draggable();
$(“div[name='”+num+”‘]”).mousedown(function(){
$(this).addClass(“mousedown”);//添加影子
$(the_id).unbind(“mousedown”,MouseDown);
$(the_id).unbind(“mousemove”,MouseMove);//撤废事件绑定
});
$(“div[name='”+num+”‘]”).mouseup(function(){
$(this).removeClass(“mousedown”);//删除阴影
$(the_id).bind(“mousedown”,MouseDown);
$(the_id).bind(“mousemove”,MouseMove);//事件绑定
});
num++;
});
}

自身来演习一把

3 <input type=”button”  value=”右下角”
onclick=”mybox({width:400,height:200,pos:’rightdown’})” /> 

上传3个实例图片:
澳门金沙4787.com官网 3

那一个模型叫Lookie
Lookie
,不用服务器,打开摄像头就足以在浏览器上磨练,不出三分钟就能养成一头小AI。

4   

html代码:
复制代码 代码如下: !DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0
Transitional//EN” “…

在下试了一试。

5 <input type=”button”  value=”ajax调用”
onclick=”mybox({width:400,height:200,ctype:’url’,url:’echo.php’})” />

录像头拍到的画面就浮今后荧屏左上角,脸上是浅灰的大约,眼睛被二个革命方框框住。

 

澳门金沙4787.com官网 4

 

采集数据的不二法门很简短,只要四处移动鼠标,眼睛跟着鼠标走,然后随时按下空格键,每按一回就收集一个数据点。

样式:css

第一波,只要按贰11次空格,系统就提示,能够点击操练按钮了。

1 <style type=”text/css”> 

锻炼好今后,荧屏上冒出二个绿圈圈。那时候,笔者的肉眼看什么地方,绿圈圈都应当跟着自身走的。

2 *{ margin:0; padding:0;} 

澳门金沙4787.com官网 5

3 .popbox{ position:absolute; width:300px; border:1px solid #84a0c4;
background:#d3e2f5; border-radius:3px; box-shadow:0 0 6px #333;
z-index:61;} 

可它就如有些踌躇。系统又提醒:今后多少不太够,大概还没演练好,再取一些数额吧。

晋升插件鼠标移上圆角框图片唤醒,mootools五个本子。4 .popbox #popboxtop{ height:24px; line-height:24px; font-size:14px;
font-weight:bold; cursor:move; overflow:hidden;} 

那好,再取个二三十张图,磨练第三波。

5 .popbox #popboxtoptitle{ float:left; color:#15428b;
text-indent:0.5em;} 

果真,此次绿圈圈跑得自信了有的,左看右看它都驰骋 (比较) 如风。

6 .popbox #popboxtopclose{ float:right; font-weight:bold;
color:#84a0c4; padding-right:0.5em; cursor:pointer;} 

澳门金沙4787.com官网 6

7 .popbox #popboxtopclose:hover{ color:#15428b;} 

相比较,对于上下移动的眼神,AI的影响就像从未那么敏感。大致是因为,电脑荧屏上下离开不够宽,眼球旋转不充裕吧。

8 .popbox #popboxcontent{ margin:0 5px 5px 5px; background:#fff;
border:1px solid #84a0c4; border-radius:3px; overflow:auto;} 

而是,在磨练多少如此相差的前提下,神经互连网也终于茁壮成长了。

9 </style>

内需小心的是,收集数据的时候,脸决不离荧屏太远(也不用倒立) 。

jquery版本代码

DIY全攻略 (上) :架子搭起来

001 <script type=”text/javascript”
src=”jquery-1.2.6.js”></script> 

用作三个不须要任何服务器就能练习的模型,如若要处理整幅整幅的录像截图,负担大概有个别重。

002 <script type=”text/javascript”> 

澳门金沙4787.com官网 7

003 function mybox(opt){ 

所以,还是先检测人脸,再框出眼睛所在的一对。只把这么些区域
(上海体育场地右一) 交给神经网络的话,义务就自在了。

004     /*默认*/

德国少年选拔了clmtrackr人脸检查和测试模型,它的亮点也是跑起来轻快。

005     var defaults = { 

那么,先把它下下来:

006         title : ‘标题’, 

007         content : ‘内容’, 

然后,打开一个空的html文本,导入jQuery,
TensorFlow.js,clmtrackr.js,以及main.js。代码如下:

008         ctype : ‘common’, 

1<!doctype html>

009         width : 300, 

2<html>

010         height : 200, 

3<body>

011         mask : true, 

4< src= “;

012         drag : true, 

5< src=
“;

013         pos : ‘center’, 

6< src= “clmtrackr.js”></>

014         fix : true, 

7< src= “main.js”></>

015         url : ”

8</body>

016     }; 

9</html>

017     var isIe6 = $.browser.msie && ($.browser.version == “6.0”); 

那般,准备运动就办好了。上边正式启幕。

018     /*联合选项*/

导出摄像流

019     var config = $.extend(defaults, opt); 

第三步,要由此你 (用户)
同意,才能开拓录制头,渲染录制流,把镜头体以往页面上。

020     /*模板*/

先写这行代码 (此处暗中同意用的是新型版本的Chrome) :

021     var tpl = ‘<div class=”popbox”><div
id=”popboxtop”><span
id=”popboxtopclose”>×</span><span
id=”popboxtoptitle”></span><div
style=”clear:both;”></div></div><div
id=”popboxcontent”></div></div>’; 

1<video id= “webcam”width= “400”height=
“300”autoplay></video>

022     /*弹出*/

然后从main.js开始:

023     function popout(){ 

1$(document).ready(function() {

024         maskLayer(); 

2const video = $( ‘#webcam’)[ 0];

025         $(“body”).prepend(tpl);/*挂载*/

3

026         position();/*调整职责*/

4function onStreaming(stream) {

027         content();/*填充内容*/

5video.srcObject = stream;

028         closed();/*绑定关闭*/

6}

029     }; 

7

030     popout(); 

8navigator.mediaDevices.getUserMedia({ video: true }).then(onStreaming);

031     /*调整岗位*/

9});

032     function position(){ 

到那里,浏览器就该问你“要不要开拓录制头”了。

033         if(isIe6) { 

找到您的脸

034             var fix = ‘absolute’; 

上文提到的clmtrackr.js人脸追踪器,那里就上场。

035         }else{ 

先在const video=…下面,初始化追踪器:

036             var fix = config.fix ? ‘fixed’ : ‘absolute’; 

1const ctrack = new clm.tracker();

037         } 

2ctrack.init();

038         if(config.pos == ‘center’){/*居中*/

然后,在onStreaming()
里面,加上边那句话,就能让追踪器检查和测试录制里的人脸了:

039             var left = ($(window).scrollLeft() + $(window).width()/2

1ctrack.start(video);

  • (config.width/2))+’px’; 

写好这几行,它应该已经能见到你的脸。不信任的话,就让它描出来

040             var top = ($(window).scrollTop() + $(window).height()/2

此地要求三个制图工具。用html里面包车型客车<canvas>标签,在摄像上面臃肿一张画布

  • (config.height/2))+’px’; 

在<video>上边,写上这一串代码:

041            
$(‘.popbox’).css({‘position’:fix,’top’:top,’left’:left,’width’:config.width,’height’:config.height}); 

1<canvas id= “overlay”width= “400”height= “300”></canvas>

042         }else if(config.pos == ‘rightdown’){/*右下*/

2<style>

043            
$(‘.popbox’).css({‘position’:fix,’right’:0,’bottom’:0,’width’:config.width,’height’:config.height}); 

3#webcam, #overlay {

044         }else{/*私下认可居中*/

4position: absolute;

045             var left = ($(window).scrollLeft() + $(window).width()/2

5top: 0;

  • (config.width/2))+’px’; 

6left: 0;

046             var top = ($(window).scrollTop() + $(window).height()/2

7}

  • (config.height/2))+’px’; 

8</style>

047            
$(‘.popbox’).css({‘position’:fix,’top’:top,’left’:left,’width’:config.width,’height’:config.height}); 

如此那般,就有了跟录制尺寸一样的画布。CSS能确认保证画布和录像的职位完全契合。

048         } 

浏览器每做三回渲染,大家就要在画布上画点什么了。画在此之前,要先把在此之前画过的情节擦掉。

049         $(‘#popboxcontent’).css({height:(config.height-31)+’px’}); 

代码长那样,写在ctrack.init() 上面:

050     }; 

1const overlay = $( ‘#overlay’)[ 0];

051     /*填充内容*/

2const overlayCC = overlay.getContext( ‘2d’);

052     function content(){ 

3

053         $(‘#popboxtoptitle’).html(config.title); 

4function trackingLoop() {

054         if(config.ctype == ‘common’){/*文本或html内容*/

5// Check ifa face isdetected, andifso, track it.

055             $(‘#popboxcontent’).html(config.content); 

6requestAnimationFrame(trackingLoop);

056         }else if(config.ctype == ‘url’){/*ajax请求*/

7

057            
if(!config.url){$(‘#popboxcontent’).html(‘请确认url地址’);return;} 

8let currentPosition = ctrack.getCurrentPosition();

058             $.ajax({ 

9overlayCC.clearRect( 0, 0, 400, 300);

059                 url:config.url, 

10

060                 beforeSend :
function(){$(‘#popboxcontent’).html(‘加载中…’);}, 

11if(currentPosition) {

061                 type : ‘post’, 

12ctrack.draw(overlay);

062                 success :
function(msg){$(‘#popboxcontent’).html(msg);}, 

13}

063                 error :
function(){$(‘#popboxcontent’).html(‘加载失利:(‘);} 

14}

064             }); 

至今,在onStreaming() 的ctrack.starg() 前边,调用trackingLoop()
。每一帧里,它都会重国民党的新生活运动行。

065         }else{/*默认*/

其最近候,刷新一下浏览器,你的脸上应该有一个珍珠白又古怪的概略了。

066             $(‘#popboxcontent’).html(config.content); 

澳门金沙4787.com官网 8

067         } 

眼睛截下来

068     } 

这一步,是要在眼睛周围画个矩形框

069     /*遮罩层*/

cmltrackr很善良,除了画个轮廓之外,还有70个面部特征,大家能够接纳本人索要的有个别。

070     function maskLayer(color){ 

澳门金沙4787.com官网 9

071         if(!color){color=’#e7e527′;} 

此地,选2③ 、2八 、2四 、26就够了,在每一个方向上,往外扩大七个像素。

072         var tmpMask=new String; 

然后,矩形框应该丰盛覆盖重点面部消息了 (不离太远、不倒立) 。

073         tmpMask = ‘<div id=”maskLayer”></div>’; 

现在,再拿其它一张画布,来捕捉那么些截下来的矩形。那张画布50 x
25
像素即可,只要把矩形框的尺寸调一下,就能放进去:

074         $(“body”).prepend(tmpMask); 

1<canvas id= “eyes”width= “50”height= “25”></canvas>

075         $(‘#maskLayer’).css({ 

2<style>

076             /*’width’:$(document).width()+’px’,*/

3#eyes {

077             ‘width’:’100%’, 

4position: absolute;

078             ‘height’:$(document).height()+’px’, 

5top: 0;

079             ‘position’:’absolute’, 

6right: 0;

080             ‘top’:’0px’, 

7}

081             ‘left’:’0px’, 

8</style>

082             ‘z-index’:’60’, 

上面这几个函数,会重临 (x,y)
坐标,以及矩形的长度宽度。给它输入的是clmtrackr里面包车型地铁职位阵列 (Position
Array) :

083             ‘background-color’:color, 

1function getEyesRectangle(positions) {

084             ‘filter’:’alpha(opacity=50)’, 

2const minX = positions[ 23][ 0] – 5;

085             ‘opacity’:’0.5′

3const maxX = positions[ 28][ 0] + 5;

086         }); 

4const minY = positions[ 24][ 1] – 5;

087     }; 

5const maxY = positions[ 26][ 1] + 5;

088     /*关闭*/

6

089     function closed(){ 

7const width = maxX – minX;

090         $(‘#popboxtopclose’).bind(‘click’,function(){ 

8const height = maxY – minY;

091             setTimeout(“$(‘#maskLayer’).fadeOut(500)”,0); 

9

092             setTimeout(“$(‘.popbox’).fadeOut(500)”,0); 

10return[minX, minY, width, height];

093             setTimeout(“$(‘#maskLayer’).remove()”,500); 

11}

094             setTimeout(“$(‘.popbox’).remove()”,500); 

接下去,要把矩形框提取出来。具体方法是,在首先张画布上把它描成深灰,再复制到第1张画布上。

095         }); 

替换trackingLoop()里面的if块:

096     } 

1if(currentPosition) {

097     /*拖拽*/

2// Draw facial mask on overlay canvas:

098     var mouse={x:0,y:0}; 

3ctrack.draw(overlay);

099     function moveDialog(event){ 

4

100         var e = window.event || event; 

5// Get the eyes rectangle anddraw it inred:

101         var top = parseInt($(‘.popbox’).css(‘top’)) + (e.clientY –
mouse.y); 

6const eyesRect = getEyesRectangle(currentPosition);

102         var left = parseInt($(‘.popbox’).css(‘left’)) + (e.clientX –
mouse.x); 

澳门金沙4787.com官网,7overlayCC.strokeStyle = ‘red’;

103         if(top < 1){top = 0;}/*上*/

8overlayCC.strokeRect(eyesRect[ 0], eyesRect[ 1], eyesRect[ 2],
eyesRect[ 3]);

104         if(left < 1){ left = 0;}/*左*/

9

105         bt = $(window).height() – config.height; if(top > bt){top
= bt;}/*下*/

10// The video might internally have a different size, so we need these

106         rt = $(window).width() – config.width; if(left > rt){left
= rt;}/*右*/

11// factors to rescale the eyes rectangle before cropping:

107         $(‘.popbox’).css({top:top,left:left}); 

12const resizeFactorX = video.videoWidth / video.width;

108         mouse.x = e.clientX; 

13const resizeFactorY = video.videoHeight / video.height;

109         mouse.y = e.clientY; 

14

110     }; 

15// Crop the eyes fromthe video andpaste them inthe eyes canvas:

111     $(‘#popboxtop’).mousedown(function(event){ 

16const eyesCanvas = $( ‘#eyes’)[ 0];

112         if(!config.drag || config.pos==’rightdown’){return;} 

17const eyesCC = eyesCanvas.getContext( ‘2d’);

113         var e = window.event || event; 

18

114         mouse.x = e.clientX; 

19eyesCC.drawImage(

115         mouse.y = e.clientY; 

20video,

116         $(document).bind(‘mousemove’,moveDialog); 

21eyesRect[ 0] * resizeFactorX, eyesRect[ 1] * resizeFactorY,

117     }); 

22eyesRect[ 2] * resizeFactorX, eyesRect[ 3] * resizeFactorY,

118     $(document).mouseup(function(event){ 

230, 0, eyesCanvas.width, eyesCanvas.height

119         $(document).unbind(‘mousemove’, moveDialog); 

24);

120     }); 

25}

121     /*结束*/

最近,应该看获得眼睛周围的癸丑革命矩形框了。

122 } 

DIY全攻略 (下) :磨练与测试 收集数据

123 </script>

眼珠子追踪,收集数据的措施其实有很二种。可是,让眼睛跟着鼠标走,是最简便的,随时按下空格都足以捕获一幅图像。

 

1 追踪鼠标

mootools版本

想精通鼠标每时每刻都在怎样岗位,就给document.onmousemove加上3个伊夫ntListener。

001 <script type=”text/javascript”
src=”mootools.js”></script> 

那般做还足以把坐标归一化 (转化到 [-1, 1] 的范围里) :

002 <script type=”text/javascript”> 

1// Track mouse movement:

003 function sbox(opt){ 

2const mouse = {

004     /*默认*/

3x: 0,

005     var defaults = { 

4y: 0,

006         title : ‘标题’, 

5

007         content : ‘内容’, 

6handleMouseMove: function(event) {

008         ctype : ‘common’, 

7// Get the mouse position andnormalize it to [ -1, 1]

009         width : 300, 

8mouse.x = (event.clientX / $(window).width()) * 2- 1;

010         height : 200, 

9mouse.y = (event.clientY / $(window).height()) * 2- 1;

011         mask : true, 

10},

012         drag : true, 

11}

013         pos : ‘center’, 

12

014         fix : true, 

13document.onmousemove = mouse.handleMouseMove;

015         url : ”

2 捕捉图像

016     }; 

此地要做的是,按下空格键之后的任务:从画布上捕捉图像,储存为张量。

017     var isIe6 = Browser.Engine.trident4; 

TensorFlow.js提供了3个帮手函数,叫tf.fromPixels(),只要用它来囤积第3张画布里走出的图像,然后归一化:

018     /*统一选项*/

1function getImage() {

019     var config = Object.merge(defaults, opt); 

2// Capture the current image inthe eyes canvas asa tensor.

020     /*尺寸*/

3returntf.tidy(function() {

021     var sizeScr = $(document.body).getScroll(); 

4const image = tf.fromPixels($( ‘#eyes’)[ 0]);

022     var sizeScrollSize = $(document.body).getScrollSize(); 

5// Add a batch dimension:

023     var sizeWin = $(document.body).getSize(); 

6const batchedImage = image.expandDims( 0);

024     /*模板*/

7// Normalize andreturnit:

025         /*创办成分*/

8returnbatchedImage.toFloat().div(tf.scalar( 127)).sub(tf.scalar( 1));

026     var tpl1 = new Element(‘div’,{class:’popbox’}); 

9});

027     var tpl2 = new Element(‘div’,{id:’popboxtop’}); 

10}

028     var tpl3 = new Element(‘div’,{id:’popboxcontent’}); 

留神小心,即使把装有数据做成一个大练习集也是足以的,但要么留部分做验证集正如不易,比如五分之一。

029     var tplclear = new Element(‘div’,{styles:{clear:’both’}}); 

那般,便与检查和测试模型的性子,以及确认它从未过拟合

030     var span1 = new Element(‘span’,{id:’popboxtopclose’}); 

以下是添加新数据点用的代码:

031     var span2 = new Element(‘span’,{id:’popboxtoptitle’}); 

1const dataset = {

032         /*填充内容,结构*/

2train: {

033     span1.innerHTML = ‘×’; 

3n: 0,

034     tpl2.grab(span1); 

4x: null,

035     tpl2.grab(span2); 

5y: null,

036     tpl1.grab(tpl2); 

6},

037     tpl1.grab(tpl3); 

7val: {

038     /*弹出*/

8n: 0,

039     function popout(){ 

9x: null,

040         maskLayer(); 

10y: null,

041         $(document.body).grab(tpl1,’top’);/*挂载*/

11},

042         position();/*调动地方*/

12}

043         content();/*填充内容*/

13

044         closed();/*绑定关闭*/

14function captureExample() {

045     }; 

15// Take the latest image fromthe eyes canvas andadd it to our dataset.

046     popout(); 

16tf.tidy(function() {

047     /*调动岗位*/

17const image = getImage();

048     function position(){ 

18const mousePos = tf.tensor1d([mouse.x, mouse.y]).expandDims( 0);

049         if(isIe6) { 

19

050             var fix = ‘absolute’; 

20// Choose whether to add it to training ( 80%) orvalidation ( 20%)
set:

051         }else{ 

21const subset = dataset[Math.random() > 0.2? ‘train’: ‘val’];

052             var fix = config.fix ? ‘fixed’ : ‘absolute’; 

22

053         } 

23if(subset.x == null) {

054         if(config.pos == ‘center’){/*居中*/

24// Create new tensors

055             var left = (sizeScr.x + sizeWin.x/2 –
(config.width/2))+’px’; 

25subset.x = tf.keep(image);

056             var top = (sizeScr.y + sizeWin.y/2 –
(config.height/2))+’px’; 

26subset.y = tf.keep(mousePos);

057            
$$(‘.popbox’).setStyles({‘position’:fix,’top’:top,’left’:left,’width’:config.width,’height’:config.height}); 

27} else{

058         }else if(config.pos == ‘rightdown’){/*右下*/

28// Concatenate it to existing tensors

059            
$$(‘.popbox’).setStyles({‘position’:fix,’right’:0,’bottom’:0,’width’:config.width,’height’:config.height}); 

29const oldX = subset.x;

060         }else{/*暗许居中*/

30const oldY = subset.y;

061             var left = (sizeScr.x + sizeWin.x/2 –
(config.width/2))+’px’; 

31

062             var top = (sizeScr.y + sizeWin.y/2 –
(config.height/2))+’px’; 

32subset.x = tf.keep(oldX.concat(image, 0));

063            
$$(‘.popbox’).setStyles({‘position’:fix,’top’:top,’left’:left,’width’:config.width,’height’:config.height}); 

33subset.y = tf.keep(oldY.concat(mousePos, 0));

064         } 

34}

065        
$(‘popboxcontent’).setStyles({height:(config.height-31)+’px’}); 

35

066     }; 

36// Increase counter

067     /*填充内容*/

37subset.n += 1;

068     function content(){ 

38});

069         $(‘popboxtoptitle’).innerHTML = config.title; 

39}

070         if(config.ctype == ‘common’){/*文本或html内容*/

最后,把空格键提到进来:

071             $(‘popboxcontent’).innerHTML = config.content; 

1$( ‘body’).keyup(function(event) {

072         }else if(config.ctype == ‘url’){/*ajax请求*/

2// On space key:

073             if(!config.url){$(‘popboxcontent’).innerHTML =
‘请确认url地址’;return;} 

3if(event.keyCode == 32) {

074             new Request({ 

4captureExample();

075                 url:config.url, 

5

076                 onRequest : function(){$(‘popboxcontent’).innerHTML
= ‘加载中…’;}, 

6event.preventDefault();

077                 method : ‘post’, 

7returnfalse;

078                 onSuccess :
function(msg){$(‘popboxcontent’).innerHTML = msg;}, 

8}

079                 onFailure : function(){$(‘popboxcontent’).innerHTML
= ‘加载失利:(‘;} 

9});

080             }).send(); 

迄今,只要您按下空格,数据集里就会增多贰个多少点了。

081         }else{/*默认*/

演练模型

082             $(‘popboxcontent’).innerHTML = config.content; 

就搭个最简易的CNN吧。

083         } 

澳门金沙4787.com官网 10

084     } 

TensorFlow.js里面有3个和Keras很相像的API可以用。

085     /*遮罩层*/

其一互连网里,要有1个卷积层,1个最大池化,还要有个密集层,带八个出口值
(坐标) 的那种。

086     function maskLayer(color){ 

高级中学级,加了2个dropout作为正则化器;还有,用flatten把2D多少降成1D。磨炼用的是Adam优化器。

087         if(!color){color=’#e7e527′;} 

模型代码长那样:

088         var tmpMask=new String; 

1let currentModel;

089         tmpMask = new Element(‘div’,{id:’maskLayer’}); 

2

090         $(document.body).grab(tmpMask,’top’); 

3function createModel() {

091         $(‘maskLayer’).setStyles({ 

4const model = tf.sequential();

092             ‘width’:’100%’, 

5

093             ‘height’:sizeScrollSize.y+’px’, 

6model.add(tf.layers.conv2d({

094             ‘position’:’absolute’, 

7kernelSize: 5,

095             ‘top’:’0px’, 

8filters: 20,

096             ‘left’:’0px’, 

9strides: 1,

097             ‘z-index’:’60’, 

10activation: ‘relu’,

098             ‘background-color’:color, 

11inputShape: [$( ‘#eyes’).height(), $( ‘#eyes’).width(), 3],

099             ‘filter’:’alpha(opacity=50)’, 

12}));

100             ‘opacity’:’0.5′

13

101         }); 

14model.add(tf.layers.maxPooling2d({

102     }; 

15poolSize: [ 2, 2],

103     /*关闭*/

16strides: [ 2, 2],

104     function closed(){ 

17}));

105         $(‘popboxtopclose’).addEvent(‘click’,function(){ 

18

106             $(‘maskLayer’).destroy(); 

19model.add(tf.layers.flatten());

107             $$(‘.popbox’).destroy(); 

20

108         }); 

21model.add(tf.layers.dropout( 0.2));

109     } 

22

110     /*拖拽*/

23// Two output values x andy

111     var mouse={x:0,y:0}; 

24model.add(tf.layers.dense({

112     function moveDialog(event){ 

25units: 2,

113         var e = new Event(event); 

26activation: ‘tanh’,

114         var top = parseInt($$(‘.popbox’).getStyle(‘top’)) +
(e.client.y – mouse.y); 

27}));

115         var left = parseInt($$(‘.popbox’).getStyle(‘left’)) +
(e.client.x – mouse.x); 

28

116         if(top < 1){top = 0;}/*上*/

29// Use ADAM optimizer withlearning rate of 0.0005andMSE loss

117         if(left < 1){ left = 0;}/*左*/

30model.compile({

118         bt = sizeWin.y – config.height; if(top > bt){top =
bt;}/*下*/

31optimizer: tf.train.adam( 0.0005),

119         rt = sizeWin.x – config.width; if(left > rt){left =
rt;}/*右*/

32loss: ‘meanSquaredError’,

120         $$(‘.popbox’).setStyles({‘top’:top,’left’:left}); 

33});

121         mouse.x = e.client.x; 

34

122         mouse.y = e.client.y; 

35returnmodel;

123     }; 

36}

124     $(‘popboxtop’).addEvent(‘mousedown’,function(event){ 

磨炼初始此前,要先安装3个固定的epoch数,再把批尺寸设成变量(因为数量集不大)

125         if(!config.drag || config.pos==’rightdown’){return;} 

1function fitModel() {

126         var e = new Event(event); 

2let batchSize = Math.floor(dataset.train.n * 0.1);

127         mouse.x = e.client.x; 

3if(batchSize < 4) {

128         mouse.y = e.client.y; 

4batchSize = 4;

129         $(window).addEvent(‘mousemove’,moveDialog); 

5} elseif(batchSize > 64) {

130     }); 

6batchSize = 64;

131     $(window).addEvent(‘mouseup’,function(event){ 

7}

132         $(window).removeEvent(‘mousemove’, moveDialog); 

8

133     }); 

9if(currentModel == null) {

134     /*结束*/

10currentModel = createModel();

135 } 

11}

136 </script>

12

弹窗在ie6下 position:fixed
极度,可是现在还有多少人用ie6呢?竟放火,不考虑也罢!

13currentModel.fit(dataset.train.x, dataset.train.y, {

必要:jquery版本=1.2.6,mootools用新型版本 先看截图啊:
在firefox、chrome、高版本ie下:有…

14batchSize: batchSize,

15epochs: 20,

16shuffle: true,

17validationData: [dataset.val.x, dataset.val.y],

18});

19}

下一场,在页面上做个教练按钮吧:

1<button id= “train”>Train!</button>

2<style>

3#train {

4position: absolute;

5top: 50%;

6left: 50%;

7transform: translate( -50%, -50%);

8font-size: 24pt;

9}

10</style>

还有JS:

1<button id= “train”>Train!</button>

2<style>

3#train {

4position: absolute;

5top: 50%;

6left: 50%;

7transform: translate( -50%, -50%);

8font-size: 24pt;

9}

10</style> 拉出来遛遛

碧绿圈圈到底来了。AI判断你在看哪,它就出现在哪。

先写绿圈圈:

1<div id= “target”></div>

2<style>

3#target {

4background-color: lightgreen;

5position: absolute;

6border-radius: 50%;

7height: 40px;

8width: 40px;

9transition: all 0.1s ease;

10box-shadow: 0020px 10px white;

11border: 4px solid rgba( 0, 0, 0, 0.5);

12}

13</style>

下一场,想让绿圈圈动起来,就要定期把眼睛图像传给神经网络。问它你在看哪,它就应对叁个坐标:

1function moveTarget() {

2if(currentModel == null) {

3return;

4}

5tf.tidy(function() {

6const image = getImage();

7const prediction = currentModel.predict(image);

8

9// Convert normalized position back to screen position:

10const targetWidth = $( ‘#target’).outerWidth();

11const targetHeight = $( ‘#target’).outerHeight();

12const x = (prediction.get( 0, 0) + 1) / 2* ($(window).width() –
targetWidth);

13const y = (prediction.get( 0, 1) + 1) / 2* ($(window).height() –
targetHeight);

14

15// Move target there:

16const $target = $( ‘#target’);

17$target.css( ‘left’, x + ‘px’);

18$target.css( ‘top’, y + ‘px’);

19});

20}

21

22setInterval(moveTarget, 100);

距离设的是100毫秒,不过也足以改的。

简单的讲,马到成功。

澳门金沙4787.com官网 11

鼻孔眼睛分不清?

眼球追踪模型很风趣,然则依然有部分喜人的先天不足。

例如,算法还不得不识别正面,脸稍微侧一点AI就会困惑。

例如,有时候会把鼻孔鉴定区别成眼睛。

比如说,必须整张脸都冒出在镜头里,才能分辨眼睛的到处,捂住嘴也不行。

澳门金沙4787.com官网 12

来自怪异君

马克斯也说,还有不少方可追究的上空。

温馨磨炼传送门:

代码完结传送门:

课程原著传送门:

澳门金沙4787.com官网 13

金立云•普惠AI,让开发充满AI!

爱上你的代码,爱做 “改变世界”的走动派!

大会将第②遍发表AI开发框架,从AI模型磨炼到AI模型铺排的全方位开发一站式达成!让AI开发触手可及!归来乐乎,查看越多

主编:

相关文章