2017-06-22 30 views
0

這是對我之前的問題的擴展,可在Count number of faces using javascript。在這裏,我的要求是一次檢測到有一張臉的圖像,該過程應該停止,但在我的情況下,它是一個永無止境的循環。獲取一張圖像後停止功能

1 is the length

1 face detected

我試了下面的代碼。

tracker.on('track', function(event) { 
       context.clearRect(0, 0, canvas.width, canvas.height); 
       console.log(event.data.length + "\t is the length"); 
       if (event.data.length == 1) { 
        console.log('1 faces detected'); 
        return; 
       } else { 
        console.log('Multiple faces detected'); 
       }  
      }); 

上面的代碼對輸出沒有任何影響(循環永不結束)。

但是相反,我使用瞭如下的break

tracker.on('track', function(event) { 
      context.clearRect(0, 0, canvas.width, canvas.height); 
      console.log(event.data.length + "\t is the length"); 
      if (event.data.length == 1) { 
       console.log('1 face detected'); 
       break; 
      } else { 
       console.log('Multiple faces detected'); 
      } 
     }); 

但上面的代碼給了我一個例外,因爲Uncaught SyntaxError: Illegal break statement,我知道休息是應該爲loopsif僅被使用,認爲在我目前的情況下,它是循環的,我用它。

這是我的代碼。

window.onload = function() { 
      var video = document.getElementById('video'); 
      var canvas = document.getElementById('canvas'); 
      var context = canvas.getContext('2d'); 

      var tracker = new tracking.ObjectTracker('face'); 
      tracker.setInitialScale(4); 
      tracker.setStepSize(2); 
      tracker.setEdgesDensity(0.1); 

      tracking.track('#video', tracker, { 
       camera : true 
      }); 

      tracker.on('track', function(event) { 
       context.clearRect(0, 0, canvas.width, canvas.height); 
       console.log(event.data.length + "\t is the length"); 
       if (event.data.length == 1) { 
        console.log('1 face detected'); 
        tracking.track('#video', tracker).stop(); 
       } else { 
        console.log('Multiple faces detected'); 
       } 

      }); 
     }; 

通過我看到有一個stop()方法的文檔去,我用它,但它仍然不會停止。有人可以讓我知道我哪裏錯了,我怎樣才能停止進一步循環獲得1圖像後。

我使用的是相同的trackingjs.js,我發現該方法可在https://trackingjs.com/docs.html#trackers

感謝

回答

1

你可以從removeListenertracker

window.onload = function() { 
    var video = document.getElementById('video'); 
    var canvas = document.getElementById('canvas'); 
    var context = canvas.getContext('2d'); 

    var tracker = new tracking.ObjectTracker('face'); 
    tracker.setInitialScale(4); 
    tracker.setStepSize(2); 
    tracker.setEdgesDensity(0.1); 

    tracking.track('#video', tracker, { 
     camera : true 
    }); 
    function trackListener(event) { 
     context.clearRect(0, 0, canvas.width, canvas.height); 
     console.log(event.data.length + "\t is the length"); 
     if (event.data.length == 1) { 
      console.log('1 face detected'); 
      tracker.removeListener('track', trackListener); 
     } else { 
      console.log('Multiple faces detected'); 
     } 

    } 
    tracker.on('track', trackListener); 
}; 

,或者使用once方法

tracker.once('track', trackListener); 
0

你需要停止聽第一首曲目單個臉後跟蹤事件。我認爲這可以工作:

if (event.data.length == 1) { 
    console.log('1 face detected'); 
    tracking.stop(); //Not tracker, tracking 
} 

或者這樣:EDITTED

if (event.data.length == 1) { 
    console.log('1 face detected'); 
    tracker.on('track', function(event){}); 
} 
+0

這給誤差作爲'未捕獲的類型錯誤:監聽器必須在'tracker.on一個function'( '軌道',{});'和' Uncaught TypeError:tracker.stop不是函數'當我使用tracker.stop();' – user3872094

+0

我編輯了我的答案 – ardilgulez