【问题标题】:Hand detection and tracking methods手部检测和跟踪方法
【发布时间】:2017-08-08 17:35:54
【问题描述】:

所以,伙计们,请帮我检测/跟踪坐在计算机(笔记本电脑)前置摄像头前的用户的手。 我试过这些方法:

  • 基于颜色的检测(我已经通过opencv haar级联人脸检测检测到人脸并提取了皮肤HSV范围。接下来我找到了具有肤色的对象。例如,人脸我可以通过haar cascade知道人脸检测来去除,但是如果我只需要手,那么其他人体部位和有肤色的背景对象呢?如何使这个算法对照明更稳定?)
  • 训练自己的 haar 级联分类器(我已经训练了自己的级联来使用 3.5k 正片和 4k 负片检测手部。训练了 3 天。数据集非常丰富(各种手部配置和方向) , 光照条件, 不同的背景)。它的效果还不错,但速度很慢,因为我设置了scaleFactor=1.3minNeighbors=70。如果我减少minNeighbors,误报将大大增加,小反应角将覆盖整个视频帧。 训练参数: opencv_traincascade -data data -vec samples.vec -bg neg.txt -numStages 16 -minhitrate 0.999 -maxFalseAlarmRate 0.5 -numPos 3200 -numNeg 3900 -w 24 -h 24 -mode ALL -precalcValBufSize 1024`` -precalcIdxBufSize 1024
  • 训练 LBP 级联分类器(训练比 haar 级联更快,检测更接近实时,但这种检测方法有很多错误)训练参数:opencv_traincascade -data lbp -vec samples.vec -bg neg.txt -numStages 25 -minHitRate 0.999 -maxFalseAlarmRate 0.5 -numPos 3200 -numNeg 3900 -w 24 -h 24 -mode ALL -precalcValBufSize 4096 -precalcIdxBufSize 4096 -featureType LBP 我试过了numStages 的不同值从 16 到 25。

  • Camshift算法跟踪手源代码在这里http://pastebin.com/q5zK8cZt。这个怎么运作?只需要在检测到的对象周围标记 4 个点,该算法必须跟踪它并在周围绘制矩形。问题是如果我开始移动我的手,这个矩形就会开始增长并覆盖整个视频帧。看起来这个算法只适用于小物体(或者物体距离相机很远)

也许我需要混合使用这些方法,或者您会建议其他方法?也许我需要训练神经网络,例如 YOLO?我不希望这样做,因为它需要很长时间并且必须租用基于 GPU 的服务器。

【问题讨论】:

标签: opencv tracking detection object-detection haar-classifier


【解决方案1】:

GPU 服务器?不,你没有:有一个web based backend 用于对象识别。如果你想使用 Yolo,你需要标记一个巨大的图像训练集(每班大约 2000 个)。我可以建议使用这样的脚本从here 获取图像

(function(global) {
  const next = () => Array.from(document.querySelectorAll('.search-pagination__button-text'))[1].click();
  const uuid = () => Math.random().toString(36).substring(7);
  const sleep = (timeout = 5000) => new Promise((res) => setTimeout(() => res(), timeout));
  global.urls = [];
  global.next = () => next();
  global.start = async () => {
    for (let i = 0; i !== 81; i++) {
        window.scrollTo(0,document.body.scrollHeight);
        await sleep(5000);
        document.querySelectorAll('.search-content__gallery-results figure > img[src]').forEach(({src}) => global.urls.push(src));
        next();
        await sleep(5000);
    }
  };
})(window);

之后,您需要在图像中标记对象的边界框。有一个online tool,可以直接在您的网络浏览器中使用

对于训练神经网络,请按照此说明进行,二进制文件也可以从here获取。

【讨论】:

    猜你喜欢
    • 2020-06-03
    • 2013-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多