comparison Applications/StoneWebViewer/WebAssembly/StoneWebViewer.cpp @ 1951:060d61913e39 deep-learning

deep learning in steps
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 12 Aug 2022 21:49:37 +0200
parents 6ffd65cfd2ee
children a1e0aae9c17f
comparison
equal deleted inserted replaced
1950:6ffd65cfd2ee 1951:060d61913e39
3666 3666
3667 3667
3668 #include <emscripten/fetch.h> 3668 #include <emscripten/fetch.h>
3669 #include "deep-learning/WebAssembly/Worker.pb.h" 3669 #include "deep-learning/WebAssembly/Worker.pb.h"
3670 3670
3671 static void SendRequestToWebWorker(const OrthancStone::Messages::Request& request);
3672
3671 static void DeepLearningCallback(char* data, 3673 static void DeepLearningCallback(char* data,
3672 int size, 3674 int size,
3673 void* payload) 3675 void* payload)
3674 { 3676 {
3675 OrthancStone::Messages::Response response; 3677 OrthancStone::Messages::Response response;
3681 DISPATCH_JAVASCRIPT_EVENT("DeepLearningInitialized"); 3683 DISPATCH_JAVASCRIPT_EVENT("DeepLearningInitialized");
3682 break; 3684 break;
3683 3685
3684 case OrthancStone::Messages::ResponseType::PARSED_MODEL: 3686 case OrthancStone::Messages::ResponseType::PARSED_MODEL:
3685 LOG(WARNING) << "Number of steps in the model: " << response.parse_model().number_of_steps(); 3687 LOG(WARNING) << "Number of steps in the model: " << response.parse_model().number_of_steps();
3686 DISPATCH_JAVASCRIPT_EVENT("DeepLearningReady"); 3688 DISPATCH_JAVASCRIPT_EVENT("DeepLearningModelReady");
3687 break; 3689 break;
3690
3691 case OrthancStone::Messages::ResponseType::LOADED_IMAGE:
3692 {
3693 OrthancStone::Messages::Request request;
3694 request.set_type(OrthancStone::Messages::RequestType::EXECUTE_STEP);
3695 SendRequestToWebWorker(request);
3696 break;
3697 }
3698
3699 case OrthancStone::Messages::ResponseType::STEP_DONE:
3700 {
3701 EM_ASM({
3702 const customEvent = document.createEvent("CustomEvent");
3703 customEvent.initCustomEvent("DeepLearningStep", false, false,
3704 { "progress" : $0 });
3705 window.dispatchEvent(customEvent);
3706 },
3707 response.step().progress()
3708 );
3709
3710 if (response.step().done())
3711 {
3712 LOG(WARNING) << "SUCCESS! Mask: " << response.step().output().width() << "x"
3713 << response.step().output().height() << " for frame "
3714 << response.step().output().sop_instance_uid() << " / "
3715 << response.step().output().frame_number();
3716 }
3717 else
3718 {
3719 OrthancStone::Messages::Request request;
3720 request.set_type(OrthancStone::Messages::RequestType::EXECUTE_STEP);
3721 SendRequestToWebWorker(request);
3722 }
3723
3724 break;
3725 }
3688 3726
3689 default: 3727 default:
3690 LOG(ERROR) << "Unsupported response type from the deep learning worker"; 3728 LOG(ERROR) << "Unsupported response type from the deep learning worker";
3691 } 3729 }
3692 } 3730 }