人脸识别html5效果,用HTML5实现人脸识别

注:今天 HTML5 小组沙龙《论道 HTML5 》分享时有朋友问到一个问题, getUserMedia 是否会支持人脸识别,我当时的答案是这应该是应用来实现的功能,而不是规范要完成的工作。而我之前在网上看到过一篇关于 getUserMedia 和人脸识别的相关文章,觉得很有趣,正好趁这个机会分享给大家。

转载请注明出处: 蒋宇捷的博客

“ 现代 Web” 不断发展出不少有趣的 API ,但你并不会在大多数项目中使用到所有的内容。例如我一直特别关注 Canvas 特性。它对游戏和绘图意义重大 – 但是仅此而已。它并不是一个不好的特性,我只是不会经常用到它。每当看到一些开发中酷炫的新功能,我的大脑里都会思考它们可以产生哪些 实际 用途。显然对你有价值的内容可能对我来说并不一定,但搞清楚我如何实际使用一个功能是我学习它的一部分。

其中的一个特性是 getUserMedia ( )。它是一个 JavaScript API ,可以让你访问(需要权限)用户的网络摄像头和麦克风。 目前 Opera 和 Chrome (我相信现在的版本 18 可以支持,但是你可能需要使用 Canary 。你还需要启用它。这儿有一个 。)一旦你启用了 getUserMedia ,它使用起来相当简单。这里有一个快速的访问请求:

//a video tagvar video = document.getElementById('monitor');//request itnavigator.webkitGetUserMedia('video', gotStream, noStream);function gotStream(stream) {video.src = webkitURL.createObjectURL(stream);video.onerror = function () {stream.stop();streamError();};}function noStream() {document.getElementById('errorMessage').textContent = 'No camera available.';}function streamError() {document.getElementById('errorMessage').textContent = 'Camera error.';}

getUserMedia 的第一个参数是类型。 根据规范,这应该是一个对象,你可以启用音频、视频,或两者兼而有之,像这样: {audio:true, video:true} 。 然而在我的测试中,传递一个字符串 “video” 也可以正常工作。 你将看到的演示基于另一个演示,所以代码来自于一个较早的 Chrome 下的版本。 第二个和第三个参数是操作成功和失败的回调函数。

你可以看到操作成功的事件处理函数将视频流分配给HTML5 Video 标签。最酷的是,一旦运行起来,你就可以使用 Canvas API 来拍照。 对于这个演示,可以看看 Greg Miernicki 的 Demo :

如果这个Demo 无法工作,可以按照下面的说明来开启getUserMedia支持后再次进行尝试。(虽然我打算分享一些屏幕截图,所以如果你只是想继续阅读,那也没关系。)

基于Greg 的Demo,我突然想到可以用网络摄像头的照片做一些很酷的东西。我记得 有一个 非常 酷的 API 来解析脸部的图片。 (我 11 月曾经在博客里写了一个 ColdFusion 的 。)然后我在想,是否我们能把 Greg 的 Demo 与 Face.com 的 API 结合起来做一些基本面部识别的 Demo 。

5873028cb4901bb43401db87928ee2e2.gif

这有这几个重大问题。 第一 – Face.com 有一个很好的 REST API ,我们将如何从 JavaScript 应用程序里面来调用它? 其次 – Face.com 需要你可以上传图片,或给它一个网址。 我知道可以把一个 Canvas 图片发送给服务器,并通过我的后台上传到 Face.com ,但有没有办法绕过服务器来把图片发送给这个 API ?

第一个实际上并不是问题。 Face.com 实现了 (跨域资源共享)。 CORS 系统基本上可以让服务器暴露给其它域上文件的 Ajax 调用。 这是一个伟大的功能,我希望更多的服务能够使用它。

更复杂的问题则是如何把画布上的数据发送到Face.com (宇捷注:还可以参考我的这篇文章《 如何使用 HTML5 实现拍照上传应用 》)。我如何模拟文件上传?这里有另一个很酷的新技巧 – Formdata 。 ColdFusion 的研究员 Sagar Ganatra 关于这个话题有一篇很棒的 。 下面展示了我如何使用它:

function snapshot() {$("#result").html("

Working hard for the money...

");canvas.width = video.videoWidth;canvas.height = video.videoHeight;canvas.getContext('2d').drawImage(video, 0, 0);var data = canvas.toDataURL('image/jpeg', 1.0);newblob = dataURItoBlob(data);var formdata = new FormData();formdata.append("api_key", faceKey);formdata.append("api_secret", faceSecret);formdata.append("filename","temp.jpg"); formdata.append("file",newblob); $.ajax({ url: 'http://api.face.com/faces/detect.json?attributes=age_est,gender,mood,smiling,glasses', data: formdata, cache: false, contentType: false, processData: false, dataType:"json", type: 'POST', success: function (data) { handleResult(data.photos[0]); }}); }

让我们一行行来看这段代码。 首先 – 我需要从画布对象获取二进制数据。 有几种方法可以实现,但是我尤其想要一个二进制的 Blob 。 请注意 dataURIToBlob 方法。 这是几周前我从 上发现的。

我创建了一个新的formdata 对象,然后简单地设置了自己所需的值。你可以看到我发起了几个 API 请求,但关键在于文件名和文件对象本身。

接下来你可以看到简单的jQuery Ajax 调用。 Face.com 有多种选择,但我基本只要求它返回预测年龄、性别、情绪,是否面带微笑以及戴着眼镜。 就是这些。我得到了一个很棒的 JSON 包,并且对它进行了格式化。

现在显然API 并不完美。我获得了使用 API 一些不同程度的结果。 有时相当准确,有时相反。但是总体来说,这相当酷。这里有一些实际测试的图片,看起来有点“可怕”。

0193e91c58d234d9c55a5e307e6c469c.png

识别结果:neutral(无表情)

dd26d6fd3370d697a5cdfcfa4ff4cf47.png

识别结果: happy(开心)

17c405dbccd620d2b6309075d9ddd139.png

识别结果:surprised(惊讶)

adf8c3fffddb3511b3af34444b20852f.png

识别结果:sad(悲伤)

好了,准备自己亲自来试试? 只需点击下面的演示按钮。如果需要源代码,可以直接在页面上查看! 这是100 %的纯客户端代码。

8795c2c5c1ba93e807ade8938b72dc98.png

如果想从另外一方面了解 getUserMedia ,可以看看这些例子:

感谢 getUserMedia ( HTML5Doctor 的这篇文章不错,可以了解到 getUserMedia 的前世今生,以及和 HTML Media Capture API 的区别。)

本文转载自:蒋宇捷的专栏

欢迎加入我爱机器学习QQ14群:336582044

getqrcode.jpg

微信扫一扫,关注我爱机器学习公众号

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/394649.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为mate40会不会有鸿蒙系统,鸿蒙OS系统正式推送,拿华为Mate40更新后,发现了优缺点...

自从鸿蒙系统正式推送之后,笔者一直都带着好奇心在体验着HarmonyOS 2带来的变化,生怕错过惊喜,也担心系统本身会出现不足。因为鸿蒙系统就像是年轻人一样,才刚刚出炉,需要时间去磨练,然后才能发挥出真正强大…

jstack使用

jstack主要用来查看某个Java进程内的线程堆栈信息,根据堆栈信息我们可以定位到具体代码,所以它在JVM性能调优中使用得非常多,语法格式如下: jstack [option] pid jstack [option] executable core jstack [option] [server-id]rem…

删除目录软链接注意事项

2019独角兽企业重金招聘Python工程师标准>>> 实验环境: 在root 目录下创建一个目录 1 ,并在该目录下创建一个2.txt 的文件,写入内容 1.txt: [rootserver ~]# mkdir 1 [rootserver ~]# echo 1.txt > 1/2.txt [rootserver ~]# tree 1 1 └─…

html如何模拟点击,Javascript 模拟点击事件(点击链接与html点击) 兼容IE/Firefox

一把情况下模拟点击一般两个方面,模拟点击超级连接事件firefox的兼容的函数为对HTMLAnchorElement 加入onclick事件try {// create a element so that HTMLAnchorElement is accessibledocument.createElement(a);HTMLElement.prototype.click function () {if (ty…

mvn编写主代码与测试代码

maven编写主代码与测试代码 3.2 编写主代码 项目主代码和测试代码不同,项目的主代码会被打包到最终的构件中(比如jar),而测试代码只在运行测试时用到,不会被打包。默认情况下,Maven假设项目主代码位于src/…

打印速度快点的打印机_SLM推出了功能强大的新型金属3D打印机,速度快20倍

德国金属3D打印机制造商SLM Solutions在Formnext Connect贸易展览会上推出了功能强大的新系统NXG XII 600。SLM的大幅面机器配备了十二个可同时运行的1 KW激光器,使其速度比该公司自己的单激光SLM 280快20倍。NXG XII 600经过定制设计,可大量生产大型零件…

1.7Oob 继承关系中构造方法的使用

1:父类中最好要有一个空参数的构造方法,因为默认的构造方法在自定义了构造方法后就不存在了,需要显示的写出来。 若父类中没有空参数的构造方法,则子类必须有自定义的构造方法,且用super()调用父…

JavaScript浮点运算0.2+0.1 !== 0.3

浮点运算JavaScript 本文主要讨论JavaScript的浮点运算,主要包括 JavaScript number基本类型二进制表示十进制浮点数的精度number 数字类型 在JavaScript中,数字只有number这一种类型; var intS 2,floatA 0.1; typeof intS; // number typeof floatA…

三菱模拟量输入与输出程序_初学PLC是学习西门子还是三菱?

PLC的种类繁多,品牌大多分为欧系、日系、美系。德系PLC以西门子为主,日系有三菱、欧姆龙、松下……,美系有罗克韦尔(A-B)通用电气(GE)公司、莫迪(MODICON)公司等。美国和欧洲的PLC技术是在相互隔离情况下独立研究开发的,因此美国和…

性能测试十四:Xshell链接linux虚拟机

一、先装一个linux虚拟机 VBoxcentos1、先下载Linux镜像文件的ovf或者OVA文件2、打开vbox,点击菜单栏“管理”-“导入虚拟电脑3、选择解压路径中的ovf或者OVA文件,点击下一步 4、点击“导入”,等待完成5、导入成功后,选择新导入的…

html5进度条插件 传递参数,Html5进度条插件(自写)

(function () {window.H5ProgressBar function (obj) {this.height obj.height;this.width obj.width;this.speed obj.speed;};//在界面上布局元素H5ProgressBar.prototype.drawLayout function () {document.write("开始下载")document.write(" ")do…

html网页设计要点,网站交互设计的8个要点

一、力求一致性例如网站首页需要和每一个下级页面保持一致的风格,导航都要放在屏幕的左上角,具有高度一致性的界面能给人清晰整洁的感觉。二、允许频繁使用快捷键快捷键表示产品使用的灵活性和有效性,想想每次我们使用搜索引擎的时候是鼠标点…

搭建nfs共享存储服务之二nfs服务端配置

1.1.NFS服务端配置文件路径为: /etc/exports,并且默认为空,需要用户自行配置。/etc/exports文件配置格式为:NFS共享的目录 NFS客户端地址1(参数1,参数2...)客户端地址2(参数1&#x…

值大于为此列指定的允许精度_电能质量测试精度会受到哪些因素影响?如何解决?...

关于电能质量(也称为PQ:Power Quality)研究的主题已成为多方面的话题。其需要考虑的不仅仅是IEC 61000-x-x电磁兼容性标准中规定的实际电能质量现象。在实践中,通常还会增加其他重要参数来保证供电的安全性,在某些情况下这些参数甚…

前端websocket获取数据后需要存本地吗_是什么让我放弃了restful api?了解清楚后我全面拥抱GraphQL...

GraphQL初步认识背景REST作为一种现代网络应用非常流行的软件架构风格,自从Roy Fielding博士在2000年他的博士论文中提出来到现在已经有了20年的历史。它的简单易用性,可扩展性,伸缩性受到广大Web开发者的喜爱。REST 的 API 配合JSON格式的数…

计算机应用基础案例教程总结,计算机应用基础案例教程

包杰军等编著的《计算机应用基础案例教程》以培养职业能力为目标,本着“做学合一”、“理论与实践并行”、“知识与技能并重”的教育思想编写。本书将实际操作案例与教学内容紧密结合,结构清晰、内容翔实、图文并茂、实用性强。全书共分6章,第…

ios开发之--UIDocumentInteractionController的使用(实现更多分享服务)

最近在做项目的时候,碰到这样一个需求,就是本地生成pdf文件,然后本地打开,经过测试发现,pdf文件是无法保存到相册里面的,只能存到手机里面,鉴于苹果的存储机制,需要取出来&#xff0…

eclipse tomcat新建一个_Javaweb07-Eclipse自动创建动态web项目

学习笔记是参考的how2j使用Eclipse创建Dynamic Web Project前面的web项目都是通过手动创建的,现在使用eclipse EE自动创建动态web项目,熟悉一下创建流程,仍旧使用前面创建过的HelloServlet。需要注意的是,这里的tomcat版本变了&am…

cordova

命令行 npm install -g cordova cordova create MyApp cd MyApp cordova platform add android 当然也可以把android换成browser把自己的前端程序放在www文件夹内这里注意如果用android studio打包或运行的话,(即不用cordova),要把…

excel导出_SpringBoot实现快速导出Excel

阅读本文约需要6分钟 大家好,我是你们的导师,我每天都会在这里给大家分享一些干货内容(当然了,周末也要允许老师休息一下哈)。上次老师跟大家分享了下MyBatis 几种通用的写法的相关知识,今天跟大家分享SpringBoot实现快速导出Exce…