博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
前端简单面部识别
阅读量:7109 次
发布时间:2019-06-28

本文共 2203 字,大约阅读时间需要 7 分钟。

前言

过年了,来点有趣的东西

最近一直在尝试通过web如何DIY视频,怎么捕捉视频的行为,给视频加点好玩的东西,比如给视频加一个胡子?

以下记录一下最近的玩具


live demo

(需要允许摄像头呀!!最近关服务了,看不到效果了~)

效果

效果大概如下: 就是给视频的脸上加个胡子(我手机上有防蓝光的膜,各位大爷将就着看吧)

思路

首先我做的视频动态绘制胡子的东西,那肯定要先支持视频吧

支持视频

这里代码就非常简单,新建一个html,写上一个video标签

navigator.getUserMedia =	navigator.getUserMedia ||	navigator.webkitGetUserMedia ||	navigator.mozGetUserMediaif (navigator.getUserMedia) {	navigator.getUserMedia(		{ video: { width: 500, height: 500 } },		function (stream) {			var video = document.querySelector('video')			video.srcObject = stream			video.onloadedmetadata = function (e) {				video.play()			}		},		function (err) {			console.log('The following error occurred: ' + err.name)		}	)} else {	console.log('getUserMedia not supported')}复制代码

写到这里视频就可以播放了

然后我们把这个视频放进canvas里,

其实就是定时采集video的内容,然后drawImagecanvas就好了

setInterval(() => {      v.drawImage(video, 0, 0, 500, 375)	  vData = v.getImageData(0, 0, 500, 375)        }, 20) 复制代码

这里开始canvas里面的内容也就开始动起来了

下面就是必要重要的内容了

面部识别

我要做的是面部识别,所有怎么识别呢

  1. 让我自己现场实现一个(不存在的,虽然在学机器学习,但是才学了几天,还远远远远不够)
  2. 找开源(bingo,就是你了)

开源面部识别 trackingjs

然后就是找到了一个这个

看了一下效果,非常好,虽然有点慢,但是满足我们的功能

好,那么先在本地跑个demo试试

......然后5min过去了

且慢,好像这个识别不能识别camera的内容(camera只支持到face,不支持moutheyenose级别)

mdzz

ps: 如果只是简单加个帽子之类的东西的话,用这个库也就够了

下面几天我基本上就卡在这个环节几天都没有什么好的思路

直到某天,我随便刷的时候看到了这个实现

咦,她也实现了面部识别,好像这个人再trackingjscontributor里面见过,然后她用到了opencv,记得在今年d2的大会上主会场某几个嘉宾也分享了ar主题的东西,也是用服务器来实现的(就是canvasgetImageData后把数据传给后端,后端处理完再把结果返回),当时我以为效率会很差(在图片传输方面),其实看下来好像效果还可以

好,接下里就配上后端来写,似乎功能会多很多。那么接下来就像武器大师说的:开打开打

node 识别 opencv

那么就看opencvnode有什么好的实现了

then,,这个可以识别到face级别,好像不太够

再找

yooyoo,眼睛鼻子都识别出来了,很屌嘛,就你了

那就直接搭node服务跑起来呗

然后简单花了10分钟搭了个koa2的服务

整体思路就是:

  1. 前端开启video
  2. video => canvas => base64 => ArrayBuffer(这个库只能识别图片对象或者ArrayBuffer)
  3. websocket前后端通讯
  4. 后端处理图片,返回face、mouth在图片上的位置数据
  5. 前端渲染嘴巴位置
  6. 加上胡子

done

下面是 后端处理图片的时间,平均大概5ms,当做玩具的话,勉强够start: 4.568msstart: 3.881msstart: 3.564msstart: 3.690msstart: 5.971msstart: 4.069msstart: 3.364msstart: 5.054msstart: 22.219msstart: 5.586msstart: 5.000ms复制代码

本地测试一切正常,但是部署到服务器上的时候,还是有一些问题

  1. 服务器安装opencv的时候有深坑
  2. video,只能在https下用
  3. https 下的websocket 得升级到 wss
  4. 静态资源访问又遇到问题,妈的

这里既然是前端文章,那么我就不张开来讲部署的问题了,

差不多就是这样思路


最后

可能是今年最后一篇,写的可能比较随意,不知道上下文连不连贯(看官们,抱歉)

然后最后的结果就如文章最开始所见:

(需要允许摄像头呀!!)

详细代码的话:

前后端都在这里了:

参考链接/推荐阅读

转载地址:http://xxvhl.baihongyu.com/

你可能感兴趣的文章
JAVA的StringBuffer类
查看>>
搜索账号建设内网wiki
查看>>
Java3D实例应用-载入VRML模型
查看>>
XtremSF和XtremSW简介
查看>>
JAVA泛型(代码级解释)
查看>>
使用jQuery Mobile和Phone Gap开发Android应用程序
查看>>
Socket编程 (异步通讯,解决Udp丢包) - Part4
查看>>
ML EX3
查看>>
CR中数据带单位显示及注意事项
查看>>
分页标签测试pager-taglib
查看>>
nullnull计算两个字符串链表中的共同数据项,需要考虑重复选项的情况
查看>>
C#使用Dotfuscator混淆代码以及加密
查看>>
java环境变量配置
查看>>
【Android】CM在repo中使用local manifest
查看>>
【Android】编译CM10.1遇到的错误解决方案
查看>>
Load testing with Visual Studio Ultimate
查看>>
SELECT INTO 与 INSERT INTO SELECT 复制表的两种sql语句
查看>>
php+sqlite cms
查看>>
ASP.NET C#使用JavaScriptSerializer实现序列化与反序列化得到JSON
查看>>
HDTunePro汉化版温度显示不正常后需要更改
查看>>