网站首页 > 技术教程 正文
在前端开发中,工程师常常这样调侃“一入前端深似海”。确实,前端的应用面十分广,知识点比较零碎,学习范围也比较大,当然,实现的功能也更加全面。所以对于当下十分火热的AR,运用前端技术也可以轻松的实现。web 平台在AR,SLAM或跟踪的技术应用上将会越来越普及。
今天我们来讲解如何运用JSARToolKit库与WebRTC 的getUserMedia API,开发web 端的AR 应用。
ps:
1.部分整理翻译于:https://www.html5rocks.com/zh/tutorials/webgl/jsartoolkit_webrtc/
2.大家也可以参考下之前的Web AR 开发指南:教程链接
预览效果:
所需识别图:
实现思路:
1.设置JSARToolKit
2.使用getUserMedia访问网络摄像头
3.检测标记
4.矩阵映射
关于JSARToolKit
JSARToolkit是一个从FLARToolkit(Flash)转换的JavaScript库,结合Html5 与 canvas 来实现网页端的AR 效果。
项目地址:https://github.com/kig/JSARToolKit
对于JSARToolKit,比较重要的是navigator.getUserMedia() 方法,它用于访问摄像头,传递一个可以使用html5 <video>标签显示的视频流.但是JSARToolKit需要单个帧来检测标记。所以首先在画布上逐帧绘制视频帧,并使得ToolKitcanvas.changed = true。JSARToolKit通过使用光栅化来查找每个帧并搜索标记然后计算标记位置。得到的矩阵位置然后绘制模型即可(JSARToolKit是对canvas元素进行操作,当你将画布传递给JSARToolKit进行分析时,JSARToolKit将返回在图像中找到的AR标记列表和相应的转换矩阵。要在标记之上绘制一个3D对象,需要将位置信息传递给任何的一个3D引擎即可进行绘制操作)。
我们对JSARToolKit进行设置,第一步是创建canvas对象,摄像机参数对象和检测对象。
varraster=newNyARRgbRaster_Canvas2D(canvas);
//设置摄像机参数
var param=newFLARParam(320,240);
//FLARMultiIdMarkerDetector是用于标记检测的实际引擎
var detector=newFLARMultiIdMarkerDetector(param,120);
//在持续模式下,可以跟踪多个帧的标记。
detector.setContinueMode(true);
param.copyCameraMatrix(display.camera.perspectiveMatrix,10,10000);
使用getUserMedia访问网络摄像头
接下来,创建一个通过WebRTC API获取网络摄像头视频的视频元素。对于预录制的视频,只需将视频的源属性设置为视频URL。
|
检测标记
一旦我们检测器运行ok,我们就可以开始给它进行图像检测AR矩阵。首先将图像绘制到画布上,然后运行检测器。检测器将返回在图像中找到的标记数。
//将准备好的视频绘制到canvas上,缩放到320x240。
canvas.getContext('2d').drawImage(video,0,0,320,240);
//底层canvas已更改。
canvas.changed=true;
varmarkerCount=detector.detectMarkerLite(raster,threshold);
最后一步是迭代检测到的标记并获得它们的转换矩阵。
矩阵映射
将JSARToolKit矩阵复制到glMatrix矩阵.(PS:要将库与另一个库(如Three.js)一起使用,还需要编写一个将ARToolKit矩阵转换为库的矩阵格式的函数。还需要引入FLARParam.copyCameraMatrix方法。copyCameraMatrix方法将FLARParam透视矩阵写入glMatrix样式矩阵。)
如若使用X3DMO也可以这样来操作,大同小异。首先创建X3DOM上下文将一个3DOM标签添加到index.html中,创建一个场景,并添加一个带有id的空的。然后在要显示的模型中添加一个节点。
然后在JSARToolKit初始化中进行一些小的更改以便获得权限。修改X3DOM viewfrustum中指定的剪切平面和当前的透视矩阵。X3DOM运行时API提供代理对象读取和修改运行时参数。运行时连接到每个X3D元素,比如如下的矩阵示例:
然后 处理矩阵:
最后,我们就可以绘制模型了,将其放在矩阵中,并将其设置为MatrixTransform节点的属性值。
然后你就会实现类似这样的效果:
以上两种方法大同小异,大家可以比较着使用,接下来给大家分享一些web AR 的开发资源:
1.JS-ARUCO(ARUCO是基于OpenCV的增强现实应用程序的轻便库,现在已被移植到纯JavaScript):http://code.google.com/p/js-aruco/
2.HTML5-AR:https://github.com/dontcallmedom/html5-augmented-reality
该演示结合了地理位置,摄像机访问,提供一个扩展现实的Web应用程序,覆盖了实时视频流上的几个兴趣点。
3.WebRTC Head Tracking:https://dev.opera.com/articles/head-tracking-with-webrtc/
使用WebRTC,Media Capture和Streams在JavaScript中创建头部跟踪。
4.HTML5 Face Detection:http://wesbos.com/html5-video-face-detection-canvas-javascript/
使用HTML5,Canvas和Javascript在你的脸上放置“Groucho Marx”风格的眼镜,鼻子和胡子。
AR酱原创,转载务必注明
微信号AR酱(ARchan_TT)
AR酱官网:www.arjiang.com
猜你喜欢
- 2024-10-17 Web开发程序应用 web应用开发用什么软件
- 2024-10-17 混合应用开发的又一个选择,支持三大主流Web框架——Onsen UI
- 2024-10-17 Java Web应用开发工程师——学习路线
- 2024-10-17 如何用Web前端技术就能开发出桌面应用程序?
- 2024-10-17 用 Angular 开发 Web 应用(Part 2)
- 2024-10-17 用WEB技术栈开发NATIVE应用:WEEX 前端SDK原理详解
- 2024-10-17 使用 Rust Actix 快速开发高性能的Web应用
- 2024-10-17 酷呆了!Python开发web应用的一些中级技巧
- 2024-10-17 手把手带你使用Flutter开发web应用程序
- 2024-10-17 中文编程也可以开发网站:易语言E2EE互联网服务框架初识
你 发表评论:
欢迎- 05-05从virsh当中学习QEMU/KVM启动命令
- 05-05Win10 BCD文件损坏怎么修复?(bcd文件损坏win7)
- 05-05亚马逊春节假期期间的店铺管理设置
- 05-051分钟总结常用k8s常用诊断教程(k8s常见故障)
- 05-05VisiPics重复图片查找软件中文汉化教程
- 05-05微服务的发布实现方式1灰度实现(微服务实现原理)
- 05-05轻松掌握Java多线程 - 第二章:线程的生命周期
- 05-05德拉诺之王邪DK报告:PVE向小测试及分析
- 最近发表
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)