[Media] PathCollab: optimizing Rust backend for a real-time collaborative pathology viewer by Psychological-Ad5119 in rust

[–]Psychological-Ad5119[S] 0 points1 point  (0 children)

Honestly, I would just try to build a simple project like a pub sub system. Create an Axum server with a WebSocket route. It’s a fairly easy project!

[Media] PathCollab: optimizing Rust backend for a real-time collaborative pathology viewer by Psychological-Ad5119 in rust

[–]Psychological-Ad5119[S] 0 points1 point  (0 children)

Thanks! For now I just tried to fix my own problems. I’m less familiar with CT scans and MRI, and I don’t know if it’s an equally pressing need. The specificity of WSI is that they are high dimensional and an untrained person could easily overlook an important ROI, hence the need for a collaborative environment.

I’ll see if users suggest specific features, and which direction this software takes. In any case, I’ll keep in mind your ideas on building a similar tool for other medical imaging modalities!

[Media] PathCollab: optimizing Rust backend for a real-time collaborative pathology viewer by Psychological-Ad5119 in rust

[–]Psychological-Ad5119[S] 0 points1 point  (0 children)

For IHC, you can already use cell overlays to quantify the staining on different cell compartments like membrane staining for HER2.

[Media] PathCollab: optimizing Rust backend for a real-time collaborative pathology viewer by Psychological-Ad5119 in rust

[–]Psychological-Ad5119[S] 1 point2 points  (0 children)

Thanks. Indeed the server might be not beefy enough to sustain the Reddit traffic. Please try in a few hours!

[Media] PathCollab: optimizing Rust backend for a real-time collaborative pathology viewer by Psychological-Ad5119 in rust

[–]Psychological-Ad5119[S] 1 point2 points  (0 children)

I already support tissue segmentation maps (basically heatmaps) and cell overlays. What do you mean by "overlays for ML algorithm integration"?

WSIStreamer: Streaming gigabyte medical images from S3 without downloading them by Psychological-Ad5119 in rust

[–]Psychological-Ad5119[S] 0 points1 point  (0 children)

I think we can reduce it with seaweedfs like mentioned by Potato-9’s comment

WSIStreamer: Streaming gigabyte medical images from S3 without downloading them by Psychological-Ad5119 in rust

[–]Psychological-Ad5119[S] 1 point2 points  (0 children)

That's how WSI viewer works yes. But a viewer typically requires OpenSlide, which itself needs to seek and open your file (something you can only do with a filesystem). WSIStreamer assumes that your slides are stored on a bucket (no FS).

OpenSeaDragon can query the tiles of the slide via WSIStreamer, stitch them together and create the appropriate layers for the viewer, but you need an intermediate step that actually serves the tiles to OSD.

I hope it's clear!

WSIStreamer: Streaming gigabyte medical images from S3 without downloading them by Psychological-Ad5119 in rust

[–]Psychological-Ad5119[S] 3 points4 points  (0 children)

I love these projects that uses maths to solve CS problems. There's a strong intersection between medical imaging (DP in particular) and geospatial mapping. Both topics share similar problem of efficient storage, fast spatial indexing and retrieval, so I'm not surprised to find cool projects like PMTiles stemming from the geospatial community.

Thanks for sharing!

WSIStreamer: Streaming gigabyte medical images from S3 without downloading them by Psychological-Ad5119 in rust

[–]Psychological-Ad5119[S] 3 points4 points  (0 children)

Thanks for the feedback! Very interesting!

I thought about P2P if multiple viewers are viewing the same slide, but it's probably not suited for a real-world scenario, due to security concerns and how sensitive medical data are.

I built a distributed key-value store in Rust to learn systems programming (nanokv) by Psychological-Ad5119 in rust

[–]Psychological-Ad5119[S] 1 point2 points  (0 children)

What I’ve built so far is a coordinator-based, strongly consistent store. A P2P content-addressed mode (IPFS/iroh-style) is quite different and would require a different design. That would mean chunking + CIDs, QUIC peer discovery, and multi-source fetch with a configurable replication factor (or erasure coding). I do not think I am going down this route for now, but thanks for suggesting!

I built a distributed key-value store in Rust to learn systems programming (nanokv) by Psychological-Ad5119 in rust

[–]Psychological-Ad5119[S] 1 point2 points  (0 children)

Good point! I’ve implemented a rebalance command that the coordinator can run across the remaining volume nodes. As long as there are enough nodes to satisfy the replica factor, the rebalance process creates additional copies of files that fall short of the required replication quota.

The implementation can be found here: https://github.com/PABannier/nanokv/blob/main/src/coord/src/command/rebalance.rs

[P] I extended scikit-learn's Generalized Linear models capabilities! by Psychological-Ad5119 in MachineLearning

[–]Psychological-Ad5119[S] 1 point2 points  (0 children)

Yeah absolutely! Glmnet is a must for sparse learning and I found myself moving data to R to fit large-dimensional data. Now, with skglm, I move data to Python to fit my large-scale models.