3.0.0
Global
- Ported CPA from Python 2 to Python 3.8.
- Updated GUI to wxPython 4.1.
- Updated several other dependencies to modern versions.
- New build system using PyInstaller and GitHub Actions.
- Java environment is now packed in with the builds and should be detected and used automatically.
- Added imageio as the new primary image loader. CPA will fall back to using bioformats for unsupported formats. This can be overridden using the new
force_bioformats
properties setting. - Properties file errors which prevent startup are now properly caught and displayed to the user.
- The tile loader now properly functions when used by multiple tools at the same time.
- Tiles showing a placeholder image are now marked with a "loading" icon.
- Image tile generation should now be more efficient.
- New update notification system, uses the GitHub api since the old server is long gone.
- Image controls (zoom/contrast) are now rate-limited to prevent excessive tile redrawing as the sliders are dragged.
- Revised some database calls to avoid re-generating tables on tileloader threads.
- Training set saving/loading now properly defaults to .csv format.
- Added "Test filter" button to the filter creation dialog.
New Tool: Dimensionality Reduction
- Can perform several dimensionality reduction methods (e.g. PCA, t-SNE) and display the results.
- Introduced "lasso" tool to aid in selecting and displaying objects of interest.
Image Gallery
- Images in the top pane are now rendered as tiles, rather than full size images which had to be scaled down.
- Removed remains of what looks like classifier code, since it's not possible to add sort bins to the image gallery.
Classifier
- New classifier type: Neural Network (sklearn MLPClassifier). Hidden layers can be customised by using the box where "number of rules to display" would otherwise be specified.
- Fixed other classifier types.
- Classifiers now support use of scalers to normalise data (with the exception of the FastGentleBoosting classifier). Scaling can be enabled/disabled using the "Advanced" menu. Scalers are enabled by default on classifier types which need them, and will be attached to exported model files as
model.scaler
. - Added "sequential" fetching mode, which will call objects in order from a selected filter. Useful for gathering all objects in a filter.
- Added "Sample with replacement" option to the "Advanced" menu. Disabled by default. When disabled CPA will stop fetching objects once every possible key has been used during that "Fetch" call.
- Added "Remove duplicates" button to the sort bin context menu. Will remove all duplicate tiles from that bin.
- When using the "Unclassified" bin, arrow keys can be used to select tiles, and number keys 1-9 can be used to assign objects to bins with the keyboard.
- You can now drag to select multiple tiles within a bin (start dragging on the classifier background, not a tile).
- When changing classes, Tiles are now detached from their original bin and attached to the new one, instead of being deleted and re-created. This allows bulk drag operations without excessive waiting times.
- Loading training sets is now substantially faster.
- "Set k-fold cross validation" setting for evaluation moved to the "Advanced" menu. Will default to 5, or the minimum training set class size if that's smaller.
- Evaluation figure windows are now labelled with the name of the classifier that generated them.
- Refactored parts of the object sampling functions to reduce database calls. In the majority of cases fetching objects should now be much faster. A properties setting has been added to revert to the old behaviour (
use_legacy_fetcher
). - "Score image" image display now properly shows classes, supports >10 classes and displays class counts next to their entries in the image control panel.
- "Score all" operations should now be significantly faster.
- Fixed progress dialogs for training and scoring.
- Prevented drag events from being registered when the mouse is moved only a few pixels.
Chart tools
- Gates can now be used in the classifier. N.B. in classifier mode, filters and gates are applied on a per-image basis. For gates drawn on objects the resulting filter will grab objects from any image which contained an object which passed the gate. It'll probably be possible to filter on objects in the future, but will require some more extensive revisions.
- Migrated to MatPlotLib 3 (fom 1.x).
- Made chart and gate appearence more consistent between platforms.
Table viewer
- Column sorting should now work properly.
- Opening a table no longer leaves a blank window behind.