使用 Javascript 和 OpenCV.js 进行人脸检测

article/2025/9/30 20:24:46

大家好,我们将研究如何使用常规 Javascript、HTML Canvas 和 OpenCV.js 库从图像中检测人脸。
让我们先看一些例子,然后我们将继续编写代码并解释

如果您需要查看完整的代码库刚刚获得我的 github 存储库 
GitHub - reactcodes/face-detection-javascript-opencv: Multiface detection using Javascript and OpenCVMultiface detection using Javascript and OpenCV. Contribute to reactcodes/face-detection-javascript-opencv development by creating an account on GitHub.https://github.com/reactcodes/face-detection-javascript-opencv

如果您尚未完成 opencv 设置,请访问 https://docs.opencv.org/3.4 .0/d4/da1/tutorial_js_setup.html

现在让我们了解一下代码:
我采用了一个 HTML 模板,其中有我的示例 img 容器,然后我在不同的 div 中有 2 个 html 画布

<div class="container"><div id="background" class="o_image"><img id="sample" src="sample_2.jpg" alt="facedetection" /><span>©reactcodes blog</span></div><div class="p_image"><canvas id="imageInit"></canvas><canvas id="imageResult"></canvas></div>
</div>

现在我添加了一个应用按钮,单击应用按钮我正在使用将我的 img src 加载到画布中
 

const utils = new Utils('errorMessage');
const imageUsed = document.getElementById('sample').getAttribute('src')
const applyButton =document.getElementById('apply')applyButton.setAttribute('disabled','true')
applyButton.onclick = setUpApplyButtonutils.loadOpenCv(() => {    setTimeout(function () {         applyButton.removeAttribute('disabled');    
},500)});const setUpApplyButton = function () {      utils.loadImageToCanvas(imageUsed, 'imageInit')
}

现在我将把剩下的代码添加到setUpApplyButton函数中,到目前为止我所做的是

1. 在 img 标签中显示原始代码
2. 加载应用程序的 opencv 库 onload
3. 单击应用将相同的 img src 加载到具有 id ' imageInit的画布中'

访问 opencv/haarcascade_frontalface_default.xml at master · opencv/opencv · GitHub

以获取面部 xml 文件, 一旦下载到我们拥有的项目文件夹中 ,这将允许我们现在使用 opencv js 检测面部加载该文件
 

let faceCascadeFile = 'haarcascade_frontalface_default.xml';
utils.createFileFromUrl(faceCascadeFile, faceCascadeFile, () => {console.log('cascade ready to load.');}); 
}


所以现在在您的浏览器控制台中,如果它显示“级联就绪”,那么一切正常,我们已经准备好级联

现在我们将简单地从imadeinit画布读取数据,我们之前在该画布上加载了图像,并将为 ReactVector 和 CascadeClassifier 创建实例
 

let src = cv.imread('imageInit');
let gray = new cv.Mat();
cv.cvtColor(src, gray, cv.COLOR_RGBA2GRAY, 0);
let faces = new cv.RectVector();
let faceCascade = new cv.CascadeClassifier();
faceCascade.load(faceCascadeFile);  
// Imp ::: In this line we are loading the xml we downloaded for facedata
let msize = new cv.Size(0, 0);

现在让我们检测图像中可用的人脸
 

faceCascade.detectMultiScale(gray, faces, 1.1, 3, 0, msize, msize);
console.dir(faceCascadeFile)


现在变量 faces 包含所有检测到的 faces 数组,所以我们运行一个循环并标记检测到的区域

console.log(faces)
for (let i = 0; i < faces.size(); ++i) {let roiGray = gray.roi(faces.get(i));let roiSrc = src.roi(faces.get(i));let point1 = new cv.Point(faces.get(i).x, faces.get(i).y);let point2 = new cv.Point(faces.get(i).x + faces.get(i).width,faces.get(i).y + faces.get(i).height);cv.rectangle(src, point1, point2, [255, 0, 0, 255]);roiGray.delete(); roiSrc.delete();
}


现在让我们将最终结果加载到结果画布中,并清除使用的变量
 

cv.imshow('imageResult', src);
src.delete(); gray.delete(); faceCascade.delete();
document.getElementById('imageInit').style.display = "none"


感谢您的宝贵时间,希望对您 有所帮助,请在下方评论分享您的反馈。

 


http://chatgpt.dhexx.cn/article/LNX901RW.shtml

相关文章

图像处理:局部描述子SIFT算法

目录 0、关于SIFT的介绍 1、兴趣点 2、描述子 SIFT算法实现 1.实例化sift 2.利用sift.detectAndCompute()检测关键点并计算 3.将关键点检测结果绘制在图像上 Opencv实现 总结 0、关于SIFT的介绍 SIFT&#xff0c;即尺度不变特征变换&#xff0c;一种局部特征描述子&…

SIFT3D点云关键点提取详细介绍

1.引言 SIFT3D的理论基础完全是从图像特征SIFT2D中迁移类比过来的&#xff0c;类似的还有Harris3D和Harris6D的理论也是来源于Harris2D的&#xff0c;这些点云特征在PCL库中都有具体的实现。Harris3D和Harris6D目前已经有很好的博客和视频讲解了但是SIFT3D却没有一个比较好的介…

java sift 图片相似度,简单快速的图像相似性比较方法

我最近也面临同样的问题,为了解决这个问题(简单快速的算法比较两个图像),我贡献了 img_hash module 要打开“控制”,您可以从 this link . img_哈希模块提供六种图像哈希算法,非常容易使用。 代码示例 起源Lena 模糊莉娜 调整Lena的大小 移动Lena #include #include #include…

图像特征提取(二)——SIFT算法详解

转载自:http://blog.csdn.net/zddblog/article/details/7521424尺度不变特征变换匹配算法详解 Scale Invariant Feature Transform(SIFT)Just For Fun zdd zddmailgmail.com or (zddhubgmail.com) 对于初学者&#xff0c;从David G.Lowe的论文到实现&#xff0c;有许多鸿沟…

Matlab实现sift特征检测+图像拼接

Matlab实现sift特征检测图像拼接共有12个m文件&#xff0c;其中main为主程序&#xff0c;点击运行即可。 一、部分代码示例 close all; clear; clc;im1imread(test3.png); im2imread(test4.png);gray1img2gray(im1); gray2img2gray(im2);[des1,loc1]sift(gray1); [des2,loc2]…

sfm算法之三角化(三角测量)

sfm算法流程一般是特征点提取、特征点匹配、计算本质矩阵/基础矩阵&#xff0c;最后三角化。但是利用机械臂去观察周围&#xff0c;前后帧姿态变化参数是具有的&#xff0c;所以不需要通过基础矩阵获取。 即利用机械臂的信息直接进行深度估计。已知&#xff1a;手眼标定、相机外…

简述人脸识别技术

简介 人脸识别技术是一种生物识别技术&#xff0c;可以用来确认用户身份。人脸识别技术相比于传统的身份识别技术有很大的优势&#xff0c;主要体现在方便性上。传统的身份认证方式诸如&#xff1a;密码、PIN码、射频卡片、口令、指纹等&#xff0c;需要用户记住复杂密码或者携…

Python机器视觉--OpenCV进阶(核心)-边缘检测之SIFT关键点检测

SIFT关键点检测 SIFT&#xff0c;即尺度不变特征变换&#xff08;Scale-invariant feature transform&#xff0c;SIFT&#xff09;&#xff0c;是用于图像处理领域的一种描述。这种描述具有尺度不变性&#xff0c;可在图像中检测出关键点&#xff0c;是一种局部特征描述子。 …

图像特征与描述子(直方图, 聚类, 边缘检测, 兴趣点/关键点, Harris角点, 斑点(Blob), SIFI, 纹理特征)...

1.直方图 用于计算图片特征&#xff0c;表达&#xff0c; 使得数据具有总结性&#xff0c; 颜色直方图对数据空间进行量化&#xff0c;好比10个bin 2. 聚类 类内对象的相关性高 类间对象的相关性差 常用算法&#xff1a;kmeans&#xff0c; EM算法&#xff0c; meanshift&#…

SIFI尺度不变特征变换算法

SIFT 尺度不变特征变换算法 David Lowe关于Sfit算法&#xff0c;2004年发表在Int. Journal of Computer Vision的经典论文中&#xff0c;对尺度空间&#xff08;scal space)是这样定义的 &#xff1a; It has been shown by Koenderink (1984) and Lindeberg (1994) that un…

Opencv图像识别从零到精通(34)---SIFI

一、理论知识 Scale Invariant Feature Transform&#xff0c;尺度不变特征变换匹配算法&#xff0c;对于算法的理论介绍&#xff0c;可以参考这篇文章http://blog.csdn.net/qq_20823641/article/details/51692415&#xff0c;里面很详细&#xff0c;可以更好的学习。这里就不多…

32-SIFI特征点提取(EmguCV学习)

文章目录 RecordCode效果 Record 1、特征点检测与匹配常用的算法&#xff1a;FAST&#xff08;FastFeatureDetector&#xff09;、STAR&#xff08;StarFeatureDetector&#xff09;、SIFT、SURF、ORB、MSER、GFTT&#xff08;GoodFeaturesToTrackDetector&#xff09;、HARRI…

SIFI特征点提取

尺度不变特征变换匹配算法详解 Scale Invariant Feature Transform(SIFT) Just For Fun zdd zddmailgmail.com 对于初学者&#xff0c;从David G.Lowe的论文到实现&#xff0c;有许多鸿沟&#xff0c;本文帮你跨越。 1、SIFT综述 尺度不变特征转换(Scale-invariant feature tr…

图像SIFI笔记

Image/userl representation > down screen tasks 端到端的 文本领域 字典 visual word本质是 local feature handcraft feature 希望这个具有足够的泛华性 generalize 为了有交集 泛化性 clustering 聚类 Quantization 量化 每张图像 有特征点 local feature sift(128d维…

特征点匹配(SIFI)

1.SIFI https://blog.csdn.net/weixin_38404120/article/details/73740612&#xff08;参考了这个作者的内容&#xff09; 结合书上加博客的内容进行理解&#xff1b; 求取SIFI特征的步骤&#xff1a; 首先要对图像归一化&#xff0c;然后将图像扩大为原来的两倍&#xff0…

SIFI和ORB在尺度缩放、旋转、仿射上的特征点不变实验代码,并比较SIFI和ORB提取特征点的速度

SIFI和ORB在尺度缩放、旋转、仿射上的特征点不变 一、SIFI算法1.验证旋转不变性2.验证尺度不变性3.验证仿射不变性 对原图进行仿射变换并输出 二、ORB算法1.验证旋转不变性2.验证尺度不变性3.验证仿射不变性 对原图进行仿射变换并输出 三、比较SIFT和ORB的尺度旋转&#xff0c;…

向量范数简述

向量范数&#xff1a;表征在向量空间中向量的大小 一般表示&#xff1a;,其中X是n维向量&#xff0c;一般如果省略下面的p且无特别说明的话&#xff0c;指的就是2范数&#xff0c;也叫欧几里得范数。对向量来说&#xff0c;就是指向量的模。 常用的向量范数&#xff1a; 0范…

欧几里得范数/欧几里得距离(L2范数)

首先m维空间的概念: Rm的距离结构: 2维平面空间: m维空间: 范形空间距离 n维矢量空间中的元素X的Lp范数: 其中X是一连串的向量 最常用的是L2范数: 本质是一个距离概念 参考:《数学分析》

概念理解_L2范数(欧几里得范数)

L2范数 L2范数、欧几里得范数一些概念。 首先&#xff0c;明确一点&#xff0c;常用到的几个概念&#xff0c;含义相同。 欧几里得范数&#xff08;Euclidean norm&#xff09; 欧式长度 L2 范数 L2距离 Euclidean norm Euclidean length L2 norm L2 distance norm 对于一…

0范数,1范数,欧几里得范数等范数总结

以下分别列举常用的向量范数和矩阵范数的定义。 向量范数 1-范数&#xff1a; 即向量元素绝对值之和&#xff0c;matlab调用函数norm(x, 1) 。 2-范数&#xff1a; Euclid范数&#xff08;欧几里得范数&#xff0c;常用计算向量长度&#xff09;&#xff0c;即向量元素绝对值…