@jax-data-science/sci-image-visualizer 0.3.1 → 0.3.3
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.
- package/README.md +7 -7
- package/esm2022/lib/models/region.mjs +57 -1
- package/esm2022/lib/store/region-store.service.mjs +8 -2
- package/esm2022/lib/toolbar/segmentation/cellpose-segmenter.service.mjs +2 -2
- package/esm2022/lib/toolbar/segmentation/sam-model-registry.mjs +9 -9
- package/fesm2022/jax-data-science-sci-image-visualizer.mjs +72 -10
- package/fesm2022/jax-data-science-sci-image-visualizer.mjs.map +1 -1
- package/lib/models/region.d.ts +20 -0
- package/package.json +3 -3
|
@@ -18,8 +18,8 @@ export const SAM_MODELS = [
|
|
|
18
18
|
{
|
|
19
19
|
id: 'microsam-vit-t-lm',
|
|
20
20
|
label: 'micro-sam ViT-T',
|
|
21
|
-
encoderUrl: 'https://huggingface.co/
|
|
22
|
-
decoderUrl: 'https://huggingface.co/
|
|
21
|
+
encoderUrl: 'https://huggingface.co/jax-image-tools/microsam-vit-t-lm-onnx/resolve/main/encoder.fp16.onnx',
|
|
22
|
+
decoderUrl: 'https://huggingface.co/jax-image-tools/microsam-vit-t-lm-onnx/resolve/main/decoder.onnx',
|
|
23
23
|
variant: 'sam1',
|
|
24
24
|
inputSize: 1024,
|
|
25
25
|
microscopy: true,
|
|
@@ -35,8 +35,8 @@ export const SAM_MODELS = [
|
|
|
35
35
|
{
|
|
36
36
|
id: 'microsam-vit-b-lm',
|
|
37
37
|
label: 'micro-sam ViT-B',
|
|
38
|
-
encoderUrl: 'https://huggingface.co/
|
|
39
|
-
decoderUrl: 'https://huggingface.co/
|
|
38
|
+
encoderUrl: 'https://huggingface.co/jax-image-tools/microsam-vit-b-lm-onnx/resolve/main/encoder.fp16.onnx',
|
|
39
|
+
decoderUrl: 'https://huggingface.co/jax-image-tools/microsam-vit-b-lm-onnx/resolve/main/decoder.onnx',
|
|
40
40
|
variant: 'sam1',
|
|
41
41
|
inputSize: 1024,
|
|
42
42
|
microscopy: true,
|
|
@@ -44,8 +44,8 @@ export const SAM_MODELS = [
|
|
|
44
44
|
{
|
|
45
45
|
id: 'patho-sam-vit-b',
|
|
46
46
|
label: 'patho-sam ViT-B',
|
|
47
|
-
encoderUrl: 'https://huggingface.co/
|
|
48
|
-
decoderUrl: 'https://huggingface.co/
|
|
47
|
+
encoderUrl: 'https://huggingface.co/jax-image-tools/patho-sam-vit-b-onnx/resolve/main/encoder.fp16.onnx',
|
|
48
|
+
decoderUrl: 'https://huggingface.co/jax-image-tools/patho-sam-vit-b-onnx/resolve/main/decoder.onnx',
|
|
49
49
|
variant: 'sam1',
|
|
50
50
|
inputSize: 1024,
|
|
51
51
|
microscopy: true,
|
|
@@ -53,8 +53,8 @@ export const SAM_MODELS = [
|
|
|
53
53
|
{
|
|
54
54
|
id: 'patho-sam-vit-b-int8',
|
|
55
55
|
label: 'patho-sam ViT-B (int8)',
|
|
56
|
-
encoderUrl: 'https://huggingface.co/
|
|
57
|
-
decoderUrl: 'https://huggingface.co/
|
|
56
|
+
encoderUrl: 'https://huggingface.co/jax-image-tools/patho-sam-vit-b-onnx/resolve/main/encoder.int8.onnx',
|
|
57
|
+
decoderUrl: 'https://huggingface.co/jax-image-tools/patho-sam-vit-b-onnx/resolve/main/decoder.onnx',
|
|
58
58
|
variant: 'sam1',
|
|
59
59
|
inputSize: 1024,
|
|
60
60
|
microscopy: true,
|
|
@@ -105,4 +105,4 @@ export function setSamModelUrls(id, encoderUrl, decoderUrl) {
|
|
|
105
105
|
activeDefaultId = id;
|
|
106
106
|
}
|
|
107
107
|
}
|
|
108
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FtLW1vZGVsLXJlZ2lzdHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi90b29sYmFyL3NlZ21lbnRhdGlvbi9zYW0tbW9kZWwtcmVnaXN0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFrQjtJQUN2QztRQUNFLEVBQUUsRUFBRSxtQkFBbUI7UUFDdkIsS0FBSyxFQUFFLGlCQUFpQjtRQUN4QixVQUFVLEVBQUUsOEZBQThGO1FBQzFHLFVBQVUsRUFBRSx5RkFBeUY7UUFDckcsT0FBTyxFQUFFLE1BQU07UUFDZixTQUFTLEVBQUUsSUFBSTtRQUNmLFVBQVUsRUFBRSxJQUFJO1FBQ2hCLDBFQUEwRTtRQUMxRSx3RUFBd0U7UUFDeEUsaUVBQWlFO1FBQ2pFLGdCQUFnQixFQUFFLENBQUMsTUFBTSxDQUFDO1FBQzFCLHFFQUFxRTtRQUNyRSwyRUFBMkU7UUFDM0UseUNBQXlDO1FBQ3pDLFNBQVMsRUFBRSxJQUFJO0tBQ2hCO0lBQ0Q7UUFDRSxFQUFFLEVBQUUsbUJBQW1CO1FBQ3ZCLEtBQUssRUFBRSxpQkFBaUI7UUFDeEIsVUFBVSxFQUFFLDhGQUE4RjtRQUMxRyxVQUFVLEVBQUUseUZBQXlGO1FBQ3JHLE9BQU8sRUFBRSxNQUFNO1FBQ2YsU0FBUyxFQUFFLElBQUk7UUFDZixVQUFVLEVBQUUsSUFBSTtLQUNqQjtJQUNEO1FBQ0UsRUFBRSxFQUFFLGlCQUFpQjtRQUNyQixLQUFLLEVBQUUsaUJBQWlCO1FBQ3hCLFVBQVUsRUFBRSw0RkFBNEY7UUFDeEcsVUFBVSxFQUFFLHVGQUF1RjtRQUNuRyxPQUFPLEVBQUUsTUFBTTtRQUNmLFNBQVMsRUFBRSxJQUFJO1FBQ2YsVUFBVSxFQUFFLElBQUk7S0FDakI7SUFDRDtRQUNFLEVBQUUsRUFBRSxzQkFBc0I7UUFDMUIsS0FBSyxFQUFFLHdCQUF3QjtRQUMvQixVQUFVLEVBQUUsNEZBQTRGO1FBQ3hHLFVBQVUsRUFBRSx1RkFBdUY7UUFDbkcsT0FBTyxFQUFFLE1BQU07UUFDZixTQUFTLEVBQUUsSUFBSTtRQUNmLFVBQVUsRUFBRSxJQUFJO1FBQ2hCLDRFQUE0RTtRQUM1RSw0RUFBNEU7UUFDNUUseUVBQXlFO1FBQ3pFLGdCQUFnQixFQUFFLENBQUMsTUFBTSxDQUFDO0tBQzNCO0NBQ0YsQ0FBQztBQUVGO2lEQUNpRDtBQUNqRCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBRXJEO29GQUNvRjtBQUNwRixJQUFJLGVBQWUsR0FBRyxvQkFBb0IsQ0FBQztBQUUzQztzQkFDc0I7QUFDdEIsTUFBTSxVQUFVLFdBQVcsQ0FBQyxFQUFXO0lBQ3JDLE1BQU0sTUFBTSxHQUFHLEVBQUUsSUFBSSxlQUFlLENBQUM7SUFDckMsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRSxDQUFDO0FBRUQsMEVBQTBFO0FBQzFFLE1BQU0sVUFBVSxvQkFBb0I7SUFDbEMsT0FBTyxlQUFlLENBQUM7QUFDekIsQ0FBQztBQUVELG9FQUFvRTtBQUNwRSxNQUFNLFVBQVUsa0JBQWtCLENBQUMsRUFBVTtJQUMzQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQUUsZUFBZSxHQUFHLEVBQUUsQ0FBQztBQUNoRSxDQUFDO0FBRUQsa0ZBQWtGO0FBQ2xGLE1BQU0sVUFBVSxlQUFlLENBQUMsS0FBa0I7SUFDaEQsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztBQUNsRCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUMsRUFBVSxFQUFFLFVBQWtCLEVBQUUsVUFBa0I7SUFDaEYsTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM5QyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ04sQ0FBQyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDMUIsQ0FBQyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDMUIseUVBQXlFO1FBQ3pFLHVFQUF1RTtRQUN2RSxJQUFJLFVBQVUsSUFBSSxVQUFVO1lBQUUsZUFBZSxHQUFHLEVBQUUsQ0FBQztJQUNyRCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNhbU1vZGVsRGVmIH0gZnJvbSAnLi4vLi4vY29udHJhY3RzL3NhbS5jb250cmFjdCc7XG5cbi8qKlxuICogUmVnaXN0cnkgb2YgcHJvbXB0YWJsZSBTQU0gbW9kZWxzIGZvciB0aGUgYnJvd3NlciBzZWdtZW50IHRvb2wuXG4gKlxuICogbWljcm8tc2FtIChtaWNyb3Njb3B5LWZpbmV0dW5lZCwgcHJvbXB0YWJsZSkgYW5kIHBhdGhvLXNhbSAoaGlzdG9wYXRob2xvZ3ktXG4gKiBmaW5ldHVuZWQpIGFyZSBlbnRyaWVzOyBTQU0zIHNsb3RzIGluIGhlcmUgb25jZSBpdHMgcXVhbnRpemVkIE9OTlggZXhwb3J0IGFuZFxuICogYSBgdmFyaWFudDogJ3NhbTMnYCBkZWNvZGVyIHBhdGggYXJlIHB1Ymxpc2hlZC4gVGhlXG4gKiBhdXRvbWF0aWMgY2VsbHBvc2UtU0FNIG1vZGVsIGlzIGludGVudGlvbmFsbHkgTk9UIGhlcmUg4oCUIGl0J3Mgbm90IHByb21wdGFibGVcbiAqIGFuZCBsaXZlcyBpbiB0aGUgcHJvY2Vzc2luZy1waXBlbGluZSdzIGNlbGxwb3NlIGVuZ2luZSBhcyB0aGUgYXV0b21hdGljIHRvb2wuXG4gKlxuICogYGVuY29kZXJVcmxgIC8gYGRlY29kZXJVcmxgIHBvaW50IGF0IHRoZSBwdWJsaWMgSEYtaG9zdGVkIE9OTlggcGFpcnMgYnlcbiAqIGRlZmF1bHQsIHNvIHRoZSBzZWdtZW50IHRvb2xzIHdvcmsgb3V0IG9mIHRoZSBib3ggaW4gYW55IGhvc3QgKG1pcnJvcmluZyB0aGVcbiAqIGNlbGxwb3NlIGRlZmF1bHQpLiBBIGhvc3QgY2FuIHJlcG9pbnQgdGhlbSBhdCBpdHMgb3duIGhvc3RpbmcgKGUuZy4gYSBHQ1NcbiAqIGJ1Y2tldCkgYXQgcnVudGltZSB2aWEge0BsaW5rIHNldFNhbU1vZGVsVXJsc307IGFuIGVtcHR5IFVSTCBkaXNhYmxlcyBhIG1vZGVsXG4gKiAodGhlIHNlc3Npb24gdGhyb3dzIGEgY2xlYXIgXCJub3QgY29uZmlndXJlZFwiIGVycm9yKS4gRXhwb3J0L3F1YW50aXphdGlvblxuICogdG9vbGluZzogdGhlIHNpYmxpbmcgYGJyb3dzZXItb25ueC10b29sc2AgcHJvamVjdDsgc2VlIGRvY3Mvc2FtLXNlZ21lbnRhdGlvbi1kZXNpZ24ubWQuXG4gKi9cbmV4cG9ydCBjb25zdCBTQU1fTU9ERUxTOiBTYW1Nb2RlbERlZltdID0gW1xuICB7XG4gICAgaWQ6ICdtaWNyb3NhbS12aXQtdC1sbScsXG4gICAgbGFiZWw6ICdtaWNyby1zYW0gVmlULVQnLFxuICAgIGVuY29kZXJVcmw6ICdodHRwczovL2h1Z2dpbmdmYWNlLmNvL2pheC1pbWFnZS10b29scy9taWNyb3NhbS12aXQtdC1sbS1vbm54L3Jlc29sdmUvbWFpbi9lbmNvZGVyLmZwMTYub25ueCcsXG4gICAgZGVjb2RlclVybDogJ2h0dHBzOi8vaHVnZ2luZ2ZhY2UuY28vamF4LWltYWdlLXRvb2xzL21pY3Jvc2FtLXZpdC10LWxtLW9ubngvcmVzb2x2ZS9tYWluL2RlY29kZXIub25ueCcsXG4gICAgdmFyaWFudDogJ3NhbTEnLFxuICAgIGlucHV0U2l6ZTogMTAyNCxcbiAgICBtaWNyb3Njb3B5OiB0cnVlLFxuICAgIC8vIFRpbnlWaVQncyBmcDE2IGF0dGVudGlvbiBvdmVyZmxvd3Mgb24gdGhlIG9ubnhydW50aW1lLXdlYiBXZWJHUFUgRVAgYW5kXG4gICAgLy8gcmV0dXJucyBhbiBlbXB0eSBtYXNrIChcIk5vIG1hc2tzIGZvdW5kXCIpOyBpdCdzIG51bWVyaWNhbGx5IGNvcnJlY3Qgb25cbiAgICAvLyBXQVNNLCBhbmQgdGhlIGVuY29kZXIgaXMgdGlueSAofjE0IE1CKSBzbyBXQVNNIGlzIHBsZW50eSBmYXN0LlxuICAgIGVuY29kZXJQcm92aWRlcnM6IFsnd2FzbSddLFxuICAgIC8vIFNtYWxsIGVub3VnaCB0byBydW4gaW4tcHJvY2VzcyBvbiB0aGUgbWFpbiB0aHJlYWQg4oCUIGF2b2lkcyB0aGUgV2ViXG4gICAgLy8gV29ya2VyJ3Mgc3Bhd24gLyBzZWNvbmQtT1JULXJ1bnRpbWUgLyByb3VuZC10cmlwIG92ZXJoZWFkLCB3aGljaCBtYWRlIGl0XG4gICAgLy8gbm90aWNlYWJseSBzbG93ZXIgdG8gbG9hZCBhbmQgc2VnbWVudC5cbiAgICBpblByb2Nlc3M6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBpZDogJ21pY3Jvc2FtLXZpdC1iLWxtJyxcbiAgICBsYWJlbDogJ21pY3JvLXNhbSBWaVQtQicsXG4gICAgZW5jb2RlclVybDogJ2h0dHBzOi8vaHVnZ2luZ2ZhY2UuY28vamF4LWltYWdlLXRvb2xzL21pY3Jvc2FtLXZpdC1iLWxtLW9ubngvcmVzb2x2ZS9tYWluL2VuY29kZXIuZnAxNi5vbm54JyxcbiAgICBkZWNvZGVyVXJsOiAnaHR0cHM6Ly9odWdnaW5nZmFjZS5jby9qYXgtaW1hZ2UtdG9vbHMvbWljcm9zYW0tdml0LWItbG0tb25ueC9yZXNvbHZlL21haW4vZGVjb2Rlci5vbm54JyxcbiAgICB2YXJpYW50OiAnc2FtMScsXG4gICAgaW5wdXRTaXplOiAxMDI0LFxuICAgIG1pY3Jvc2NvcHk6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBpZDogJ3BhdGhvLXNhbS12aXQtYicsXG4gICAgbGFiZWw6ICdwYXRoby1zYW0gVmlULUInLFxuICAgIGVuY29kZXJVcmw6ICdodHRwczovL2h1Z2dpbmdmYWNlLmNvL2pheC1pbWFnZS10b29scy9wYXRoby1zYW0tdml0LWItb25ueC9yZXNvbHZlL21haW4vZW5jb2Rlci5mcDE2Lm9ubngnLFxuICAgIGRlY29kZXJVcmw6ICdodHRwczovL2h1Z2dpbmdmYWNlLmNvL2pheC1pbWFnZS10b29scy9wYXRoby1zYW0tdml0LWItb25ueC9yZXNvbHZlL21haW4vZGVjb2Rlci5vbm54JyxcbiAgICB2YXJpYW50OiAnc2FtMScsXG4gICAgaW5wdXRTaXplOiAxMDI0LFxuICAgIG1pY3Jvc2NvcHk6IHRydWUsXG4gIH0sXG4gIHtcbiAgICBpZDogJ3BhdGhvLXNhbS12aXQtYi1pbnQ4JyxcbiAgICBsYWJlbDogJ3BhdGhvLXNhbSBWaVQtQiAoaW50OCknLFxuICAgIGVuY29kZXJVcmw6ICdodHRwczovL2h1Z2dpbmdmYWNlLmNvL2pheC1pbWFnZS10b29scy9wYXRoby1zYW0tdml0LWItb25ueC9yZXNvbHZlL21haW4vZW5jb2Rlci5pbnQ4Lm9ubngnLFxuICAgIGRlY29kZXJVcmw6ICdodHRwczovL2h1Z2dpbmdmYWNlLmNvL2pheC1pbWFnZS10b29scy9wYXRoby1zYW0tdml0LWItb25ueC9yZXNvbHZlL21haW4vZGVjb2Rlci5vbm54JyxcbiAgICB2YXJpYW50OiAnc2FtMScsXG4gICAgaW5wdXRTaXplOiAxMDI0LFxuICAgIG1pY3Jvc2NvcHk6IHRydWUsXG4gICAgLy8gaW50OCBkeW5hbWljLXF1YW50aXplZCBlbmNvZGVyICh+MTAwIE1CIHZzIH4xODAgTUIgZnAxNiwgSW9VIH4wLjk5IG9uIHRoZVxuICAgIC8vIHNhbml0eSB0ZXN0KS4gb25ueHJ1bnRpbWUtd2ViJ3MgV2ViR1BVIEVQIGRvZXNuJ3Qgc3VwcG9ydCBpbnQ4IG1hdG11bCwgc29cbiAgICAvLyBpdCBydW5zIG9uIFdBU00g4oCUIHNtYWxsZXIgZG93bmxvYWQsIHNsb3dlciBlbmNvZGUgdGhhbiB0aGUgZnAxNiBlbnRyeS5cbiAgICBlbmNvZGVyUHJvdmlkZXJzOiBbJ3dhc20nXSxcbiAgfSxcbl07XG5cbi8qKiBJbml0aWFsIGRlZmF1bHQgbW9kZWwgaWQgKG92ZXJyaWRkZW4gYXQgcnVudGltZSBvbmNlIHRoZSBob3N0IGNvbmZpZ3VyZXMgYVxuICogIGhvc3RlZCBtb2RlbCB2aWEge0BsaW5rIHNldFNhbU1vZGVsVXJsc30pLiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfU0FNX01PREVMX0lEID0gU0FNX01PREVMU1swXS5pZDtcblxuLyoqIFRoZSBhY3RpdmUgZGVmYXVsdCDigJQgdXBkYXRlZCB3aGVuIHRoZSBob3N0IGNvbmZpZ3VyZXMgYSBtb2RlbCdzIE9OTlggVVJMcyxcbiAqICBzbyB0aGUgdG9vbCB1c2VzIHRoZSBtb2RlbCB0aGF0J3MgYWN0dWFsbHkgaG9zdGVkIChub3QganVzdCB0aGUgZmlyc3QgZW50cnkpLiAqL1xubGV0IGFjdGl2ZURlZmF1bHRJZCA9IERFRkFVTFRfU0FNX01PREVMX0lEO1xuXG4vKiogTG9vayB1cCBhIG1vZGVsIGJ5IGlkOyBmYWxscyBiYWNrIHRvIHRoZSBhY3RpdmUgZGVmYXVsdCB3aGVuIGlkIGlzXG4gKiAgdW5rbm93bi9hYnNlbnQuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2FtTW9kZWwoaWQ/OiBzdHJpbmcpOiBTYW1Nb2RlbERlZiB7XG4gIGNvbnN0IHdhbnRlZCA9IGlkID8/IGFjdGl2ZURlZmF1bHRJZDtcbiAgcmV0dXJuIFNBTV9NT0RFTFMuZmluZCgobSkgPT4gbS5pZCA9PT0gd2FudGVkKSA/PyBTQU1fTU9ERUxTWzBdO1xufVxuXG4vKiogVGhlIGFjdGl2ZSBkZWZhdWx0IG1vZGVsIGlkICh3aGF0IHRoZSB0b29scy9waWNrZXIgdXNlIHdoZW4gdW5zZXQpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRTYW1Nb2RlbElkKCk6IHN0cmluZyB7XG4gIHJldHVybiBhY3RpdmVEZWZhdWx0SWQ7XG59XG5cbi8qKiBTZXQgdGhlIGFjdGl2ZSBkZWZhdWx0IG1vZGVsIGlkIChtdXN0IGJlIGEgcmVnaXN0ZXJlZCBtb2RlbCkuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RGVmYXVsdFNhbU1vZGVsKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKFNBTV9NT0RFTFMuc29tZSgobSkgPT4gbS5pZCA9PT0gaWQpKSBhY3RpdmVEZWZhdWx0SWQgPSBpZDtcbn1cblxuLyoqIFRydWUgd2hlbiBhIG1vZGVsIGhhcyBib3RoIE9OTlggVVJMcyBjb25maWd1cmVkIChpLmUuIGl0IGNhbiBhY3R1YWxseSBydW4pLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2FtTW9kZWxSZWFkeShtb2RlbDogU2FtTW9kZWxEZWYpOiBib29sZWFuIHtcbiAgcmV0dXJuICEhbW9kZWwuZW5jb2RlclVybCAmJiAhIW1vZGVsLmRlY29kZXJVcmw7XG59XG5cbi8qKlxuICogUG9pbnQgYSByZWdpc3RlcmVkIG1vZGVsIGF0IGl0cyBob3N0ZWQgT05OWCBwYWlyIChIRiAvIEdDUykuIENhbGxlZCBieSB0aGVcbiAqIGhvc3QncyBjb21wb3NpdGlvbiByb290IG9uY2UgaG9zdGluZyBpcyBkZWNpZGVkLCBrZWVwaW5nIGRlcGxveW1lbnQgVVJMcyBvdXRcbiAqIG9mIHRoZSBsaWJyYXJ5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0U2FtTW9kZWxVcmxzKGlkOiBzdHJpbmcsIGVuY29kZXJVcmw6IHN0cmluZywgZGVjb2RlclVybDogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnN0IG0gPSBTQU1fTU9ERUxTLmZpbmQoKHgpID0+IHguaWQgPT09IGlkKTtcbiAgaWYgKG0pIHtcbiAgICBtLmVuY29kZXJVcmwgPSBlbmNvZGVyVXJsO1xuICAgIG0uZGVjb2RlclVybCA9IGRlY29kZXJVcmw7XG4gICAgLy8gVGhlIGNvbmZpZ3VyZWQgKGhvc3RlZCkgbW9kZWwgYmVjb21lcyB0aGUgYWN0aXZlIGRlZmF1bHQsIHNvIHRoZSB0b29sc1xuICAgIC8vIHVzZSBpdCByYXRoZXIgdGhhbiB0aGUgZmlyc3QgcmVnaXN0cnkgZW50cnkgKHdoaWNoIG1heSBiZSB1bmhvc3RlZCkuXG4gICAgaWYgKGVuY29kZXJVcmwgJiYgZGVjb2RlclVybCkgYWN0aXZlRGVmYXVsdElkID0gaWQ7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -367,7 +367,7 @@ function getOrtWasmBase() {
|
|
|
367
367
|
}
|
|
368
368
|
|
|
369
369
|
/** Hosted cellpose-SAM ONNX (CPSAM, fp16). Override via {@link setModelUrl}. */
|
|
370
|
-
const DEFAULT_MODEL_URL = 'https://huggingface.co/
|
|
370
|
+
const DEFAULT_MODEL_URL = 'https://huggingface.co/jax-image-tools/cellpose-sam-onnx/resolve/main/cpsam_fp16.onnx';
|
|
371
371
|
/**
|
|
372
372
|
* Default in-library {@link ICellSegmenter} backed by cellpose-js (WebGPU/WASM
|
|
373
373
|
* ONNX) — so the toolbar's automatic **Cellpose** tool works out of the box in
|
|
@@ -698,8 +698,8 @@ const SAM_MODELS = [
|
|
|
698
698
|
{
|
|
699
699
|
id: 'microsam-vit-t-lm',
|
|
700
700
|
label: 'micro-sam ViT-T',
|
|
701
|
-
encoderUrl: 'https://huggingface.co/
|
|
702
|
-
decoderUrl: 'https://huggingface.co/
|
|
701
|
+
encoderUrl: 'https://huggingface.co/jax-image-tools/microsam-vit-t-lm-onnx/resolve/main/encoder.fp16.onnx',
|
|
702
|
+
decoderUrl: 'https://huggingface.co/jax-image-tools/microsam-vit-t-lm-onnx/resolve/main/decoder.onnx',
|
|
703
703
|
variant: 'sam1',
|
|
704
704
|
inputSize: 1024,
|
|
705
705
|
microscopy: true,
|
|
@@ -715,8 +715,8 @@ const SAM_MODELS = [
|
|
|
715
715
|
{
|
|
716
716
|
id: 'microsam-vit-b-lm',
|
|
717
717
|
label: 'micro-sam ViT-B',
|
|
718
|
-
encoderUrl: 'https://huggingface.co/
|
|
719
|
-
decoderUrl: 'https://huggingface.co/
|
|
718
|
+
encoderUrl: 'https://huggingface.co/jax-image-tools/microsam-vit-b-lm-onnx/resolve/main/encoder.fp16.onnx',
|
|
719
|
+
decoderUrl: 'https://huggingface.co/jax-image-tools/microsam-vit-b-lm-onnx/resolve/main/decoder.onnx',
|
|
720
720
|
variant: 'sam1',
|
|
721
721
|
inputSize: 1024,
|
|
722
722
|
microscopy: true,
|
|
@@ -724,8 +724,8 @@ const SAM_MODELS = [
|
|
|
724
724
|
{
|
|
725
725
|
id: 'patho-sam-vit-b',
|
|
726
726
|
label: 'patho-sam ViT-B',
|
|
727
|
-
encoderUrl: 'https://huggingface.co/
|
|
728
|
-
decoderUrl: 'https://huggingface.co/
|
|
727
|
+
encoderUrl: 'https://huggingface.co/jax-image-tools/patho-sam-vit-b-onnx/resolve/main/encoder.fp16.onnx',
|
|
728
|
+
decoderUrl: 'https://huggingface.co/jax-image-tools/patho-sam-vit-b-onnx/resolve/main/decoder.onnx',
|
|
729
729
|
variant: 'sam1',
|
|
730
730
|
inputSize: 1024,
|
|
731
731
|
microscopy: true,
|
|
@@ -733,8 +733,8 @@ const SAM_MODELS = [
|
|
|
733
733
|
{
|
|
734
734
|
id: 'patho-sam-vit-b-int8',
|
|
735
735
|
label: 'patho-sam ViT-B (int8)',
|
|
736
|
-
encoderUrl: 'https://huggingface.co/
|
|
737
|
-
decoderUrl: 'https://huggingface.co/
|
|
736
|
+
encoderUrl: 'https://huggingface.co/jax-image-tools/patho-sam-vit-b-onnx/resolve/main/encoder.int8.onnx',
|
|
737
|
+
decoderUrl: 'https://huggingface.co/jax-image-tools/patho-sam-vit-b-onnx/resolve/main/decoder.onnx',
|
|
738
738
|
variant: 'sam1',
|
|
739
739
|
inputSize: 1024,
|
|
740
740
|
microscopy: true,
|
|
@@ -1002,6 +1002,62 @@ class MultiPolygon {
|
|
|
1002
1002
|
this.polygons = [];
|
|
1003
1003
|
}
|
|
1004
1004
|
}
|
|
1005
|
+
/**
|
|
1006
|
+
* Rebuild a plain-object `bounds` as the class instance the renderers expect
|
|
1007
|
+
* (jit-ui#124).
|
|
1008
|
+
*
|
|
1009
|
+
* Regions that arrive as JSON — a host's server response, a `structuredClone`,
|
|
1010
|
+
* anything that has been through `JSON.parse` — carry a `bounds` that has the
|
|
1011
|
+
* right *fields* but not the right *prototype*. The renderers disagree about
|
|
1012
|
+
* whether that is acceptable: `Region.getShape()` (Plotly) and the napari
|
|
1013
|
+
* overlay duck-type the bounds, while the OpenSeadragon overlay discriminates
|
|
1014
|
+
* with `bounds instanceof Rectangle`. So a JSON region drew in Heatmap mode and
|
|
1015
|
+
* silently vanished in Image mode. `instanceof` also gates the store's own
|
|
1016
|
+
* geometry de-duplication, `moveRegion`, and the GeoJSON export — a JSON region
|
|
1017
|
+
* is undraggable and absent from a save in *every* mode.
|
|
1018
|
+
*
|
|
1019
|
+
* Rather than duck-type ~20 call sites, the store normalizes here on the way in,
|
|
1020
|
+
* so everything downstream can keep relying on `instanceof`. Values that are
|
|
1021
|
+
* already instances are returned **by reference**, untouched: overlays and tools
|
|
1022
|
+
* hold onto the bounds they created and mutate them in place during a drag.
|
|
1023
|
+
*/
|
|
1024
|
+
function hydrateBounds(bounds) {
|
|
1025
|
+
if (!bounds ||
|
|
1026
|
+
bounds instanceof Rectangle ||
|
|
1027
|
+
bounds instanceof Polygon ||
|
|
1028
|
+
bounds instanceof MultiPolygon) {
|
|
1029
|
+
return bounds;
|
|
1030
|
+
}
|
|
1031
|
+
if (Array.isArray(bounds.polygons)) {
|
|
1032
|
+
const multi = new MultiPolygon();
|
|
1033
|
+
multi.polygons = bounds.polygons.map((part) => hydratePolygon(part));
|
|
1034
|
+
return multi;
|
|
1035
|
+
}
|
|
1036
|
+
if ('npoints' in bounds || 'xpoints' in bounds) {
|
|
1037
|
+
return hydratePolygon(bounds);
|
|
1038
|
+
}
|
|
1039
|
+
if ('width' in bounds && 'height' in bounds) {
|
|
1040
|
+
return Object.assign(new Rectangle(), bounds);
|
|
1041
|
+
}
|
|
1042
|
+
// Nothing recognisable — hand it back rather than coerce it into the wrong
|
|
1043
|
+
// geometry. It renders nowhere either way, but a caller can still inspect it.
|
|
1044
|
+
return bounds;
|
|
1045
|
+
}
|
|
1046
|
+
/** {@link hydrateBounds} for one polygon, deriving the fields a lean serializer
|
|
1047
|
+
* omits: JIT's Java `PolygonSerializer` writes only `npoints`/`xpoints`/
|
|
1048
|
+
* `ypoints`, while the GeoJSON export reads `coordinates` and the overlays read
|
|
1049
|
+
* `closed`. */
|
|
1050
|
+
function hydratePolygon(raw) {
|
|
1051
|
+
if (raw instanceof Polygon)
|
|
1052
|
+
return raw;
|
|
1053
|
+
const polygon = Object.assign(new Polygon(), raw);
|
|
1054
|
+
polygon.xpoints = [...(raw.xpoints ?? [])];
|
|
1055
|
+
polygon.ypoints = [...(raw.ypoints ?? [])];
|
|
1056
|
+
polygon.npoints = raw.npoints ?? polygon.xpoints.length;
|
|
1057
|
+
polygon.coordinates = raw.coordinates ?? polygon.xpoints.map((x, i) => [x, polygon.ypoints[i]]);
|
|
1058
|
+
polygon.closed = raw.closed ?? true;
|
|
1059
|
+
return polygon;
|
|
1060
|
+
}
|
|
1005
1061
|
|
|
1006
1062
|
/**
|
|
1007
1063
|
* Preset annotation classes (jit-ui#70).
|
|
@@ -10359,6 +10415,10 @@ class RegionStore {
|
|
|
10359
10415
|
region.id = this.nextId++;
|
|
10360
10416
|
if (region.name == null)
|
|
10361
10417
|
region.name = `shape${region.id}`;
|
|
10418
|
+
// JSON in, class instances out — everything downstream (the overlays'
|
|
10419
|
+
// rendering, geometry de-dup, moveRegion, GeoJSON export) discriminates
|
|
10420
|
+
// the bounds with `instanceof` (jit-ui#124).
|
|
10421
|
+
region.bounds = hydrateBounds(region.bounds);
|
|
10362
10422
|
}
|
|
10363
10423
|
this.applyClassificationColors(regions);
|
|
10364
10424
|
this.isRegionSavedOn = isRegionSaveOn;
|
|
@@ -10511,6 +10571,7 @@ class RegionStore {
|
|
|
10511
10571
|
if (region.name == null)
|
|
10512
10572
|
region.name = `shape${region.id}`;
|
|
10513
10573
|
region.z = z;
|
|
10574
|
+
region.bounds = hydrateBounds(region.bounds); // jit-ui#124
|
|
10514
10575
|
}
|
|
10515
10576
|
this.applyClassificationColors(regions);
|
|
10516
10577
|
return regions.slice();
|
|
@@ -10762,6 +10823,7 @@ class RegionStore {
|
|
|
10762
10823
|
region.id = this.nextId++;
|
|
10763
10824
|
if (region.name == null)
|
|
10764
10825
|
region.name = `shape${region.id}`;
|
|
10826
|
+
region.bounds = hydrateBounds(region.bounds); // jit-ui#124
|
|
10765
10827
|
// A region drawn on a stack belongs to the slice currently displayed, so
|
|
10766
10828
|
// it saves/reloads on that slice (jit-ui#93). No-op for single-plane images
|
|
10767
10829
|
// (currentSliceZ stays 0).
|
|
@@ -22098,5 +22160,5 @@ function provideVisualization() {
|
|
|
22098
22160
|
* Generated bundle index. Do not edit.
|
|
22099
22161
|
*/
|
|
22100
22162
|
|
|
22101
|
-
export { ALL_TOOLBAR_TOOLS, CELL_SEGMENTER, CHANNEL_HISTOGRAM_API, CellposeSegmenterService, ChannelHistogramComponent, DEFAULT_FALLBACK_PALETTE, DEFAULT_SAM_MODEL_ID, HexColorPickerComponent, IMAGE_STATE_PORT, INSTANCE_SEGMENTER, ImageConverterService, LUT_COLORS, MultiPolygon, NAPARI_DECIMATE_OPTIONS, NAPARI_DEFAULT_DECIMATE, PLOT_TYPE_DESCRIPTORS, PREFERENCES_PORT, PlotType, Polygon, ProcessingImage, REGION_EDITOR_API, REGION_IO_PORT, Rectangle, Region, RegionEditorComponent, RoutingVisualizerService, SAM_MODELS, SEMANTIC_SEGMENTER, ShapeSelection, TILE_ACCESS_PORT, TOOLBAR_TOOLS, VISUALIZER, VIZ_CONFIG, ViewerFeature, VisualizationModule, VisualizerComponent, capabilitiesOf, cropImage, defaultPresetSet, getDefaultSamModelId, getOrtWasmBase, getPlotTypeDescriptor, getSamModel, isEmptyPresetSet, isNapari3d, isNapariIsosurface, isNapariScatter, isNapariScatter3d, isNapariSurface, isNapariVolume, isSamModelReady, isThreeDimensional, provideVisualization, setDefaultSamModel, setOrtWasmBase, setSamModelUrls, sortToolContributions, visibleToolContributions };
|
|
22163
|
+
export { ALL_TOOLBAR_TOOLS, CELL_SEGMENTER, CHANNEL_HISTOGRAM_API, CellposeSegmenterService, ChannelHistogramComponent, DEFAULT_FALLBACK_PALETTE, DEFAULT_SAM_MODEL_ID, HexColorPickerComponent, IMAGE_STATE_PORT, INSTANCE_SEGMENTER, ImageConverterService, LUT_COLORS, MultiPolygon, NAPARI_DECIMATE_OPTIONS, NAPARI_DEFAULT_DECIMATE, PLOT_TYPE_DESCRIPTORS, PREFERENCES_PORT, PlotType, Polygon, ProcessingImage, REGION_EDITOR_API, REGION_IO_PORT, Rectangle, Region, RegionEditorComponent, RoutingVisualizerService, SAM_MODELS, SEMANTIC_SEGMENTER, ShapeSelection, TILE_ACCESS_PORT, TOOLBAR_TOOLS, VISUALIZER, VIZ_CONFIG, ViewerFeature, VisualizationModule, VisualizerComponent, capabilitiesOf, cropImage, defaultPresetSet, getDefaultSamModelId, getOrtWasmBase, getPlotTypeDescriptor, getSamModel, hydrateBounds, isEmptyPresetSet, isNapari3d, isNapariIsosurface, isNapariScatter, isNapariScatter3d, isNapariSurface, isNapariVolume, isSamModelReady, isThreeDimensional, provideVisualization, setDefaultSamModel, setOrtWasmBase, setSamModelUrls, sortToolContributions, visibleToolContributions };
|
|
22102
22164
|
//# sourceMappingURL=jax-data-science-sci-image-visualizer.mjs.map
|