使用Javascript在纸张上进行标记检测

时间:2016-03-11 09:25:45

标签: javascript canvas detection marker

目前我正在寻找一种简单的方法使用Javascript 检测拍摄的纸张上的标记位置。到目前为止,我发现的所有库都是我的目的。

例如 awe.js 使用AR技术检测实时视频中的标记。但是,我需要的是对图片进行标记检测,如下面的上传示例文件所示。 (请注意,标记只是虚拟标记。我将在每个角落使用单独的标记)

Paper sheet with 4 dummy markers

我试过的图书馆:

有人知道我的问题的简单解决方案吗?

2 个答案:

答案 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
};