tim*_*mKa 5 opencv tracking object-detection detection haar-classifier
所以,伙计们,请帮助我为坐在电脑(笔记本电脑)前置摄像头前的电脑前的用户检测/跟踪手部。我试过这些方法:
scaleFactor=1.3和 ,所以它非常慢minNeighbors=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 的服务器。
GPU 服务器?不,您不需要:有一个基于网络的对象识别后端。如果你想使用 Yolo,你将需要标记一个巨大的图像训练集(每类大约 2000 个)。我可以建议使用这样的脚本从这里获取图像
(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);
Run Code Online (Sandbox Code Playgroud)
之后,您需要标记图像中对象的边界框。有一个在线工具,可以在您的网络浏览器中正常工作
要训练神经网络,请遵循此说明,也可以从此处获取二进制文件。