整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

前端也智能?Javascript实现人脸检测

前端也智能?Javascript实现人脸检测

一直对人工智能有着极大兴趣,无奈脑袋再大也无法想象那是一种怎样的算法实现机制,因此无论是遇到声音识别、色彩识别还是人脸检测的需求,我都说不会、不知道、不了解!

今天给大家介绍的tracking.js库带来不同的计算机视觉算法和技术,在浏览器环境。通过使用现代的HTML5规范,我们让你做实时色彩跟踪,人脸检测以及更多,小伙伴们终于可以发挥自己无限的想象力了。

下面是一些效果图。

这个游戏 呢 是开启摄像头后,根据玩家头的转向进行控制的,非常有意思。

虽然看上去挺高深的但是使用起来却很方便。

第1步:创建示例文件

在此步骤中,您将创建下示例文件examples/夹到您解压的本地驱动器下的项目。进入该目录,并创建一个名为在你喜欢的编辑器文件。起始文件看起来像这样:first_tracking.html

<!doctype html><html><head>

<meta charset="utf-8">

<title>tracking.js - first tracking</title>

<script src="../build/tracking-min.js"></script></head><body>

<script>

// Start tracking here...

</script></body></html>

步骤2:选择需要的功能

现在,你有示例文件创建的,它的时间来选择你要在行动中看到什么技术。有此页面上提供了几个例子,第一个,的跟踪,仅仅是一个抽象类的其他跟踪技术基础,不能被实例化。一个很好的选择下手的是ColorTracker,复制本部分提供的片段,并贴到您的示例文件,它到底应该是这个样子:first_tracking.html

<!doctype html><html><head>

<meta charset="utf-8">

<title>tracking.js - first tracking</title>

<script src="../build/tracking-min.js"></script></head><body>

<video id="myVideo" width="400" height="300" preload autoplay loop muted></video>

<script>

var colors=new tracking.ColorTracker(['magenta', 'cyan', 'yellow']);

colors.on('track', function(event) {

if (event.data.length===0) { // No colors were detected in this frame.

} else {

event.data.forEach(function(rect) {

console.log(rect.x, rect.y, rect.height, rect.width, rect.color);

});

}

});

tracking.track('#myVideo', colors); </script></body></html>

这个例子会要求你出现在它的前置摄像头和跟踪品红,青色和黄色。看看你的周围,抓住这些颜色中的一种匹配的任何对象,看你的浏览器的控制台,它应该显示所有找到的对象的坐标。

项目的官网是:https://trackingjs.com/docs.html#introduction

或者直接用github搜tracking.

就这么多,enjoy it!!!

inux简单操作命令回顾:

pwd# 显示当前工作目录的绝对路径

ls # 列出目录内容

ls -a # 列出全部文件,包括隐藏文件

ls -l # 列出全部文件,包括文件属性和权限等

cd# 来切换目录

cd ~ # 回到自己的家目录

cd - # 回到上一次所在目录

cd .. # 回到当前目录的上一级目录

mkdir # 创建一个新的目录

mkdir -p # 创建多层目录

touch # 加文件名来创建空文件

rm # 删除指定的文件

rm -f # 删除指定的文件而不提示确认

cat # 查看文件内容,从第一行开始显示,适合查看小文件

cat -n # 查看文件内容同时显示所有的行号,包括空行

more # 分屏查看文件内容。空格向下翻一页,回车向下翻一行,Ctrl+F向下滚一屏,Ctrl+B返回上一屏,=输出当前行号,:f输出文件名和当前行号,q离开more不再显示

less # 分屏显示文件内容,根据显示需要加载内容,适合查看大型文件。空格向下翻一页,pgup向下翻一页,pgdn向上翻一页,/字串向下搜寻字串n向下找N向上找,?字串向上搜寻字串n向上找N向下找,q离开

head -n # 查看文件头数行内容

tail # 查看文件尾部内容,默认显示后10行内容

tail -n# 查看文件尾部数行内容

cat 文件名1>文件名2 # 重定向>将命令结果重定向到一个文件,本应显示在终端上的内容保存到指定文件夹中;>>追加内容

| #管道,把左边的命令返回的结果交给右边命令进行处理

find 搜索范围文件路径 -name 指定的文件名 # 根据名称查找搜索范围下指定格式的文件

find 搜索范围文件路径 -user 用户名 # 根据用户名查找搜索范围下用户名为指定用户名的文件

find 搜索范围文件路径 -size +n # 根据文件大小查找搜索范围下文件大小大于n的文件(+n:大于,-n:小于,n:等于)

ls | grep -n 原文件 # 查找某文件在第几行。用ls查找看的时候也要用ls,即两个要匹配否则行号会出错


一、linux环境部署

Linux环境使用建议只进行Jmeter场景的执行操作,脚本编写验证的过程建议在Windows下完成后上传到Linux服务器上。


使用目的:防止由于网络问题导致的压不上去的问题,由于客户端资源使用情况导致压力压不上去的问题。

1、linux上安装部署jmeter

jdk环境部署,配置环境变量,验证安装是否成功java -version

jmeter环境部署,配置环境变量,验证安装是否成功jmeter -v

2、linux执行jmeter脚本

将本地生成的jmx文件上传至linux平台,执行命令:

jmeter -n -t 脚本文件 -l 日志文件 -e -o 指定目录

DOS命令执行测试脚本生成html格式的测试报告

jmeter -n -t /home/yace/scrpts/data.jml -l result.jtl 生成日志文件可在jmeter GUI界面,聚合 里打开

-n:no-gui,无图形化界面执行,命令行模式

-t:jmx脚本文件路径

-l:日志,jtl结果文件存放路径

-e:生成

-o:指定html报表生成到哪个文件夹下

jmeter -g result.jtl -o report

-g:指定jtl文件路径

-o:指定html报表生成到哪个个文件夹下


Jmeter自带了一个生成HTML报表的功能,功能强大,生成的报表中既包含了类似聚合报告中的最终汇总结果,还有各请求的性能曲线图,包括TPS、响应时间等等。


大多情况下,Jmeter自带的HTML报表功能已经能满足我们的需求。但是,此功能有一个比较大的缺陷,那就是性能比较差,换句话说就是分析很慢。TPS越高、执行时间越长、生成的jtl文件越大,分析的越慢。

3、下载jmeter-graph.jar 包,上传至linux服务器

相比Jmeter自带的HTML报表,它具备以下优点:

1、统计结果所需时间很短,速度比原生报表快将近30倍。

2、简化了一些不必要的性能数据统计,保留了核心性能数据,如,TPS统计、平均响应时间、90%、95%、99%响应时间、错误率,以及TPS曲线图、平均响应时间曲线图。

4、生成报告

java -jar jmeter -graph.jar jtl 文件路径 统计间隔时间(秒)

java -jar jmeter -graph.jar result.jtl 10

5、文件夹压缩

ls 查看目录内容


tar -cvzf 压缩包包名 文件1 文件2....

-c生成档案文件,创建打包文件

-v列出归档解挡的详细过程,显示进度

-f指定档案文件名称

-t列出档案中包含的文件

-x解开档案文件

-z有gzip属性的

-j有bz2属性的


打包,压缩,解压,解包

tar –cvf jpg.tar *.jpg // 将目录里所有jpg文件打包成 jpg.tar

tar –czf jpg.tar.gz *.jpg // 将目录里所有jpg文件打包成 jpg.tar 后,并且将其用 gzip 压缩,生成一个 gzip 压缩过的包,命名为 jpg.tar.gz

tar -zxvf jpg.tar.gz -c batr //解压

tar –cjf jpg.tar.bz2 *.jpg // 将目录里所有jpg文件打包成 jpg.tar 后,并且将其用 bzip2 压缩,生成一个 bzip2 压缩过的包,命名为jpg.tar.bz2

tar –xjf jpg.tar.bz2 -c jtar //解压

zip -r zz.zip *.txt //zip -r zz *.txt,zz代表要生成的压缩文件,不需要扩展名,会自动生成zip扩展名,-r压缩所有子目录

unzip -d zz file.zip // 解压 zip,-d解压目录


压缩率zip<gzip<bzip2

通用性zip>gzip>bzip2

6、复制文件下载

拷贝:cp 1.txt a //将1.txt文件复制到a文件夹下

移动:mv abc.txt a //将abc.txt移动到a文件夹下


cat -n sys.log | tail -n +100000 | head -n 20 #-n显示行号,查看日志特定行数范围内容

cat order.log | grep '下单成功' lwc #lwc行数、字数、字节数


7、linux命令补充

1、linux修改hosts

sudo是linux系统中一种很常见的权限管理机制,允许非root用户以特定的身份执行特定的命令。

由于hosts文件位于系统目录下,普通用户无法直接修改。因此,我们需要进入root用户模式。在终端中输入以下命令:

sudo su

vi /etc/hosts

修改完hosts文件后,按下Esc键退出编辑模式,然后输入:wq命令保存并退出。

2、网络检测 ping www.baidu.com

3、查找文件find、grep

4、查看某日志特定行数范围内的内容

cat -n sys.log | tail -n +10000 | head -n 20

第一个数字代表日志起始行数 第二个数字代表要看的内容有多少行

cat xiadan.lpg | grep '下单成功' | wc lwc行数字数字节数

?4.1 基本类型和引用类型的值

  • 基本类型:Undefined、Null、Boolean、Number、String
  • 引用类型:除基本类型外的

4.1.1 动态的属性

引用类型可动态创建属性(即先创建对象,后添加属性和方法)。

var obj=new Object();

obj.name=“伍德春”;

4.1.2 复制变量值

如果变量是基本类型值,那么是复制结果,更改其中一个不会影响另一个:

"use strict";

var num1 =5;

var num2 = num1;

num1 =10;

alert(num2);

num1更改为10以后,num2还是5,并不受其影响。

如果变量是引用类型的值,那么两个变量都指向同一对象(即新复制的变量也是指向同一内存地址的):

var num1 = new Object();

var num2 = num1;

num1.name = "伍德春";

alert(num2.name);

4.1.3 传递参数

所有函数的参数都是按值传递,即基本类型在函数中修改变量的值时,外部原变量不会更改,因为是修改的复制对象;而引用类型由于是指向的同一地址的内容,所以在函数内部修改后,外部的也变化了。

function change(v1) {

   v1=10;

}

var v=20;

change(v);

alert(v);   // 20

function changeObj(obj){

   obj.name="伍德春";

}

var person=new Object();

person.name="李四";

changeObj(person);

alert(person.name);

4.1.4 检测类型

结果=变量 instanceof 类型

4.2 执行环境及作用域

书中描述太复杂了,如果画两个圈,外面一个,里面一个,那就是内部可以访问外部,但外部不能访问内部。

4.2.1 延长作用域链

这两个语句会改变作用域:try-catch、with

4.2.2 没有块级作用域

  • 在javascript中没有块级作用域
  • 如果在函数中使用var定义变量,则该变量的使用域在函数体内,如果不使用var,则会变全局变量。

4.3 垃圾收集

4.3.1 标记清除

4.3.2 引用计数

循环引用时会出错,需要手动断开,myObject.element=null(许多语言中是手动释放)