手记

JavaScript face++ 人体识别API 与 人体抠像功能(一)

最近在开始接触网上API调用 完成了一个关于face++人体识别API,并通过这个API实现人体抠像功能。

既然要实现人体抠像,我们顺便学习下,JavaScript调用摄像头的方法吧。

有个博客写的很好 大家可以去看这个 我摄像头主要是参考他写的博客。

我这里简单介绍下

首先在html添加标签 <video><audio>这2个标签分别代表视频和音频

1.打开摄像头

有2个版本的方法,区别不是很大。我这里介绍新版本的,如果严谨点,是需要2个版本都要兼容的,但我这里是简单的demo所以简单地调用摄像头即可

新版本位于 navigator.mediaDevices 对象下


         navigator.mediaDevices.getUserMedia({             video: true,             audio: true         }).then(function(stream) {             console.log(stream);             mediaStreamTrack = typeof stream.stop === 'function' ? stream : stream.getTracks()[1];             video.src = (window.URL || window.webkitURL).createObjectURL(stream);             video.play();         }).catch(function(err) {             console.log(err);         })

第一个参数代表着标签是否打开 video是视频,audio是音频,true代表着申请打开。video和audio代表着标签位置

第二个参数是调用成功之后的回调函数

第三个参数是调用失败回调的函数

这是html代码



<!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <title>Title</title>
<script type="text/javascript" src="script/index.js"></script>  </head> <body><canvas width="200" height="150" id = "testImg"></canvas><p>     <button id="snap" >截取图像</button>     <button id="save">保存图片</button>     <button id="close">关闭摄像头</button>     <button id = "cutPhoto" onclick="cutPhoto()">换背景</button> <form enctype="multipart/form-data">     <input type="file" id="upload" onchange="uploadImage()">   <video width="200" height="150"></video></form></p> <canvas id="uploaded" style="margin: 0;padding: 0;" ></canvas> <div id = "background" ><canvas id ="img2" style="margin: 0;padding: 0;"></canvas> </div> <video width="200" height="150"> </video> </body> </html>

 

我们新建一个JavaScript文件保存代码,命名为index.js


window.onload = function () {     function $(elem) {         return document.querySelector(elem);  }     var canvas = $('canvas'),  context = canvas.getContext('2d'),  video = $('video'),  snap = $('#snap'),  close = $('#close'),  upload = $('#upload'),  uploaded = $('#uploaded'),  mediaStreamTrack;  navigator.getMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMeddia || navigator.msGetUserMedia; // 获取媒体方法(新方法) // 使用新方法打开摄像头  if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {         navigator.mediaDevices.getUserMedia({             video: true,   }).then(function(stream) {             console.log(stream);  mediaStreamTrack = typeof stream.stop === 'function' ? stream : stream.getTracks()[0];  video.src = (window.URL || window.webkitURL).createObjectURL(stream);  video.play();  }).catch(function(err) {             console.log(err);  })     } // 使用旧方法打开摄像头  else if (navigator.getMedia) {         navigator.getMedia({             video: true  }, function(stream) {             mediaStreamTrack = stream.getTracks()[0];   video.src = (window.URL || window.webkitURL).createObjectURL(stream);  video.play();  }, function(err) {             console.log(err);  });  } // 截取图像  snap.addEventListener('click', function() {         alert("dd");  context.drawImage(video, 0, 0, 200, 150);  }, false);  // 关闭摄像头  close.addEventListener('click', function() {         mediaStreamTrack && mediaStreamTrack.stop();  }, false);  };

这个index.js主要是完成视频截图和保存的功能

调用face++的功能我们下一章讲解

原文出处

0人推荐
随时随地看视频
慕课网APP