目前我正在寻找一种简单的方法使用Javascript 检测拍摄的纸张上的标记位置。到目前为止,我发现的所有库都是我的目的。
例如 awe.js 使用AR技术检测实时视频中的标记。但是,我需要的是对图片进行标记检测,如下面的上传示例文件所示。 (请注意,标记只是虚拟标记。我将在每个角落使用单独的标记)
Paper sheet with 4 dummy markers
我试过的图书馆:
有人知道我的问题的简单解决方案吗?
答案 0 :(得分:3)
感谢所有试图为我的问题找到解决方案的人。毕竟,我设法用js-aruco检测纸张的标记:
https://github.com/jcmellado/js-aruco/tree/master/samples/getusermedia
js-aruco制作实时视频的快照,在画布中渲染每个快照并检测标记。 我调整了“getusermedia.html”,以便它不从视频中获取快照,但在画布中只渲染一次图像。检测器能够找到此页面上列出的每个标记:
http://diogok.net/js-aruco-markers/index.html
最后,我不得不重写aruco.js中的函数,以便找到小于纸张20%的标记(这是默认值)。
AR.Detector.prototype.detect = function(image) {
CV.grayscale(image, this.grey);
CV.adaptiveThreshold(this.grey, this.thres, 2, 3);
this.contours = CV.findContours(this.thres, this.binary);
this.candidates = this.findCandidates(this.contours, image.width * 0.01, 0.05, 10);
this.candidates = this.clockwiseCorners(this.candidates);
this.candidates = this.notTooNear(this.candidates, 10);
return this.findMarkers(this.grey, this.candidates, 49);
};
这样,js-aruco能够在纸张的边角找到小标记。
答案 1 :(得分:1)
如果图像中有自定义标记,或者必须在服务器端执行标记检测,则可以使用js-aruco2库。 在这里,您不必强制使用ArUco标记(由于最小汉明距离为1,所以可靠性不高),但是可以使用更高级的ARUCO_MIP_36h12(也由ArUco小组在其C ++库中提供,汉明距离为12),或者您可以通过以下方式创建自己的标记列表:
AR.DICTIONARIES.MyDictionary = {
nBits: 25, //bit dimension of the markers in your dictionary
tau: 1, //optional hamming distance of the codes in your dictionary
codeList: ['0x1084210UL', '0x1084217UL', ...] //hexadecimal representation of every marker in your dictionary, where the array order represent the marker id
};