# HG changeset patch # User Sebastien Jodogne # Date 1660333777 -7200 # Node ID 060d61913e39eb2de041f4519d879a880c6da995 # Parent 6ffd65cfd2ee8e45ffc9c267dfc0a22c3c87e50c deep learning in steps diff -r 6ffd65cfd2ee -r 060d61913e39 Applications/StoneWebViewer/WebApplication/app.js --- a/Applications/StoneWebViewer/WebApplication/app.js Fri Aug 12 15:48:35 2022 +0200 +++ b/Applications/StoneWebViewer/WebApplication/app.js Fri Aug 12 21:49:37 2022 +0200 @@ -1372,6 +1372,11 @@ stone.LoadDeepLearningModel('model.message'); }); -window.addEventListener('DeepLearningReady', function() { +window.addEventListener('DeepLearningModelReady', function() { app.deepLearningReady = true; + app.deepLearningProgress = 0; }); + +window.addEventListener('DeepLearningStep', function(args) { + app.deepLearningProgress = args.detail.progress; +}); diff -r 6ffd65cfd2ee -r 060d61913e39 Applications/StoneWebViewer/WebAssembly/StoneWebViewer.cpp --- a/Applications/StoneWebViewer/WebAssembly/StoneWebViewer.cpp Fri Aug 12 15:48:35 2022 +0200 +++ b/Applications/StoneWebViewer/WebAssembly/StoneWebViewer.cpp Fri Aug 12 21:49:37 2022 +0200 @@ -3668,6 +3668,8 @@ #include #include "deep-learning/WebAssembly/Worker.pb.h" +static void SendRequestToWebWorker(const OrthancStone::Messages::Request& request); + static void DeepLearningCallback(char* data, int size, void* payload) @@ -3683,8 +3685,44 @@ case OrthancStone::Messages::ResponseType::PARSED_MODEL: LOG(WARNING) << "Number of steps in the model: " << response.parse_model().number_of_steps(); - DISPATCH_JAVASCRIPT_EVENT("DeepLearningReady"); + DISPATCH_JAVASCRIPT_EVENT("DeepLearningModelReady"); + break; + + case OrthancStone::Messages::ResponseType::LOADED_IMAGE: + { + OrthancStone::Messages::Request request; + request.set_type(OrthancStone::Messages::RequestType::EXECUTE_STEP); + SendRequestToWebWorker(request); break; + } + + case OrthancStone::Messages::ResponseType::STEP_DONE: + { + EM_ASM({ + const customEvent = document.createEvent("CustomEvent"); + customEvent.initCustomEvent("DeepLearningStep", false, false, + { "progress" : $0 }); + window.dispatchEvent(customEvent); + }, + response.step().progress() + ); + + if (response.step().done()) + { + LOG(WARNING) << "SUCCESS! Mask: " << response.step().output().width() << "x" + << response.step().output().height() << " for frame " + << response.step().output().sop_instance_uid() << " / " + << response.step().output().frame_number(); + } + else + { + OrthancStone::Messages::Request request; + request.set_type(OrthancStone::Messages::RequestType::EXECUTE_STEP); + SendRequestToWebWorker(request); + } + + break; + } default: LOG(ERROR) << "Unsupported response type from the deep learning worker";