Experiments

Below you can find the summary of all experiments we've conducted with the outcomes and successes of each one summarised. Additionally, in the sidebar menu you can find the links to pages where we provide additional commentary or videos for the most interesting experiments.

Experiment # Title Details Results Conclusion Done By Date
1 HoloLens Model Rotation Allows user to inspect the model from different angles by rotating the model Feature performed well when having the model yaw, although pitch and roll felt unintuitive and easy to get wrong It was decided to keep this feature in the final prototype, but only the yaw motion as the others were not nice to use and overcomplicated it Fraser Savage 11/11 - 13/11
2 HoloLens Model Viewer #1 Details can be found below. Timur Kuzhagaliyev 14/11 - 24/11
2.1 - Model exploding Allowed users to expand the model to study every component separately Feature performed well and client liked the idea It's been decided to keep this feature in the final prototype Timur Kuzhagaliyev 14/11 - 16/11
2.2 - Colour adjustment Allowed users to adjust hue and transparency of different parts of the model Client liked the feature but adjusting hue was deemed unncessary Removed the hue adjustment from application but left transparency adjustment in Timur Kuzhagaliyev 17/11 - 19/11
2.3 - Voice commands Allowed users to expand the model using "Switch View" voice command Although sometimes unreliable feature performed well enough It's been decided to keep voice commands in the application Timur Kuzhagaliyev 20/11 - 22/11
2.4 - Bounding boxes Generates grey bounding boxes around models that become visible on hover It was agreed that bounding boxes are a feasible way to indicate which objects are active It's been decided to keep bounding boxes in the final prototype with some cosmetic improvements Timur Kuzhagaliyev 23/11 - 24/11
3 API First Prototype Details can be found below. Fraser Savage
3.1 - Basic model conversion Converts an STL model to an OBJ model Although achieved through calling C++ code the desired functionality works It has been decided to keep this functionality in the final prototype and attempt to extend it to accomodate additional file types. Fraser Savage 16/11 - 17/11
3.2 - Archive serving of model Allows users to download a zip archive containing all the meshes for a model The feature performed as required It has not yet been decided whether to ship model metadata in the archive or separately Fraser Savage 18/11 - 19/11
3.3 - Archive serving of DICOM Allows users to download a zip archive containing all of the slices of a DICOM The feature performed as required, although the archives are bit large As with the archive serving of the model it has not yet been decided whether to ship DICOM metadata in the archive or separately. Future iterations of this may make adjustments to how all of the data is served because of the size of the archive. Fraser Savage 18/11 -19/11
3.3 - Require authorisation to access data Requires an authorisation token to be provided when attempting to access sensitive data through the API The feature works as intended It has been decided to keep this functionality in some form for the final prototype. Fraser Savage 22/11 - 24/11
3.4 - User authentication Assigns an authorisation token to a user if their provided credentials are correct This feature works as intended, although handling of the credentials needs to be better secured on the server side This functionality will be kept in the final prototype although the implementation security should be improved upon Fraser Savage 26/11 - 27/11
4 HoloLens consumption of the API First Prototype Allows user to connect to and authenticate with the API, then download a model archive and extract it so the model can be viewed The feature works mostly as intended. The model once downloaded is not successfully opened by the model viewer, although the models downloaded appear to check out in 3D applications. This feature needs improvement and fixing before it goes into the final prototype. The current interaction used to load the model off the API needs to be improved. Fraser Savage 02/12 - 04/12
5 HoloLens DICOM image viewing Attempted loading DICOM images dynamically during runtime, from both original .dcm files and from .jpg files generated beforehand Loading DICOM images from .dcm files proved to be very challenging due to limited choice of existing C# libraries to achieve that. Loading .jpg files and scrolling through them worked well. We decided to abandon the idea of loading .dcm files on HoloLens but rather use .jpg files instead. Conversion of .dcm to .jpg will be handled by the API. Timur Kuzhagaliyev 24/11
6 HoloLens tagalong main menu Tried using Unity UI components with some custom scripts and scripts from Unity HoloToolkit to create tagalong menu Feature worked well, and Billboard and Tagalong scripts from Unity HoloToolkit covered most of the calculations. Additionally Unity UI worked well with HoloLens after several adjustments. Considering how well Unity UI worked and how customiseable it is, we'll definitely continue using it for other elements of our application. Timur Kuzhagaliyev 24/11
7 HoloLens runtime .obj loading Attempted importing models from .obj stored in Unity's assets folder during runtime Although there were some issues with importing the models with correct mesh data, in the end I managed to load all componenets of the model so that they had correct coordinates relative to each other. Although the experiment was successful loading time was a bit high and we considered decimating meshes before import to improve performance. Timur Kuzhagaliyev 24/11 - 25/11
8 HoloLens First Prototype Details can be found below. Timur Kuzhagaliyev 26/11 - 04/12
8.1 - Context menus Implemented a framework for generation of collections of buttons that appear above models, DICOM images and potentially any other objects. Framework also supports callbacks and dynamic button creation/deletion. Framework performed very well and proved a feasible concept for our UI and UX on HoloLens. We're definitely going to use the context menu framework in our prototype. Timur Kuzhagaliyev 26/11 - 28/11
8.2 - Improved bounding boxes A couple of cosmetic improvements to bounding boxes and the way they're generated. Based on the code from experiment 2.4 but with more flexibility and a greater amount of parameters. The improved bounding boxes were easier to reference in other code and helped avoid a lot of code duplication. This experiment improved the general quality of the code a lot and also helped me better understand the structure of Unity C#. Timur Kuzhagaliyev 29/11
8.3 - Manipulation mode framework Using the new context menu framework, developed a framework that would handle different manipulations in a consistent way. At this stage the supported manipulations were scrolling (for DICOM images), rotating, scaling, transparency adjustment (for models) and exploding (for models). Client liked the new concept and it fit our usability requirements pretty well by making UX consistent. Additionally, it removed a lot of code duplication. It was decided to implement this feature in the final prototype after making several adjustments and improving the abstraction of a generic manipulation controller. Timur Kuzhagaliyev 30/11 - 01/12
8.4 - Multiple object support Refactored code from experiments 5 and 7 to extract bits responsible for object loading. Create a new ObjectManager class that handles loading objects and can load objects continiously as long as the memory can support it. We were able to load multiple models and DICOM images into the same scene without any issues, fulfilling one of the requirements set for our application. The ObjectManager script in this experiments will be used in the final product after some changes to improve its performance. Timur Kuzhagaliyev 02/12
8.5 - Data markers Implemented data markers that could be placed on top of meshes and would hold text notes and voice recordings. We had a chance to see how well integration with HoloLens' virtual keyboard works, which performed pretty well. Additionally, we got some feedback saying that voice recordings might not be feasible and we might want to add an ability to move markers or create markers of specific type. The concept of data markers will definitely be added to the final product, but we'll have to add more features to them like holding SNOMED CT codes and various multimedia files. Timur Kuzhagaliyev 03/12 - 04/12
9 Creating Webapp User Interface Setting up a webapp directory using the electrode.io framework, and creating a homepage that displays the UI title Used the getting started tutorial so easy to create initial directory however limited documentation beyond that point so developing existing pages proved challenging Successful but decision made to abandon electrode.io for now due to dificulty of implementation Laura Foody 19/11 - 21/11
10 User Authentication on Webapp Frontend Creating a web app directory with login, registration and my account pages along with user authentication functionality using stormpath as a test server Stormpath has a built in library which makes implementing user authentication very easy Successfully created a login and registration page. The my account page exists but there is no functionality. CSS needs to be added Laura Foody 25/11 - 29/11
11 Establishing Communication with the API in the Webapp Frontend Linking the front end registration/login functionality to the back end using the login API Not able to implement Not successful so far because its not clear how the login information is stored when using the stormpath library so unable to integrate with the API Laura Foody 29/11 - 06/12