opencv.js人脸识别简单使用

前端使用opencv

最近了解了下opencv,看了下官方的实例和文档 opencvjs文档入口 3.3.1版本 看了官方示例的网页结构 基本上所有的实例都用到了两个js 核心js:opencv.js 工具js:utils.js 官方给出的方案是

Installing Emscripten Emscripten is an LLVM-to-JavaScript compiler. We will use Emscripten to build OpenCV.js. 安装Emscripten Emscripten是LLVM到JavaScript的编译器。我们将使用Emscripten构建OpenCV.js。

但是它官方示例中肯定要用到js对吧 我看了很多csdn文件分享都需要c币或者积分 而且自己编译的也容易出问题 官方给出的能运行示例 那么为啥不拿来用呢 同时还有官方训练的人脸识别xml文件一样可以爬取 那就去网页爬取 老方法 右键检查元素 在这里插入图片描述 在这里插入图片描述

下载这三个文件放到项目目录下

分析网页结构 在这里插入图片描述 将关键代码复制下来后放到自己的文件内

代码来自爬取官方

1 2<!DOCTYPE html> 3<html> 4<head> 5<meta charset="utf-8"> 6<title>Face Detection Camera Example</title> 7<link href="https://docs.opencv.org/3.3.1/js_example_style.css" rel="stylesheet" type="text/css" /> 8</head> 9<body> 10<!-- <h2>Face Detection Camera Example</h2> --> 11<div> 12<div class="control"><button id="startAndStop">Start</button></div> 13<textarea class="code" rows="29" cols="80" id="codeEditor" spellcheck="false"> 14 15</textarea> 16</div> 17<p class="err" id="errorMessage"></p> 18<div> 19 <table cellpadding="0" cellspacing="0" width="0" border="0"> 20 <tr> 21 <td> 22 <video id="videoInput" width=320 height=240></video> 23 </td> 24 <td> 25 <canvas id="canvasOutput" width=320 height=240></canvas> 26 </td> 27 <td></td> 28 <td></td> 29 </tr> 30 <tr> 31 <td> 32 <div class="caption">videoInput</div> 33 </td> 34 <td> 35 <div class="caption">canvasOutput</div> 36 </td> 37 <td></td> 38 <td></td> 39 </tr> 40 </table> 41</div> 42<script type="text/javascript" src="js/opencv.js"></script> 43<!-- <script src="js/adapter-5.0.4.js" type="text/javascript"></script> --> 44<script src="js/utils.js" type="text/javascript"></script> 45<script id="codeSnippet" type="text/code-snippet"> 46let video = document.getElementById('videoInput'); 47let src = new cv.Mat(video.height, video.width, cv.CV_8UC4); 48let dst = new cv.Mat(video.height, video.width, cv.CV_8UC4); 49let gray = new cv.Mat(); 50let cap = new cv.VideoCapture(video); 51let faces = new cv.RectVector(); 52let classifier = new cv.CascadeClassifier(); 53 54// load pre-trained classifiers 55classifier.load('haarcascade_frontalface_default.xml'); 56 57const FPS = 30; 58function processVideo() { 59 try { 60 if (!streaming) { 61 // clean and stop. 62 src.delete(); 63 dst.delete(); 64 gray.delete(); 65 faces.delete(); 66 classifier.delete(); 67 return; 68 } 69 let begin = Date.now(); 70 // start processing. 71 cap.read(src); 72 src.copyTo(dst); 73 cv.cvtColor(dst, gray, cv.COLOR_RGBA2GRAY, 0); 74 // detect faces. 75 classifier.detectMultiScale(gray, faces, 1.1, 3, 0); 76 // draw faces. 77 for (let i = 0; i < faces.size(); ++i) { 78 let face = faces.get(i); 79 let point1 = new cv.Point(face.x, face.y); 80 let point2 = new cv.Point(face.x + face.width, face.y + face.height); 81 cv.rectangle(dst, point1, point2, [255, 0, 0, 255]); 82 } 83 cv.imshow('canvasOutput', dst); 84 // schedule the next one. 85 let delay = 1000/FPS - (Date.now() - begin); 86 setTimeout(processVideo, delay); 87 } catch (err) { 88 utils.printError(err); 89 } 90}; 91 92// schedule the first one. 93setTimeout(processVideo, 0); 94</script> 95<script type="text/javascript"> 96 97 let utils = new Utils('errorMessage'); 98 99 utils.loadCode('codeSnippet', 'codeEditor'); 100 101 let streaming = false; 102 let videoInput = document.getElementById('videoInput'); 103 let startAndStop = document.getElementById('startAndStop'); 104 let canvasOutput = document.getElementById('canvasOutput'); 105 let canvasContext = canvasOutput.getContext('2d'); 106 107 startAndStop.addEventListener('click', () => { 108 if (!streaming) { 109 utils.clearError(); 110 utils.startCamera('qvga', onVideoStarted, 'videoInput'); 111 } else { 112 utils.stopCamera(); 113 onVideoStopped(); 114 } 115 }); 116 117 function onVideoStarted() { 118 streaming = true; 119 startAndStop.innerText = 'Stop'; 120 videoInput.width = videoInput.videoWidth; 121 videoInput.height = videoInput.videoHeight; 122 utils.executeCode('codeEditor'); 123 } 124 125 function onVideoStopped() { 126 streaming = false; 127 canvasContext.clearRect(0, 0, canvasOutput.width, canvasOutput.height); 128 startAndStop.innerText = 'Start'; 129 } 130 131 utils.loadOpenCv(() => { 132 let faceCascadeFile = 'haarcascade_frontalface_default.xml'; 133 utils.createFileFromUrl(faceCascadeFile, faceCascadeFile, () => { 134 // startAndStop.removeAttribute('disabled'); 135 }); 136 }); 137 138 139</script> 140</body> 141</html> 142

效果

在这里插入图片描述 在这里插入图片描述提示 这个页面的好处有很多,可以将自己的js写入来测试自己的功能,稍微修改代码即可跑通官方给出的所有示例。

<br><br><br><br>

  大家好,我是代码哈士奇,是一名软件学院网络工程的学生,因为我是“狗”,狗走千里吃肉。想把大学期间学的东西和大家分享,和大家一起进步。但由于水平有限,博客中难免会有一些错误出现,有纰漏之处恳请各位大佬不吝赐教!

未经本人允许,禁止转载

在这里插入图片描述

<br>

后续会推出

前端:vue入门 vue开发小程序 等 后端: java入门 springboot入门等 服务器:mysql入门 服务器简单指令 云服务器运行项目 一些插件的使用等

大学之道亦在自身,努力学习,热血青春 如果对编程感兴趣可以加入我们的qq群一起交流:974178910

有问题可以下方留言,看到了会回复哦

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )