2017-10-22 2 views
1

Ich verwende Affektiva Emotion SDK für Javascript zum Abspielen und Analysieren einer Videodatei. Momentan spiele ich das Video als Stream und nehme die Emotionsfunktionen nach ihrem "Analyze a video frame stream" Tutorial auf. Ich möchte jedoch die Videodatei im Stapel verarbeiten, anstatt die gesamte Dauer des Videos zu analysieren.So verarbeiten Sie Videodateien im Stapel mit Emotion SDK für Javascript

Durch die Erhöhung der Wiedergaberate des Videos konnten diese Prozesse beschleunigt werden. Ich habe auch versucht, Frames zu überspringen, indem ich im Video nach vorne suche, aber die Leistung war enttäuschend. Kennt jemand eine Möglichkeit, die Videodatei zu verarbeiten, die nicht durch die Wiedergaberate des Videos behindert wird?

+1

Apologies für die verzögerte Antwort. Hast du das herausgefunden? Sie können sich auf die Youtube-Demo beziehen, die sicherlich damit zu tun hat, was Sie erreichen möchten: https://github.com/Affectiva/youtube-demo –

+0

Vielen Dank für die Referenz Umang. Ich habe es herausgefunden, aber ich werde diese Implementierung für irgendwelche Einsichten ansehen! – kkawabat

+0

@kkawabat, könnten Sie bitte Ihre Lösung beschreiben oder einen Beispielcode posten? Der Link oben hilft nicht viel, da die Demo ein YouTube-Video abspielt, aber die Webcam analysiert. Ich habe Probleme, FrameDetector in einem Browser zu verwenden, daher wäre eine alternative Lösung eine große Hilfe. https://stackoverflow.com/questions/47646782/debugging-affectiva-framedetector-worker-code-reported-an-exception – carpiediem

Antwort

0

Ich konnte dieses Problem lösen (wenn auch wahrscheinlich nicht sehr effizient), indem ich mit niedrigeren fps suche. Im Wesentlichen rufe ich in der Funktion "onImageResultsSuccess" des Detektors die Funktion nextFrame auf, die im Video um einen Betrag vorspringt, den ich mit der Variable fps eingestellt habe. Dies ruft das "seeked" -Ereignis auf dem Videoelement auf, das dann die captureImage-Funktion aufrufen kann, die den Detektor auslöst und eine Schleife erzeugt, die läuft, bis das gesamte Video analysiert ist. Unten finden Sie einen Teil des Codes sowie die Implementierung von jsfiddle.

var nextFrame = function() { 
    // when frame is captured, increase 
    vidTimeStamp = vidTimeStamp + (1/fps); 
    // if we are not passed end, seek to next interval 
    if (vidTimeStamp <= video.duration) { 
     // this will trigger another seeked event 
     message_text.innerHTML = ((vidTimeStamp/video.duration) * 100).toFixed(2) + "% completed"; 
     video.currentTime = vidTimeStamp; 
    } else { 
     // DONE!, next action 
     message_text.innerHTML = "100% Completed"; 
     alert("Video Processed"); 

     download_btn.click(); 
    } 
    }; 

    video.addEventListener("seeked", function(e) { 
    // now video has seeked and current frames will show 
    // at the time as we expect 
    captureImage(vidTimeStamp); 
    }); 

https://jsfiddle.net/kkawabat/zvt9rbve/

Verwandte Themen