| Literature DB >> 32436132 |
Stephen Thompson1, Thomas Dowrick2, Mian Ahmad2, Goufang Xiao2, Bongjin Koo2, Ester Bonmati2, Kim Kahl2, Matthew J Clarkson2.
Abstract
PURPOSE: This paper introduces the SciKit-Surgery libraries, designed to enable rapid development of clinical applications for image-guided interventions. SciKit-Surgery implements a family of compact, orthogonal, libraries accompanied by robust testing, documentation, and quality control. SciKit-Surgery libraries can be rapidly assembled into testable clinical applications and subsequently translated to production software without the need for software reimplementation. The aim is to support translation from single surgeon trials to multicentre trials in under 2 years.Entities:
Keywords: Image-guided surgery; Platform; Python; Software; Surgical navigation
Mesh:
Year: 2020 PMID: 32436132 PMCID: PMC7316849 DOI: 10.1007/s11548-020-02180-5
Source DB: PubMed Journal: Int J Comput Assist Radiol Surg ISSN: 1861-6410 Impact factor: 2.924
Comparable sizes of other platforms, in kilo lines of code(kLoC), measured using cloc version 1.76
| Library | Size (kLoC) |
|---|---|
| 3DSlicer | C |
| SlicerIGT | C |
| PlusLib | C |
| NifTK | C |
| MITK | C |
| CustusX | C |
| IBIS | C |
| CISST | C |
| CamiTK | C |
The SciKit-Surgery libraries were developed with three aims in mind
| SciKit-Surgery Design Aims | |
|---|---|
| 1 | Enable novel algorithms to be built into applications that can be rapidly deployed to theatre |
| 2 | Minimise reimplementation during translation from proof of concept to multicentre trials |
| 3 | Enable dissemination of high-quality implementations of research algorithms |
The aims were translated into a set of design guidelines that can be followed when developing an individual SciKit-Surgery library
| SciKit-Surgery Design Guide | |
|---|---|
| 1 | Development driven by users’ needs |
| 2 | Do one thing and do it well |
| 3 | Functions and classes with Python interfaces using NumPy data structures |
| 4 | Installable directly from PyPI, using pip |
| 5 | Libraries fully documented and examples provided |
| 6 | Packages are small with clear instructions on how to contribute to development |
| 7 | Packages are independent, with minimal dependencies, and maximum orthogonality |
| 8 | Use version control, issue tracking, and continuous integration testing |
| 9 | Template for library development and encourage wider adoption |
The libraries that currently make up SciKit-Surgery. The two templates are not prefixed with SciKit-Surgery, as they have no surgical functionality. All libraries can be found on pypi.org
| Library | Components | Dependencies | Size (kLoC) |
|---|---|---|---|
| surgerycore | Common data types, abstract base classes, configuration manager, transform manager, common algorithms | NumPy | 0.78 |
| Surgeryimage | Video input, distortion correction, rectification, common image algorithms | NumPy, OpenCV, surgerycore | 3.36 |
| Surgeryvtk | Visualisation, surface model loaders, camera models, polydata utilities, widgets | NumPy, VTK, OpenCV, QT(PySide2), surgerycore, surgeryimage | 3.98 |
| Surgery-nditracker | NDI trackers (Polaris, Vega, Aurora) | NumPy, ndicapi, surgerycore | 1.62 |
| Surgery-arucotracker | Tracking using ArUco Tags | NumPy, OpenCV, surgerycore | 1.55 |
| Surgerybk | BK Medical Ultrasound | NumPy, OpenCV, surgerycore | 1.55 |
| Surgeryutils | Utility applications, basic overlay window, reslice window, video lag measurement | NumPy, OpenCV, QT(PySide2), surgeryimage, surgeryvtk | 1.88 |
| Surgery-tracker-visualisation | Visualisation for surgerytrackers | NumPy, VTK, PySide2, surgeryvtk, surgeryimage, surgerycore, surgeryutils, surgerynditracker, surgeryarucotracker | 1.74 |
| Surgery-davinci | Augmented Reality for the DaVinci Robot | NumPy, surgeryvtk, surgeryimage, surgerycore, surgeryutils | 1.54 |
| Surgeryspeech | Speech recognition user interface | pyaudio SpeechRecognition, google-api-python-client, oauth2client, PySide2 | 1.37 |
| SciKit-Surgery C | |||
| Surgerygpucpp | GPU accelerated image processing | ArrayFire, Boost, Eigen, FLANN, glog, OpenCV, PCL, VTK | 2.33 |
| PythonTemplate | Template for native Python SciKit-Surgery Libraries | cookiecutter | 1.27 |
| C | Template for C | cookiecutter | 1.27 |
Fig. 1Use of a platform such as NifTK allowed the SmartLiver augmented reality guidance system to be written in approximately 3.7 k lines of code, with a single dependency on the NifTK platform, 230 k lines of code. In common with other platforms (and the SciKit-Surgery libraries), NifTK is built on top of further dependencies, shown scaled by size along the bottom of the figure. The direct dependencies of NifTK total 10.36M lines of code
Fig. 2First- and second-order modular dependencies for SmartLiver implemented using NifTK a and SciKit-Surgery b. Dependencies that form part of NifTK or SciKit-Surgery are shown in light blue and are scaled by size. Third-party dependencies are shown in grey and are not scaled by size, as they (principally VTK and QT) would dwarf the other dependencies. Cross-dependencies (dependencies between first-order dependencies) are highlighted using dashed lines. Where space permits the library size in thousands of lines of code is shown in brackets
Fig. 3The SmartLiver system being tested in theatre with a voice-controlled user interface. The SciKit-Surgery architecture allows the SmartLiver system to be easily connected to the scikit-surgeryspeech library, to test the effectiveness of voice control for calibration and manual alignment
Fig. 4SnappySonic in use at the Science of Surgery public engagement event. An obsolete ultrasound probe is tracked using OpenCV’s ArUco marker libraries. The position of the probe is used to show an image from a pre-recorded ultrasound buffer, giving the appearance of live acquisition. Image by James Tye