使用 HTML5, javascript, webrtc, websockets, Jetty 和 OpenCV 实现基于 Web 的人脸识别

简介: 这是一篇国外的文章,介绍如何通过 WebRTC、OpenCV 和 WebSocket 技术实现在 Web 浏览器上的人脸识别,架构在 Jetty 之上。实现的效果包括:还能识别眼睛人脸识别的核心代码:页面:?123456789101112131415...

这是一篇国外的文章,介绍如何通过 WebRTC、OpenCV 和 WebSocket 技术实现在 Web 浏览器上的人脸识别,架构在 Jetty 之上。

实现的效果包括:

还能识别眼睛

人脸识别的核心代码:

页面:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<div>
     <video id= "live" width= "320" height= "240" autoplay style= "display: inline;" ></video>
     <canvas width= "320" id= "canvas" height= "240" style= "display: inline;" ></canvas>
</div>
  
  <script type= "text/javascript" >
     var video = $( "#live" ).get()[0];
     var canvas = $( "#canvas" );
     var ctx = canvas.get()[0].getContext( '2d' );
  
     navigator.webkitGetUserMedia( "video" ,
             function (stream) {
                 video.src = webkitURL.createObjectURL(stream);
             },
             function (err) {
                 console.log( "Unable to get video stream!" )
             }
     )
  
     timer = setInterval(
             function () {
                 ctx.drawImage(video, 0, 0, 320, 240);
             }, 250);
</script>

后台:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
public class FaceDetection {
  
     private static final String CASCADE_FILE = "resources/haarcascade_frontalface_alt.xml" ;
  
     private int minsize = 20 ;
     private int group = 0 ;
     private double scale = 1.1 ;
  
     /**
      * Based on FaceDetection example from JavaCV.
      */
     public byte [] convert( byte [] imageData) throws IOException {
         // create image from supplied bytearray
         IplImage originalImage = cvDecodeImage(cvMat( 1 , imageData.length,CV_8UC1, new BytePointer(imageData)));
  
         // Convert to grayscale for recognition
         IplImage grayImage = IplImage.create(originalImage.width(), originalImage.height(), IPL_DEPTH_8U, 1 );
         cvCvtColor(originalImage, grayImage, CV_BGR2GRAY);
  
         // storage is needed to store information during detection
         CvMemStorage storage = CvMemStorage.create();
  
         // Configuration to use in analysis
         CvHaarClassifierCascade cascade = new CvHaarClassifierCascade(cvLoad(CASCADE_FILE));
  
         // We detect the faces.
         CvSeq faces = cvHaarDetectObjects(grayImage, cascade, storage, scale, group, minsize);
  
         // We iterate over the discovered faces and draw yellow rectangles around them.
         for ( int i = 0 ; i < faces.total(); i++) {
             CvRect r = new CvRect(cvGetSeqElem(faces, i));
             cvRectangle(originalImage, cvPoint(r.x(), r.y()),
                     cvPoint(r.x() + r.width(), r.y() + r.height()),
                     CvScalar.YELLOW, 1 , CV_AA, 0 );
         }
  
         // convert the resulting image back to an array
         ByteArrayOutputStream bout = new ByteArrayOutputStream();
         BufferedImage imgb = originalImage.getBufferedImage();
         ImageIO.write(imgb, "png" , bout);
         return bout.toByteArray();
     }
}

详细的实现细节请阅读英文原文:

http://www.smartjava.org/content/face-detection-using-html5-javascript-webrtc-websockets-jetty-and-javacvopencv

相关文章
|
前端开发
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
1391 1
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
|
机器学习/深度学习 人工智能 监控
利用Python和OpenCV实现实时人脸识别系统
【8月更文挑战第31天】本文将引导您了解如何使用Python结合OpenCV库构建一个简易的实时人脸识别系统。通过分步讲解和示例代码,我们将探索如何从摄像头捕获视频流、进行人脸检测以及识别特定个体。本教程旨在为初学者提供一条明晰的学习路径,帮助他们快速入门并实践人脸识别技术。
1221 1
|
机器学习/深度学习 算法 机器人
|
移动开发 网络协议 数据安全/隐私保护
HTML5 WebSockets
HTML5 WebSockets
|
前端开发 JavaScript 安全
|
前端开发 JavaScript 开发者
【Web 前端】彻底告别“this”指向困扰:从零开始掌握 JavaScript 中“this”的奥秘
【8月更文挑战第23天】在 JavaScript 中,`this` 关键字的指向是根据其调用上下文动态确定的,这对于 Web 前端开发者而言是一项核心技能。本文通过多个示例解释了 `this` 的指向规则:在对象方法中指向该对象,在独立函数中指向全局对象或 `undefined`,在事件处理器中指向触发事件的 DOM 元素,在构造函数中指向新创建的对象。此外,还介绍了一些技巧,如使用箭头函数、`bind` 方法以及在事件处理器中显式保存 `this` 的引用,以帮助开发者更好地理解和控制 `this` 的指向。
405 1
|
缓存 JavaScript 前端开发
JavaScript进阶 - Web Workers与Service Worker
【7月更文挑战第4天】JavaScript的Web Workers和Service Worker增强了Web性能。Web Workers处理后台多线程,减轻主线程负担,但通信有开销,受同源策略限制。Service Worker则用于离线缓存和推送通知,需管理其生命周期、更新策略,并确保安全。两者都带来了挑战,但也极大提升了用户体验。通过理解和优化,开发者能构建更高效、安全的Web应用。
480 2
|
Java 开发者 关系型数据库
JSF与AWS的神秘之旅:如何在云端部署JSF应用,让你的Web应用如虎添翼?
【8月更文挑战第31天】在云计算蓬勃发展的今天,AWS已成为企业级应用的首选平台。本文探讨了在AWS上部署JSF(JavaServer Faces)应用的方法,这是一种广泛使用的Java Web框架。通过了解并利用AWS的基础设施与服务,如EC2、RDS 和 S3,开发者能够高效地部署和管理JSF应用。文章还提供了具体的部署步骤示例,并讨论了使用AWS可能遇到的挑战及应对策略,帮助开发者更好地利用AWS的强大功能,提升Web应用开发效率。
313 0
|
JavaScript 前端开发 测试技术
Web中的JavaScript
Web中的JavaScript
228 0
|
缓存 前端开发 JavaScript
JavaScript进阶 - Web Workers与Service Worker
【7月更文挑战第10天】在Web开发中,Web Workers和Service Worker提升性能。Workers运行后台任务,防止界面冻结。Web Workers处理计算密集型任务,Service Worker则缓存资源实现离线支持。常见问题包括通信故障、资源限制、注册错误及缓存更新。通过示例代码展示了两者用法,并强调生命周期管理和错误处理的重要性。善用这些技术,可构建高性能的Web应用。
481 0

热门文章

最新文章