@cornerstonejs/ai 5.11.7 → 5.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -65,6 +65,7 @@ export default class ONNXSegmentationController {
|
|
|
65
65
|
private _searchBreadth;
|
|
66
66
|
private loadingAI;
|
|
67
67
|
protected viewport: any;
|
|
68
|
+
private viewportGeneration;
|
|
68
69
|
protected excludeTool: string;
|
|
69
70
|
protected currentImage: any;
|
|
70
71
|
private listeners;
|
|
@@ -122,6 +123,7 @@ export default class ONNXSegmentationController {
|
|
|
122
123
|
interpolateScroll(viewport?: any, dir?: number): Promise<void>;
|
|
123
124
|
protected log(logger: Loggers, ...args: unknown[]): void;
|
|
124
125
|
protected getPromptAnnotations: (viewport?: any) => cornerstoneTools.Types.Annotations;
|
|
126
|
+
protected getActiveSegmentation(viewport?: any): cornerstoneTools.Types.Segmentation;
|
|
125
127
|
protected viewportRenderedListener: (_event: any) => void;
|
|
126
128
|
protected annotationModifiedListener: Function;
|
|
127
129
|
disconnectViewport(viewport: any): void;
|
|
@@ -86,6 +86,7 @@ class ONNXSegmentationController {
|
|
|
86
86
|
this.labels = [];
|
|
87
87
|
this.worldPoints = new Array();
|
|
88
88
|
this._searchBreadth = 3;
|
|
89
|
+
this.viewportGeneration = 0;
|
|
89
90
|
this.excludeTool = ONNXSegmentationController.MarkerExclude;
|
|
90
91
|
this.listeners = [
|
|
91
92
|
(message, ...args) => cs3dLogger.info(message, ...args),
|
|
@@ -138,16 +139,19 @@ class ONNXSegmentationController {
|
|
|
138
139
|
else {
|
|
139
140
|
desiredImage.sampleImageId = desiredImage.imageId;
|
|
140
141
|
}
|
|
142
|
+
const segmentation = this.getActiveSegmentation();
|
|
143
|
+
if (!segmentation) {
|
|
144
|
+
this.randomPoints = [];
|
|
145
|
+
}
|
|
141
146
|
if (desiredImage.imageId === currentImage?.imageId) {
|
|
142
147
|
return;
|
|
143
148
|
}
|
|
144
|
-
if (this._enabled && this._autoSegmentMode) {
|
|
149
|
+
if (segmentation && this._enabled && this._autoSegmentMode) {
|
|
145
150
|
if ('isInAcquisitionPlane' in viewport &&
|
|
146
151
|
!viewport.isInAcquisitionPlane()) {
|
|
147
152
|
cs3dLogger.warn('Non acquisition plane viewports and auto segment mode is not yet supported');
|
|
148
153
|
return;
|
|
149
154
|
}
|
|
150
|
-
const segmentation = cornerstoneTools.segmentation.activeSegmentation.getActiveSegmentation(viewport.id);
|
|
151
155
|
const segmentIndex = cornerstoneTools.segmentation.segmentIndex.getActiveSegmentIndex(segmentation.segmentationId);
|
|
152
156
|
const imageIds = viewport.getImageIds();
|
|
153
157
|
const currentImageIdIndex = viewport.getCurrentImageIdIndex();
|
|
@@ -275,11 +279,13 @@ class ONNXSegmentationController {
|
|
|
275
279
|
this.tryLoad();
|
|
276
280
|
}
|
|
277
281
|
initViewport(viewport) {
|
|
282
|
+
this.viewportGeneration++;
|
|
278
283
|
const { desiredImage } = this;
|
|
279
284
|
if (this.viewport) {
|
|
280
285
|
this.disconnectViewport(this.viewport);
|
|
281
286
|
}
|
|
282
287
|
this.currentImage = null;
|
|
288
|
+
this.randomPoints = [];
|
|
283
289
|
this.viewport = viewport;
|
|
284
290
|
const brushInstance = new LabelmapBaseTool({}, {
|
|
285
291
|
configuration: {
|
|
@@ -398,9 +404,16 @@ class ONNXSegmentationController {
|
|
|
398
404
|
listener(logger, ...args);
|
|
399
405
|
}
|
|
400
406
|
}
|
|
407
|
+
getActiveSegmentation(viewport = this.viewport) {
|
|
408
|
+
if (!viewport) {
|
|
409
|
+
return;
|
|
410
|
+
}
|
|
411
|
+
return cornerstoneTools.segmentation.activeSegmentation.getActiveSegmentation(viewport.id);
|
|
412
|
+
}
|
|
401
413
|
disconnectViewport(viewport) {
|
|
402
414
|
viewport.element.removeEventListener(Events.IMAGE_RENDERED, this.viewportRenderedListener);
|
|
403
415
|
const boundListener = this.annotationModifiedListener;
|
|
416
|
+
eventTarget.removeEventListener(toolsEvents.ANNOTATION_ADDED, boundListener);
|
|
404
417
|
eventTarget.removeEventListener(toolsEvents.ANNOTATION_MODIFIED, boundListener);
|
|
405
418
|
eventTarget.removeEventListener(toolsEvents.ANNOTATION_COMPLETED, boundListener);
|
|
406
419
|
}
|
|
@@ -558,7 +571,9 @@ class ONNXSegmentationController {
|
|
|
558
571
|
}
|
|
559
572
|
async runDecode() {
|
|
560
573
|
const { canvas } = this;
|
|
561
|
-
if (this.isGpuInUse ||
|
|
574
|
+
if (this.isGpuInUse ||
|
|
575
|
+
!this.currentImage?.imageEmbeddings ||
|
|
576
|
+
!this.getActiveSegmentation()) {
|
|
562
577
|
return;
|
|
563
578
|
}
|
|
564
579
|
this.isGpuInUse = true;
|
|
@@ -707,6 +722,9 @@ class ONNXSegmentationController {
|
|
|
707
722
|
createLabelmap(mask, canvasPosition, _points, _labels) {
|
|
708
723
|
const { canvas, viewport } = this;
|
|
709
724
|
const preview = this.tool.addPreview(viewport.element);
|
|
725
|
+
if (!preview) {
|
|
726
|
+
return;
|
|
727
|
+
}
|
|
710
728
|
const { previewSegmentIndex, memo, segmentationId, segmentIndex, segmentationVoxelManager, } = preview;
|
|
711
729
|
const previewVoxelManager = memo?.voxelManager;
|
|
712
730
|
const { dimensions } = previewVoxelManager;
|
|
@@ -758,7 +776,7 @@ class ONNXSegmentationController {
|
|
|
758
776
|
triggerSegmentationDataModified(segmentationId);
|
|
759
777
|
}
|
|
760
778
|
async decode(points, labels, useSession = this.currentImage) {
|
|
761
|
-
const { canvas, canvasMask, imageImageData, desiredImage, boxRadius } = this;
|
|
779
|
+
const { canvas, canvasMask, imageImageData, desiredImage, boxRadius, viewport, viewportGeneration, } = this;
|
|
762
780
|
const ctx = canvas.getContext('2d', { willReadFrequently: true });
|
|
763
781
|
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
|
764
782
|
canvas.width = imageImageData.width;
|
|
@@ -778,6 +796,10 @@ class ONNXSegmentationController {
|
|
|
778
796
|
const session = useSession.decoder;
|
|
779
797
|
const feed = feedForSam(emb, points, labels);
|
|
780
798
|
const res = await session.run(feed);
|
|
799
|
+
if (viewport !== this.viewport ||
|
|
800
|
+
viewportGeneration !== this.viewportGeneration) {
|
|
801
|
+
return;
|
|
802
|
+
}
|
|
781
803
|
for (let i = 0; i < points.length; i += 2) {
|
|
782
804
|
const label = labels[i / 2];
|
|
783
805
|
ctx.fillStyle = label ? 'blue' : 'pink';
|
package/dist/esm/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const version = "5.
|
|
1
|
+
export declare const version = "5.12.1";
|
package/dist/esm/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const version = '5.
|
|
1
|
+
export const version = '5.12.1';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cornerstonejs/ai",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.12.1",
|
|
4
4
|
"description": "AI and ML Interfaces for Cornerstone3D",
|
|
5
5
|
"files": [
|
|
6
6
|
"dist"
|
|
@@ -63,11 +63,11 @@
|
|
|
63
63
|
"onnxruntime-web": "1.17.1"
|
|
64
64
|
},
|
|
65
65
|
"devDependencies": {
|
|
66
|
-
"@cornerstonejs/core": "5.
|
|
67
|
-
"@cornerstonejs/tools": "5.
|
|
66
|
+
"@cornerstonejs/core": "5.12.1",
|
|
67
|
+
"@cornerstonejs/tools": "5.12.1"
|
|
68
68
|
},
|
|
69
69
|
"peerDependencies": {
|
|
70
|
-
"@cornerstonejs/core": "5.
|
|
71
|
-
"@cornerstonejs/tools": "5.
|
|
70
|
+
"@cornerstonejs/core": "5.12.1",
|
|
71
|
+
"@cornerstonejs/tools": "5.12.1"
|
|
72
72
|
}
|
|
73
73
|
}
|