2016-08-14 5 views
1

Affectiva(http://developer.affectiva.com/v3_1/javascript/analyze-frames/)の新しいJS SDKの使用、特にフレーム検出モードでの使用に問題があります。私は&のCameraFeedバージョンを稼働させるのに問題はなく、JSFiddle()の素晴らしい例もあります。しかしフレーム検出モードでは、Webワーカーから何百もの「ランタイムエラー」が発生します。Affectiva JS SDK(フレーム検出モード)を使用したエラー

<body class='session'> 
    <div class='col-md-8' id='affdex_elements' style='width:680px;height:480px;'> 
    <video autoplay id='video'></video> 
    <canvas id='canvas'></canvas> 
    </div> 
    <div id='results' style='word-wrap:break-word;'></div> 
    <div id='logs'></div> 

    <script src="https://download.affectiva.com/js/3.1/affdex.js"></script> 
    <script> 
    var width = 640; 
    var height = 480; 

    var faceMode = affdex.FaceDetectorMode.LARGE_FACES; 
    var detector = new affdex.FrameDetector(faceMode); 

    detector.addEventListener("onInitializeSuccess", function() { 
    console.log('Detector reports initialized.'); 

    // Start with first capture... 
    captureImage(); 
    }); 

    detector.addEventListener("onImageResultsSuccess", function (faces, image, timestamp) { 
    console.log(faces); 
    captureImage(); 
    }); 

    detector.addEventListener("onImageResultsFailure", function (image, timestamp, err_detail) { 
    console.log(err_detail); 
    captureImage(); 
    }); 

    detector.detectAllExpressions(); 
    detector.detectAllEmotions(); 
    detector.detectAllEmojis(); 
    detector.detectAllAppearance(); 

    detector.start(); 

    var v = document.getElementById('video'); 
    var c = document.getElementById('canvas'); 
    var t = c.getContext('2d'); 
    c.width = width; 
    c.height = height; 

    navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || 
    navigator.mozGetUserMedia || navigator.msGetUserMedia || navigator.oGetUserMedia; 

    if (navigator.getUserMedia) {  
     navigator.getUserMedia({video: true}, handleVideo, videoError); 
    } 
    function handleVideo(stream) { v.src = window.URL.createObjectURL(stream); } 
    function videoError(e) { console.log(e); } 

    function captureImage() { 
    console.log('Capturing...'); 
    t.clearRect(0, 0, c.width, c.height); 
    t.drawImage(v, 0, 0, width, height); 
    var imgData = t.getImageData(0, 0, c.width, c.height); 
    var currentTimeStamp = (new Date()).getTime()/1000; 
    detector.process(imgData, currentTimeStamp); 
    } 
</script> 

わかりやすい作業例になるために、何かを削除しました。繰り返しますが、私はこの問題のCameraFeedバージョンを実行しても問題ありません。これは動作していないものです。私は何か愚かな行方不明ですか?ドキュメントは少し明るいです...

答えて

4

内部的には、タイムスタンプは格納用の整数に変換されます。私はuが整数オーバーフローに陥っている可能性があると思います。 最初のタイムスタンプをキャッシュし、それを後続のタイムスタンプから減算して、process()に渡された最初のタイムスタンプが0で、後続の値が大きくなるようにすることはできますか?

+0

良い考え。それは彼らがコードでそれをする方法です、私はオーバーフローの問題ではなく内部の一貫性のためだと思いました。私はそれを試み、報告するでしょう。 – Nuby

+0

私はそれが働いたとは信じられない!あなたはその問題をどのくらい私が追跡しようとしているのか分かりません...私はあなたなしでそれを理解したことはないでしょう。ありがとう! – Nuby

関連する問題