spacr 0.1.16__tar.gz → 0.1.50__tar.gz
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.
- {spacr-0.1.16/spacr.egg-info → spacr-0.1.50}/PKG-INFO +2 -1
- {spacr-0.1.16 → spacr-0.1.50}/setup.py +7 -6
- {spacr-0.1.16 → spacr-0.1.50}/spacr/app_annotate.py +1 -1
- spacr-0.1.50/spacr/app_classify.py +8 -0
- {spacr-0.1.16 → spacr-0.1.50}/spacr/app_make_masks.py +1 -1
- {spacr-0.1.16 → spacr-0.1.50}/spacr/app_make_masks_v2.py +2 -2
- spacr-0.1.50/spacr/app_mask.py +8 -0
- spacr-0.1.50/spacr/app_measure.py +8 -0
- {spacr-0.1.16 → spacr-0.1.50}/spacr/deep_spacr.py +3 -1
- {spacr-0.1.16 → spacr-0.1.50}/spacr/gui.py +22 -13
- spacr-0.1.50/spacr/gui_utils.py +1525 -0
- {spacr-0.1.16 → spacr-0.1.50}/spacr/measure.py +24 -3
- {spacr-0.1.16 → spacr-0.1.50}/spacr/settings.py +13 -2
- {spacr-0.1.16 → spacr-0.1.50}/spacr/utils.py +59 -5
- {spacr-0.1.16 → spacr-0.1.50/spacr.egg-info}/PKG-INFO +2 -1
- spacr-0.1.50/spacr.egg-info/entry_points.txt +8 -0
- {spacr-0.1.16 → spacr-0.1.50}/spacr.egg-info/requires.txt +1 -0
- spacr-0.1.16/spacr/app_classify.py +0 -206
- spacr-0.1.16/spacr/app_mask.py +0 -253
- spacr-0.1.16/spacr/app_measure.py +0 -253
- spacr-0.1.16/spacr/gui_utils.py +0 -1205
- spacr-0.1.16/spacr.egg-info/entry_points.txt +0 -8
- {spacr-0.1.16 → spacr-0.1.50}/LICENSE +0 -0
- {spacr-0.1.16 → spacr-0.1.50}/MANIFEST.in +0 -0
- {spacr-0.1.16 → spacr-0.1.50}/README.rst +0 -0
- {spacr-0.1.16 → spacr-0.1.50}/setup.cfg +0 -0
- {spacr-0.1.16 → spacr-0.1.50}/spacr/__init__.py +0 -0
- {spacr-0.1.16 → spacr-0.1.50}/spacr/__main__.py +0 -0
- {spacr-0.1.16 → spacr-0.1.50}/spacr/chris.py +0 -0
- {spacr-0.1.16 → spacr-0.1.50}/spacr/core.py +0 -0
- {spacr-0.1.16 → spacr-0.1.50}/spacr/graph_learning.py +0 -0
- {spacr-0.1.16 → spacr-0.1.50}/spacr/io.py +0 -0
- {spacr-0.1.16 → spacr-0.1.50}/spacr/logger.py +0 -0
- {spacr-0.1.16 → spacr-0.1.50}/spacr/models/cp/toxo_plaque_cyto_e25000_X1120_Y1120.CP_model +0 -0
- {spacr-0.1.16 → spacr-0.1.50}/spacr/models/cp/toxo_plaque_cyto_e25000_X1120_Y1120.CP_model_settings.csv +0 -0
- {spacr-0.1.16 → spacr-0.1.50}/spacr/models/cp/toxo_pv_lumen.CP_model +0 -0
- {spacr-0.1.16 → spacr-0.1.50}/spacr/plot.py +0 -0
- {spacr-0.1.16 → spacr-0.1.50}/spacr/sequencing.py +0 -0
- {spacr-0.1.16 → spacr-0.1.50}/spacr/sim.py +0 -0
- {spacr-0.1.16 → spacr-0.1.50}/spacr/sim_app.py +0 -0
- {spacr-0.1.16 → spacr-0.1.50}/spacr/timelapse.py +0 -0
- {spacr-0.1.16 → spacr-0.1.50}/spacr/version.py +0 -0
- {spacr-0.1.16 → spacr-0.1.50}/spacr.egg-info/SOURCES.txt +0 -0
- {spacr-0.1.16 → spacr-0.1.50}/spacr.egg-info/dependency_links.txt +0 -0
- {spacr-0.1.16 → spacr-0.1.50}/spacr.egg-info/top_level.txt +0 -0
- {spacr-0.1.16 → spacr-0.1.50}/tests/test_annotate_app.py +0 -0
- {spacr-0.1.16 → spacr-0.1.50}/tests/test_core.py +0 -0
- {spacr-0.1.16 → spacr-0.1.50}/tests/test_gui_classify_app.py +0 -0
- {spacr-0.1.16 → spacr-0.1.50}/tests/test_gui_mask_app.py +0 -0
- {spacr-0.1.16 → spacr-0.1.50}/tests/test_gui_measure_app.py +0 -0
- {spacr-0.1.16 → spacr-0.1.50}/tests/test_gui_sim_app.py +0 -0
- {spacr-0.1.16 → spacr-0.1.50}/tests/test_gui_utils.py +0 -0
- {spacr-0.1.16 → spacr-0.1.50}/tests/test_io.py +0 -0
- {spacr-0.1.16 → spacr-0.1.50}/tests/test_mask_app.py +0 -0
- {spacr-0.1.16 → spacr-0.1.50}/tests/test_measure.py +0 -0
- {spacr-0.1.16 → spacr-0.1.50}/tests/test_plot.py +0 -0
- {spacr-0.1.16 → spacr-0.1.50}/tests/test_sim.py +0 -0
- {spacr-0.1.16 → spacr-0.1.50}/tests/test_timelapse.py +0 -0
- {spacr-0.1.16 → spacr-0.1.50}/tests/test_train.py +0 -0
- {spacr-0.1.16 → spacr-0.1.50}/tests/test_umap.py +0 -0
- {spacr-0.1.16 → spacr-0.1.50}/tests/test_utils.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: spacr
|
3
|
-
Version: 0.1.
|
3
|
+
Version: 0.1.50
|
4
4
|
Summary: Spatial phenotype analysis of crisp screens (SpaCr)
|
5
5
|
Home-page: https://github.com/EinarOlafsson/spacr
|
6
6
|
Author: Einar Birnir Olafsson
|
@@ -39,6 +39,7 @@ Requires-Dist: ttf_opensans>=2020.10.30
|
|
39
39
|
Requires-Dist: customtkinter<6.0,>=5.2.2
|
40
40
|
Requires-Dist: biopython<2.0,>=1.80
|
41
41
|
Requires-Dist: lxml<6.0,>=5.1.0
|
42
|
+
Requires-Dist: huggingface-hub<0.25,>=0.24.0
|
42
43
|
Provides-Extra: dev
|
43
44
|
Requires-Dist: pytest<3.11,>=3.9; extra == "dev"
|
44
45
|
Provides-Extra: headless
|
@@ -44,12 +44,13 @@ dependencies = [
|
|
44
44
|
'ttf_opensans>=2020.10.30',
|
45
45
|
'customtkinter>=5.2.2,<6.0',
|
46
46
|
'biopython>=1.80,<2.0',
|
47
|
-
'lxml>=5.1.0,<6.0'
|
47
|
+
'lxml>=5.1.0,<6.0',
|
48
|
+
'huggingface-hub>=0.24.0,<0.25'
|
48
49
|
]
|
49
50
|
|
50
51
|
setup(
|
51
52
|
name="spacr",
|
52
|
-
version="0.1.
|
53
|
+
version="0.1.50",
|
53
54
|
author="Einar Birnir Olafsson",
|
54
55
|
author_email="olafsson@med.umich.com",
|
55
56
|
description="Spatial phenotype analysis of crisp screens (SpaCr)",
|
@@ -61,11 +62,11 @@ setup(
|
|
61
62
|
install_requires=dependencies,
|
62
63
|
entry_points={
|
63
64
|
'console_scripts': [
|
64
|
-
'mask=spacr.app_mask:
|
65
|
-
'measure=spacr.app_measure:
|
66
|
-
'make_masks=spacr.
|
65
|
+
'mask=spacr.app_mask:start_mask_app',
|
66
|
+
'measure=spacr.app_measure:start_measure_app',
|
67
|
+
'make_masks=spacr.app_make_masks:gui_make_masks',
|
67
68
|
'annotate=spacr.app_annotate:gui_annotate',
|
68
|
-
'classify=spacr.app_classify:
|
69
|
+
'classify=spacr.app_classify:start_classify_app',
|
69
70
|
'sim=spacr.app_sim:gui_sim',
|
70
71
|
'spacr=spacr.gui:gui_app',
|
71
72
|
],
|
@@ -13,7 +13,7 @@ from IPython.display import display, HTML
|
|
13
13
|
from tkinter import font as tkFont
|
14
14
|
from tkinter import TclError
|
15
15
|
|
16
|
-
from .gui_utils import ScrollableFrame, CustomButton, set_dark_style,
|
16
|
+
from .gui_utils import ScrollableFrame, CustomButton, set_dark_style, create_menu_bar, set_default_font
|
17
17
|
|
18
18
|
class ImageApp:
|
19
19
|
def __init__(self, root, db_path, src, image_type=None, channels=None, grid_rows=None, grid_cols=None, image_size=(200, 200), annotation_column='annotate', normalize=False, percentiles=(1,99), measurement=None, threshold=None):
|
@@ -13,7 +13,7 @@ from ttkthemes import ThemedTk
|
|
13
13
|
|
14
14
|
from .logger import log_function_call
|
15
15
|
|
16
|
-
from .gui_utils import ScrollableFrame, CustomButton, set_dark_style,
|
16
|
+
from .gui_utils import ScrollableFrame, CustomButton, set_dark_style, create_menu_bar, set_default_font
|
17
17
|
|
18
18
|
class modify_masks:
|
19
19
|
|
@@ -13,7 +13,7 @@ from ttkthemes import ThemedTk
|
|
13
13
|
from pyqtgraph import GraphicsLayoutWidget, ViewBox, ImageItem, mkQApp
|
14
14
|
|
15
15
|
from .logger import log_function_call
|
16
|
-
from .gui_utils import ScrollableFrame, CustomButton, set_dark_style,
|
16
|
+
from .gui_utils import ScrollableFrame, CustomButton, set_dark_style, create_dark_mode, create_menu_bar, set_default_font
|
17
17
|
|
18
18
|
class ModifyMasks:
|
19
19
|
def __init__(self, root, folder_path, scale_factor):
|
@@ -635,7 +635,7 @@ def initiate_mask_app_root(width, height):
|
|
635
635
|
root = ThemedTk(theme=theme)
|
636
636
|
style = ttk.Style(root)
|
637
637
|
set_dark_style(style)
|
638
|
-
set_default_font(root, font_name="Arial", size=8)
|
638
|
+
#set_default_font(root, font_name="Arial", size=8)
|
639
639
|
root.geometry(f"{width}x{height}")
|
640
640
|
root.title("Mask App")
|
641
641
|
create_menu_bar(root)
|
@@ -10,6 +10,9 @@ import matplotlib.pyplot as plt
|
|
10
10
|
from PIL import Image
|
11
11
|
|
12
12
|
from .logger import log_function_call
|
13
|
+
from .utils import close_multiprocessing_processes, reset_mp
|
14
|
+
#reset_mp()
|
15
|
+
#close_multiprocessing_processes()
|
13
16
|
|
14
17
|
def evaluate_model_core(model, loader, loader_name, epoch, loss_type):
|
15
18
|
"""
|
@@ -42,7 +45,6 @@ def evaluate_model_core(model, loader, loader_name, epoch, loss_type):
|
|
42
45
|
for batch_idx, (data, target, _) in enumerate(loader, start=1):
|
43
46
|
start_time = time.time()
|
44
47
|
data, target = data.to(device), target.to(device).float()
|
45
|
-
#data, target = data.to(torch.float).to(device), target.to(device).float()
|
46
48
|
output = model(data)
|
47
49
|
loss += F.binary_cross_entropy_with_logits(output, target, reduction='sum').item()
|
48
50
|
loss = calculate_loss(output, target, loss_type=loss_type)
|
@@ -1,20 +1,15 @@
|
|
1
1
|
import tkinter as tk
|
2
2
|
from tkinter import ttk
|
3
|
-
from tkinter import font as tkFont
|
4
3
|
from PIL import Image, ImageTk
|
5
4
|
import os
|
6
5
|
import requests
|
7
|
-
|
8
|
-
|
9
|
-
from .app_mask import initiate_mask_root
|
10
|
-
from .app_measure import initiate_measure_root
|
6
|
+
from multiprocessing import set_start_method
|
7
|
+
from .gui_utils import set_dark_style, create_menu_bar, initiate_root
|
11
8
|
from .app_annotate import initiate_annotation_app_root
|
12
9
|
from .app_make_masks import initiate_mask_app_root
|
13
|
-
from .app_classify import initiate_classify_root
|
14
|
-
from .gui_utils import CustomButton, set_dark_style, create_menu_bar
|
15
10
|
|
16
11
|
class MainApp(tk.Tk):
|
17
|
-
def __init__(self):
|
12
|
+
def __init__(self, default_app=None):
|
18
13
|
super().__init__()
|
19
14
|
width = self.winfo_screenwidth()
|
20
15
|
height = self.winfo_screenheight()
|
@@ -25,16 +20,28 @@ class MainApp(tk.Tk):
|
|
25
20
|
set_dark_style(style)
|
26
21
|
|
27
22
|
self.gui_apps = {
|
28
|
-
"Mask": (
|
29
|
-
"Measure": (
|
23
|
+
"Mask": (lambda frame: initiate_root(frame, 'mask'), "Generate cellpose masks for cells, nuclei and pathogen images."),
|
24
|
+
"Measure": (lambda frame: initiate_root(frame, 'measure'), "Measure single object intensity and morphological feature. Crop and save single object image"),
|
30
25
|
"Annotate": (initiate_annotation_app_root, "Annotation single object images on a grid. Annotations are saved to database."),
|
31
26
|
"Make Masks": (initiate_mask_app_root, "Adjust pre-existing Cellpose models to your specific dataset for improved performance"),
|
32
|
-
"Classify": (
|
27
|
+
"Classify": (lambda frame: initiate_root(frame, 'classify'), "Train Torch Convolutional Neural Networks (CNNs) or Transformers to classify single object images.")
|
33
28
|
}
|
34
29
|
|
35
30
|
self.selected_app = tk.StringVar()
|
36
31
|
self.create_widgets()
|
37
32
|
|
33
|
+
|
34
|
+
if default_app == "Mask":
|
35
|
+
self.load_app(default_app, self.gui_apps[default_app][0])
|
36
|
+
elif default_app == "Measure":
|
37
|
+
self.load_app(default_app, self.gui_apps[default_app][1])
|
38
|
+
elif default_app == "Annotate":
|
39
|
+
self.load_app(default_app, self.gui_apps[default_app][2])
|
40
|
+
elif default_app == "Make Masks":
|
41
|
+
self.load_app(default_app, self.gui_apps[default_app][3])
|
42
|
+
elif default_app == "Classify":
|
43
|
+
self.load_app(default_app, self.gui_apps[default_app][4])
|
44
|
+
|
38
45
|
def create_widgets(self):
|
39
46
|
# Create the menu bar
|
40
47
|
create_menu_bar(self)
|
@@ -74,7 +81,8 @@ class MainApp(tk.Tk):
|
|
74
81
|
app_func, app_desc = app_data
|
75
82
|
|
76
83
|
# Create custom button with text
|
77
|
-
button = CustomButton(buttons_frame, text=app_name, command=lambda app_name=app_name, app_func=app_func: self.load_app(app_name, app_func), font=('Helvetica', 12))
|
84
|
+
#button = CustomButton(buttons_frame, text=app_name, command=lambda app_name=app_name, app_func=app_func: self.load_app(app_name, app_func), font=('Helvetica', 12))
|
85
|
+
button = ttk.Button(buttons_frame, text=app_name, command=lambda app_name=app_name, app_func=app_func: self.load_app(app_name, app_func), style='Custom.TButton')
|
78
86
|
button.grid(row=i, column=0, pady=10, padx=10, sticky="w")
|
79
87
|
|
80
88
|
description_label = tk.Label(buttons_frame, text=app_desc, bg="black", fg="white", wraplength=800, justify="left", font=('Helvetica', 12))
|
@@ -146,4 +154,5 @@ def gui_app():
|
|
146
154
|
app.mainloop()
|
147
155
|
|
148
156
|
if __name__ == "__main__":
|
149
|
-
|
157
|
+
set_start_method('spawn', force=True)
|
158
|
+
gui_app()
|