glaskugel
(Themenstarter)
Anmeldungsdatum: 8. Juli 2010
Beiträge: 3453
|
Danke, ich habe es aber noch nicht kapiert, was da ausgewertet wird. Da gibt es also eine RR-Datei, die so aufgebaut ist: Phone timestamp;RR-interval [ms]
2022-05-21T00:09:02.954;598
2022-05-21T00:09:03.552;683
2022-05-21T00:09:04.235;625 Der Befehl erstellt daraus: 598
683
625 Ich verstehe noch nicht, wie daraus ein EKG dargestellt wird. Die ECG-Datei enthält:
Phone timestamp;sensor timestamp [ns];timestamp [ms];ecg [uV]
2022-05-21T00:09:06.049;599616942881127931;0.0;10440
2022-05-21T00:09:06.056;599616942888809130;7.681199;10344
2022-05-21T00:09:06.064;599616942896490329;15.362398;10250
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11180
Wohnort: München
|
glaskugel schrieb: Ich verstehe noch nicht, wie daraus ein EKG dargestellt wird.
Gar nicht - die HVR-Analyse von hHRV schaut für die Analyse auf den Abstand zwischen den R-Wellen der Pulsschläge. glaskugel schrieb: Die ECG-Datei enthält:
Phone timestamp;sensor timestamp [ns];timestamp [ms];ecg [uV]
2022-05-21T00:09:06.049;599616942881127931;0.0;10440
2022-05-21T00:09:06.056;599616942888809130;7.681199;10344
2022-05-21T00:09:06.064;599616942896490329;15.362398;10250
Ja, das sind die Werte, aus denen man ein EKG rekonstruieren kann - grob kann man daraus z.B. mit python3-pandas und python3-matplotlib z.B. so die EKG-Kurve zeichnen lassen:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 | #!/usr/bin/env python3
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
data = pd.read_csv(
'polar_sensor_logger_files\Polar_H10_AF7xxxxB_20220521_000903_ECG.txt',
sep=';', parse_dates=True, infer_datetime_format=True
)
data['ecg [mV]'] = data['ecg [uV]'] / 1000
data['timestamp [s]'] = data['timestamp [ms]'] / 1000
ax = data[['ecg [mV]', 'timestamp [s]']].plot(
x='timestamp [s]', y='ecg [mV]',
xlabel='time [s]', ylabel='mV',
lw=.75,
grid=True,
figsize=(500,5),
rot=45,
)
ax.set_xlim(xmin=0)
ax.grid(which='both', lw=0.1)
plt.savefig('ekg.svg')
|
|
glaskugel
(Themenstarter)
Anmeldungsdatum: 8. Juli 2010
Beiträge: 3453
|
Danke, ich werde mir das "langsam" ansehen und versuchen zu verstehen.
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11180
Wohnort: München
|
Das hier wäre ein einfacher EKG-Viewer mit Python und arcade - man kann mit dem Mausrad zoomen und mit Drag & Drop die Ansicht verschieben:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96 | #!/usr/bin/env python3
# ECG Viewer
import arcade
# Constants
SCREEN_WIDTH = 1920
SCREEN_HEIGHT = 720
SCREEN_TITLE = "ECG Viewer"
ECG_FILE = 'polar_sensor_logger_files\Polar_H10_AF7xxxxB_20220521_000903_ECG.txt'
class ECGViewer(arcade.Window):
"""
Main application class.
"""
ecg_pos = 0
y_scale = 300
BTN_LEFT = ':resources:onscreen_controls/flat_light/left.png'
BTN_RIGHT = ':resources:onscreen_controls/flat_light/right.png'
BTN_SCALE = 1
max_mV = 10
min_mV = -10
sample_invervalls_ms = []
ecg_data_mV = []
def __init__(self):
# Call the parent class and set up the window
super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_TITLE)
arcade.set_background_color(arcade.color.LICORICE)
with open(ECG_FILE) as f:
_ = next(f) # skip the header
for line in f:
ts, ts_ns, ts_ms, uV = line.strip().split(';')
self.ecg_data_mV.append(int(uV) / 1000)
self.sample_invervalls_ms.append(float(ts_ms))
self.max_mV = int(max(self.ecg_data_mV))
self.min_mV = int(min(self.ecg_data_mV))
def setup(self):
"""Set up the game here. Call this function to restart the game."""
pass
def nearest_multiple(self, n, base):
return base * round(n / base)
def on_draw(self):
"""Render the screen."""
self.clear()
# add the grid for mV
for y in range(self.min_mV, self.max_mV):
y_scaled = ((y) * self.y_scale + SCREEN_HEIGHT / 2)
arcade.draw_line(0, y_scaled, SCREEN_WIDTH, y_scaled, color=arcade.color.TROLLEY_GREY)
arcade.draw_text(f"{y} mV", 5, y_scaled, color=arcade.color.TROLLEY_GREY)
# add the grid for time
for x in range(
self.nearest_multiple(self.sample_invervalls_ms[self.ecg_pos], 100),
self.nearest_multiple(self.sample_invervalls_ms[self.ecg_pos + SCREEN_WIDTH], 100),
100
):
arcade.draw_line(x % SCREEN_WIDTH, 0, x % SCREEN_WIDTH, SCREEN_HEIGHT, color=arcade.color.TROLLEY_GREY)
arcade.draw_text("100 ms/div", SCREEN_WIDTH - 100, 32)
# draw the ecg
arcade.draw_line_strip([(x, y * self.y_scale + SCREEN_HEIGHT / 2) for x, y in enumerate(self.ecg_data_mV[self.ecg_pos:self.ecg_pos + SCREEN_WIDTH])], color=arcade.csscolor.AQUA, line_width=1)
def on_mouse_drag(self, x: int, y: int, dx: int, dy: int, buttons: int, modifiers: int):
self.ecg_pos = min(max(0, self.ecg_pos - dx), len(self.ecg_data_mV))
return super().on_mouse_drag(x, y, dx, dy, buttons, modifiers)
def on_mouse_scroll(self, x: int, y: int, scroll_x: int, scroll_y: int):
self.y_scale = min(max(10, self.y_scale + scroll_y * 10), 600)
return super().on_mouse_scroll(x, y, scroll_x, scroll_y)
def main():
"""Main function"""
window = ECGViewer()
window.setup()
arcade.run()
if __name__ == "__main__":
main()
|
Das sieht in Aktion dann so aus
|
glaskugel
(Themenstarter)
Anmeldungsdatum: 8. Juli 2010
Beiträge: 3453
|
Danke, hast du dir schon mal https://www.kubios.com/downloads/Kubios-HRV-Standard.pdf angesehen: Von der Webseite:
Kubios HRV Standard is a freeware heart rate variability (HRV) analysis software for non-commercial personal use. Supports RR data from HR monitors (Polar, Suunto, Garmin) Windows (7 SP1, 10 or 11), macOS (Mojave, Catalina or Big Sur), and Linux. 64-bit operating systems only. In order to run Kubios HRV Standard, you first need to acquire a free License key.
Doch dann wird Linux nicht mehr erwähnt.
Kubios HRV Standard
FREE
Kubios HRV Standard (ver. 3.5) for Windows (64-bit Win 7 SP1,10 or 11) or macOS (Mojave, Catalina or Big Sur). An individual license for personal, non-commercial use only.
Ich wollte es mir ansehen:
------------------------------------------------------------------
MATLAB Runtime version R2021a (9.10) is required to run Kubios HRV.
------------------------------------------------------------------
MATLAB Runtime was not found in the location
"/usr/local/MATLAB/MATLAB_Runtime/v910"
If you have installed MATLAB Runtime R2021a (9.10) in another location,
edit the Kubios HRV startup script
"/opt/Kubios/KubiosHRVStandard/run_kubioshrv.sh"
to point to the MATLAB Runtime R2021a (9.10) directory. Im Manual wird darauf hingewiesen, dass es genau diese Matlab-Version sein muss. Die Seite biete aber keinen Download für diese Matlab-Version an. Es gibt eine Reihe von Matlab-Paketen, fürchte aber, das ist nicht dabei was ich brauche. aptitude search matlab
p dynare-matlab - MATLAB-Unterstützung für Dynare
p libpdl-io-matlab-perl - PDL support to read/write Matlab format data files
p matlab-gdf - IO-Bibliothek für GDF (Matlab-Oberfläche)
p matlab-support - Integration lokaler MATLAB-Installationen in die Dis
p matlab-support-dev - helpers for packages building MATLAB toolboxes
p matlab2tikz - converter of Octave plots to TikZ figures (for integ
p r-cran-matlab - MATLAB emulation package Gefunden habe ich jetzt: https://de.mathworks.com/products/compiler/matlab-runtime.html Da werden 3.7G runtergeladen.
|
glaskugel
(Themenstarter)
Anmeldungsdatum: 8. Juli 2010
Beiträge: 3453
|
$ python /usr/local/bin/ekg-viewer.py
File "/usr/local/bin/ekg-viewer.py", line 64
arcade.draw_text(f"{y} mV", 5, y_scaled, color=arcade.color.TROLLEY_GREY)
^
SyntaxError: invalid syntax Davor: Die folgenden zusätzlichen Pakete werden installiert:
libjpeg-turbo8-dev libjpeg8-dev Ich bin da noch auf einem 20.04 PC, der in der nächsten Zeit auf 22.04 umgestellt wird. libopengl0:amd64 1.3.2-1~ubuntu0.20.04.2 ist installiert. ~# pip3 install arcade
Collecting arcade
Downloading arcade-2.6.14-py3-none-any.whl (39.3 MB)
|████████████████████████████████| 39.3 MB 10.0 MB/s
Collecting pillow~=9.1.1
Downloading Pillow-9.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.1 MB)
|████████████████████████████████| 3.1 MB 8.9 MB/s
Collecting pymunk~=6.2.1
Downloading pymunk-6.2.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (980 kB)
|████████████████████████████████| 980 kB 9.3 MB/s
Collecting pyglet==2.0.dev16
Downloading pyglet-2.0.dev16-py3-none-any.whl (959 kB)
|████████████████████████████████| 959 kB 8.7 MB/s
Collecting pytiled-parser==2.0.1
Downloading pytiled_parser-2.0.1-py3-none-any.whl (35 kB)
Collecting cffi>=1.15.0
Downloading cffi-1.15.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (446 kB)
|████████████████████████████████| 446 kB 9.0 MB/s
Requirement already satisfied: attrs>=18.2.0 in /usr/lib/python3/dist-packages (from pytiled-parser==2.0.1->arcade) (19.3.0)
Collecting typing-extensions
Downloading typing_extensions-4.2.0-py3-none-any.whl (24 kB)
Collecting pycparser
Downloading pycparser-2.21-py2.py3-none-any.whl (118 kB)
|████████████████████████████████| 118 kB 8.8 MB/s
Installing collected packages: pillow, pycparser, cffi, pymunk, pyglet, typing-extensions, pytiled-parser, arcade
Attempting uninstall: pillow
Found existing installation: Pillow 7.0.0
Not uninstalling pillow at /usr/lib/python3/dist-packages, outside environment /usr
Can't uninstall 'Pillow'. No files were found to uninstall.
Successfully installed arcade-2.6.14 cffi-1.15.0 pillow-9.1.1 pycparser-2.21 pyglet-2.0.dev16 pymunk-6.2.1 pytiled-parser-2.0.1 typing-extensions-4.2.0 Könntest du es vielleicht so anpassen, dass die zu analysierend Datei als Parameter übergeben wird. python /usr/local/bin/ekg-viewer.py polar_sensor_logger_files\Polar_H10_AF7xxxxB_20220521_000903_ECG.txt Der Backslash im Pfad ist richtig? Der Fehler bleibt, wenn man durch einen / ersetzt. Ich weiß jetzt nicht wie schwierig es ist, die verwendete Auflösung abzufragen, ich verwende meistens UHD 3840x2160, manchmal HD mit 1920x1080. Natürlich kann ich das auch manuell anpassen, zu 90% hat der Monitor UHD, aber 1x spielt die Grafikkarte nicht mit, hat nur 2MB und dann sind es effektiv nur max. 2560 x 1600
Kurzer Bericht zu Kubios, der davor erwähnte Mathlab-Download scheint zu funktionieren. Initializing the MATLAB Runtime.
Please be patient, this may take some time...
libGL error: MESA-LOADER: failed to open swrast: /usr/lib/dri/swrast_dri.so: Kann die Shared-Object-Datei nicht öffnen: Datei oder Verzeichnis nicht gefunden (search paths /usr/lib/x86_64-linux-gnu/dri:\$${ORIGIN}/dri:/usr/lib/dri, suffix _dri)
libGL error: failed to load driver: swrast
MCR initialization complete. Launching Kubios HRV Standard...
libGL error: MESA-LOADER: failed to open swrast: /usr/lib/dri/swrast_dri.so: Kann die Shared-Object-Datei nicht öffnen: Datei oder Verzeichnis nicht gefunden (search paths /usr/lib/x86_64-linux-gnu/dri:\$${ORIGIN}/dri:/usr/lib/dri, suffix _dri)
libGL error: failed to load driver: swrast
com.jogamp.opengl.GLException: X11GLXDrawableFactory - Could not initialize shared resources for X11GraphicsDevice[type .x11, connection :0.0, unitID 0, handle 0x0, owner false, ResourceToolkitLock[obj 0x7a6523d8, isOwner false, <5db6498a, fddc393>[count 0, qsz 0, owner <NULL>]]]
at jogamp.opengl.x11.glx.X11GLXDrawableFactory$SharedResourceImplementation.createSharedResource(X11GLXDrawableFactory.java:326)
at jogamp.opengl.SharedResourceRunner.run(SharedResourceRunner.java:297)
at java.lang.Thread.run(Thread.java:748)
Caused by: com.jogamp.opengl.GLException: AWT-EventQueue-0-SharedResourceRunner: Unable to create temp OpenGL context(1)
at jogamp.opengl.x11.glx.X11GLXContext.createImpl(X11GLXContext.java:368)
at jogamp.opengl.GLContextImpl.makeCurrentWithinLock(GLContextImpl.java:759)
at jogamp.opengl.GLContextImpl.makeCurrent(GLContextImpl.java:642)
at jogamp.opengl.GLContextImpl.makeCurrent(GLContextImpl.java:580)
at jogamp.opengl.x11.glx.X11GLXDrawableFactory$SharedResourceImplementation.createSharedResource(X11GLXDrawableFactory.java:297)
... 2 more
MATLAB has experienced a low-level graphics error, and may not have drawn correctly.
Read about what you can do to prevent this issue by running this command: opengl problems,
then restart MATLAB.
To share details of this issue with MathWorks technical support, please
include this file with your service request: /home/ab/jogl.ex.15923
Couldn't create JOGL canvas--using painters
Couldn't create JOGL canvas--using painters
Couldn't create JOGL canvas--using painters
Couldn't create JOGL canvas--using painters Da kommt von einem 20.04-PC: opengl problems
opengl: Befehl nicht gefunden. Die hochgeladenen Demo-Textdateien, werden nicht akzeptiert. Ich muss schauen, dass ich zu Original-Polar-Dateien komme, warhscheinlich am Donnerstag. Die Auswertungen, die die PDF-Datei zeigt, sehen schon sehr interessant aus, keine Ahnung, ob man dafür Premium braucht. Man muss sich auch für Linux registrieren, ist automatisiert und man muss für die Rechnung mit $0 eine Adresse angegeben. Möchte man mit einem anderen PC testen, wird man sich wahrscheinlich ein 2. Mal registrieren müssen.
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11180
Wohnort: München
|
Im Anhang ist eine aktualisierte Version des EKG-Viewers, man kann jetzt eine Datei mit EKG-Daten als Argument übergeben - der Viewer läuft jetzt im Vollbild und mit deutlich besserer Performance. Tastenbelegung:
Esc ,
Q : Programm beenden
einen kompletten Bildschirm weiter scrollen
Pos1 and den Anfang scrollen
Ende ans Ende scrollen
Bild ↑ zurückscrollen
Bild ↓ vorwärtsscrollen
glaskugel schrieb: $ python /usr/local/bin/ekg-viewer.py
File "/usr/local/bin/ekg-viewer.py", line 64
arcade.draw_text(f"{y} mV", 5, y_scaled, color=arcade.color.TROLLEY_GREY)
^
SyntaxError: invalid syntax
Kann ich mit der alten Version nicht nachvollziehen, aber da ich die Grids jetzt auf Texturen umgestellt habe, ist die Zeile nicht mehr im Code. Davor:
Installing collected packages: pillow, pycparser, cffi, pymunk, pyglet, typing-extensions, pytiled-parser, arcade
Attempting uninstall: pillow
Found existing installation: Pillow 7.0.0
Not uninstalling pillow at /usr/lib/python3/dist-packages, outside environment /usr
Can't uninstall 'Pillow'. No files were found to uninstall.
Successfully installed arcade-2.6.14 cffi-1.15.0 pillow-9.1.1 pycparser-2.21 pyglet-2.0.dev16 pymunk-6.2.1 pytiled-parser-2.0.1 typing-extensions-4.2.0
Ich würde da ein venv nutzen, statt die Python-Module systemweit zu installieren - das hat den Vorteil, dass sich dann die Versionen aus den Ubuntu-Paketquellen und die von arcade angeforderten Abhängigkeiten sich nicht in die Queere kommen. Zu dem Fehler mit der fehlenden /usr/lib/dri/swrast_dri.so: ist bei dir das Paket libgl1-mesa-dri installiert?
- ecg_viewer.py (7.7 KiB)
- Download ecg_viewer.py
|
glaskugel
(Themenstarter)
Anmeldungsdatum: 8. Juli 2010
Beiträge: 3453
|
Vielen Dank seahawk, du bist sehr kompetent und hilfsbereit! python /usr/local/bin/ecg_viewer.py /install/Polar_H10_AF7xxxxB_20220521_000903_ECG.txt
File "/usr/local/bin/ecg_viewer.py", line 55
self.max_mV: int = int(max(self.ecg_data_mV))
^
SyntaxError: invalid syntax Ich bin überzeugt, dass du es vorher probierst, liegt das jetzt an meinen Versionen? Geplant ist, dass ich meinen Haupt-PC in ca. 2 Monaten von 20.04 auf 22.04 umstelle, jetzt werden erstmal die anderen älteren PCs 22.04 getestet, die nicht so wichtig sind.
Ich würde da ein venv nutzen, statt die Python-Module systemweit zu installieren
Ich stell sowieso bald um und kann dann diese Variante verwenden. Es sollten aber alle User einfachst das Python-Skript aufrufen können.
Zu dem Fehler mit der fehlenden /usr/lib/dri/swrast_dri.so: ist bei dir das Paket libgl1-mesa-dri installiert?
~# apt install libgl1-mesa-dri
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.
Statusinformationen werden eingelesen.... Fertig
libgl1-mesa-dri ist schon die neueste Version (21.2.6-0ubuntu0.1~20.04.2).
0 aktualisiert, 0 neu installiert, 0 zu entfernen und 10 nicht aktualisiert.
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11180
Wohnort: München
|
glaskugel schrieb: Vielen Dank seahawk, du bist sehr kompetent und hilfsbereit! python /usr/local/bin/ecg_viewer.py /install/Polar_H10_AF7xxxxB_20220521_000903_ECG.txt
File "/usr/local/bin/ecg_viewer.py", line 55
self.max_mV: int = int(max(self.ecg_data_mV))
^
SyntaxError: invalid syntax Ich bin überzeugt, dass du es vorher probierst, liegt das jetzt an meinen Versionen?
Ja, ich habe das mit Python 3.10 (passend zu jammy) entwickelt und ausprobiert. Beim älteren Python 3.8, das bei Ubuntu 20.04 dabei ist, fehlen einige Dinge, die ich nutze und im Code von pyglet (das als Abhängigkeit von arcade installiert wird) musste ich für Python3.8 einen Type-Hint anpassen, damit Python3.8 er nicht meckert – da musste in der pyglet/input/evdev.py ca. Zeile 583 aus
| def get_controllers(self) -> list[Controller]:
return list(self._controllers.values())
|
das werden:
| # bei den Importen am Anfang der Datei:
from typing import List
# [...]
def get_controllers(self) -> List[Controller]:
return list(self._controllers.values())
|
Edit: die Änderung ist auch schon Upstream, im Diff sieht man das schöner: https://github.com/pyglet/pyglet/commit/63341c421ba2dcb55546801d02d98215bf4b4c83 Eine Version, die unter Python3.8 lauffähig sein sollte, ist im Anhang.
|
glaskugel
(Themenstarter)
Anmeldungsdatum: 8. Juli 2010
Beiträge: 3453
|
Edit: Zuerst, es funktioniert mit Jammy, war mein Syntax-Fehler, aber ich würde gerne aus meinem Fehler lernen. Der Befehl 'python' wurde nicht gefunden, meinten Sie:
Befehl 'python3' aus dem deb python3
Befehl 'python' aus dem deb python-is-python3 Ich hatte also vergessen das Skript über "python davor" aufzurufen, Das Skript wurde ausführbar gemacht. Ich muss es also so aufrufen, dann passt es: python3 /usr/local/bin/ecg_viewer.py /install/Polar_H10_AF7xxxxB_20220521_000903_ECG.txt Es ist in meiner Jammy-Installation also nicht klar, dass mit python python3 gemeint ist. Ein ausführbares Bash-Script kann ich direkt aufrufen. Zoomen funktioniert, im Detail schau ich es mir morgen an. Eine Version, die unter Python3.8 lauffähig sein sollte, ist im Anhang.
Sorry, ich sehe keinen Anhang.
da musste in der pyglet/input/evdev.py ca. Zeile 583 aus
Ich glaube, es ist einfacher, ich probiere es an einem Jammy-PC, also danke für die Anpassung, aber ich glaube die Mühe lohnt sich nicht und ich habe Angst, dass ich mir noch kurzfristig was kaputt mache. Vielleicht finde ich Zeit früher den Haupt-PC umzustellen, mit dem anderen neuen Jammy ist es für mich etwas umständlicher, aber das ist schon machbar, war mich nicht klar, dass es an meinem alten Python liegt. $ /usr/local/bin/ecg_viewer.py /install/Polar_H10_AF7xxxxB_20220521_000903_ECG.txt
/usr/bin/env: »python3\r“: Datei oder Verzeichnis nicht gefunden Das kommt bei deinem alten Skript, aber mit Jammy. Hier ist das was ich bei Python beim Jammy-PC installiert habe: dpkg -l | grep -i python
ii claws-mail-python-plugin:amd64 4.0.0-3 amd64 Python plugin and console for Claws Mail
ii cython3 0.29.28-1ubuntu3 amd64 C-Extensions for Python 3
ii gir1.2-osmgpsmap-1.0 1.2.0-1build1 amd64 GTK+ library to embed OpenStreetMap maps - Python bindings
ii hexchat-python3:amd64 2.16.0-4build1 amd64 Python 3 plugin for HexChat
ii ipython3 7.31.1-1 all Enhanced interactive Python 3 shell
ii libpython3-all-dev:amd64 3.10.4-0ubuntu2 amd64 package depending on all supported Python 3 development packages
ii libpython3-dev:amd64 3.10.4-0ubuntu2 amd64 header files and a static library for Python (default)
ii libpython3-stdlib:amd64 3.10.4-0ubuntu2 amd64 interactive high-level object-oriented language (default python3 version)
ii libpython3.10:amd64 3.10.4-3 amd64 Shared Python runtime library (version 3.10)
ii libpython3.10-dev:amd64 3.10.4-3 amd64 Header files and a static library for Python (v3.10)
ii libpython3.10-minimal:amd64 3.10.4-3 amd64 Minimal subset of the Python language (version 3.10)
ii libpython3.10-stdlib:amd64 3.10.4-3 amd64 Interactive high-level object-oriented language (standard library, version 3.10)
ii libreoffice-script-provider-python 1:7.3.3-0ubuntu0.22.04.1 all Python script support provider for LibreOffice scripting framework
ii numba-doc 0.55.1-0ubuntu2 all native machine code compiler for Python (docs)
ii python-apt-common 2.3.0ubuntu2 all Python interface to libapt-pkg (locales)
ii python-babel-localedata 2.8.0+dfsg.1-7 all tools for internationalizing Python applications - locale data files
ii python-matplotlib-data 3.5.1-2build1 all Python based plotting system (data package)
ii python-odf-doc 1.4.2-1 all documentation and examples for python-odf and python3-odf
ii python-odf-tools 1.4.2-1 all Python tools to manipulate OpenDocument files
ii python-tables-data 3.7.0-2build1 all hierarchical database for Python based on HDF5 - test data
ii python3 3.10.4-0ubuntu2 amd64 interactive high-level object-oriented language (default python3 version)
ii python3-all 3.10.4-0ubuntu2 amd64 package depending on all supported Python 3 runtime versions
ii python3-all-dev 3.10.4-0ubuntu2 amd64 package depending on all supported Python 3 development packages
ii python3-appdirs 1.4.4-2 all determining appropriate platform-specific directories (Python 3)
ii python3-apport 2.20.11-0ubuntu82.1 all Python 3 library for Apport crash report handling
ii python3-apptools 5.1.0-1 all ETS Application Tools (Python 3)
ii python3-apt 2.3.0ubuntu2 amd64 Python 3 interface to libapt-pkg
ii python3-aptdaemon 1.1.1+bzr982-0ubuntu39 all Python 3 module for the server and client of aptdaemon
ii python3-aptdaemon.gtk3widgets 1.1.1+bzr982-0ubuntu39 all Python 3 GTK+ 3 widgets to run an aptdaemon client
ii python3-attr 21.2.0-1 all Attributes without boilerplate (Python 3)
ii python3-autobahn 21.11.1+dfsg1-2build1 all WebSocket client and server library, WAMP framework - Python 3.x
ii python3-automat 20.2.0-1 all Self-service finite-state machines for the programmer on the go
ii python3-babel 2.8.0+dfsg.1-7 all tools for internationalizing Python applications - Python 3.x
ii python3-backcall 0.2.0-2 all Callback functions for Python
ii python3-base58 1.0.3-1.1 all base58 encode/decode for Python
ii python3-bcrypt 3.2.0-1build1 amd64 password hashing library for Python 3
ii python3-beniget 0.4.1-2 all collection of compile-time Python AST analyzers
ii python3-blinker 1.4+dfsg1-0.4 all fast, simple object-to-object and broadcast signaling library
ii python3-bottleneck 1.3.2+ds1-2build1 amd64 Fast NumPy array functions written in C (Python 3)
ii python3-brotli 1.0.9-2build6 amd64 lossless compression algorithm and format (Python 3 version)
ii python3-bs4 4.10.0-2 all error-tolerant HTML parser for Python 3
ii python3-cairo:amd64 1.20.1-3build1 amd64 Python3 bindings for the Cairo vector graphics library
ii python3-cbor 1.0.0-1.1build6 amd64 Python3 Implementation of RFC 7049. Concise Binary Object Representation (CBOR)
ii python3-certifi 2020.6.20-1 all root certificates for validating SSL certs and verifying TLS hosts (python3)
ii python3-cffi 1.15.0-1build2 all Foreign Function Interface for Python 3 calling C code
ii python3-cffi-backend:amd64 1.15.0-1build2 amd64 Foreign Function Interface for Python 3 calling C code - runtime
ii python3-chardet 4.0.0-1 all universal character encoding detector for Python3
ii python3-ci-info 0.2.0-2 all Python3 implementation of watson/ci-info
ii python3-click 8.0.3-1 all Wrapper around optparse for command line utilities - Python 3.x
ii python3-colorama 0.4.4-1 all Cross-platform colored terminal text in Python - Python 3.x
ii python3-commandnotfound 22.04.0 all Python 3 bindings for command-not-found.
ii python3-configobj 5.0.6-5 all simple but powerful config file reader and writer for Python 3
ii python3-constantly 15.1.0-2 all Symbolic constants in Python
ii python3-cryptography 3.4.8-1ubuntu2 amd64 Python library exposing cryptographic recipes and primitives (Python 3)
ii python3-cups:amd64 2.0.1-5build1 amd64 Python3 bindings for CUPS
ii python3-cupshelpers 1.5.16-0ubuntu3 all Python utility modules around the CUPS printing system
ii python3-cycler 0.11.0-1 all composable kwarg iterator (Python 3)
ii python3-dateutil 2.8.1-6 all powerful extensions to the standard Python 3 datetime module
ii python3-dbus 1.2.18-3build1 amd64 simple interprocess messaging system (Python 3 interface)
ii python3-debconf 1.5.79ubuntu1 all interact with debconf from Python 3
ii python3-debian 0.1.43ubuntu1 all Python 3 modules to work with Debian-related data formats
ii python3-decorator 4.4.2-0ubuntu1 all simplify usage of Python decorators by programmers
ii python3-defer 1.0.6-2.1ubuntu1 all Small framework for asynchronous programming (Python 3)
ii python3-defusedxml 0.7.1-1 all XML bomb protection for Python stdlib modules (for Python 3)
ii python3-dev 3.10.4-0ubuntu2 amd64 header files and a static library for Python (default)
ii python3-dipy 1.4.1-1build1 all Python library for the analysis of diffusion MRI datasets
ii python3-dipy-lib:amd64 1.4.1-1build1 amd64 Python library for the analysis of diffusion MRI datasets -- Python3 extensions
ii python3-distro 1.7.0-1 all Linux OS platform information API
ii python3-distro-info 1.1build1 all information about distributions' releases (Python 3 module)
ii python3-distupgrade 1:22.04.10 all manage release upgrades
ii python3-distutils 3.10.4-0ubuntu1 all distutils package for Python 3.x
ii python3-ecdsa 0.18.0~b1-1 all ECDSA cryptographic signature library (Python 3)
ii python3-envisage 6.0.1-1 all Extensible Application Framework
ii python3-et-xmlfile 1.0.1-2.1 all low memory library for creating large XML files (Python 3)
ii python3-etelemetry 0.3.0-1 all lightweight Python3 client to communicate with the etelemetry server
ii python3-eyed3 0.8.10-4 all Python module for id3-tags manipulation (Python 3 version)
ii python3-fasteners 0.14.1-2 all provides useful locks - Python 3.x
ii python3-filelock 3.6.0-1 all platform independent file locking module
ii python3-flatbuffers 1.12.1~git20200711.33e2d80+dfsg1-0.6 all efficient cross platform serialization library - Python bindings
ii python3-fonttools 4.29.1-2build1 amd64 Converts OpenType and TrueType fonts to and from XML (Python 3 Library)
ii python3-fs 2.4.12-1 all Python filesystem abstraction
ii python3-funcsigs 1.0.2-5 all function signatures from PEP362 - Python 3.x
ii python3-fuse 2:1.0.2-1build2 amd64 Python bindings for FUSE (Filesystems in USErspace) (Python 3 package)
ii python3-future 0.18.2-5 all Clean single-source support for Python 3 and 2 - Python 3.x
ii python3-gast 0.5.2-2 all compatibility layer for the AST of various Python versions (Python3 version)
ii python3-gdbm:amd64 3.10.4-0ubuntu1 amd64 GNU dbm database support for Python 3.x
ii python3-gi 3.42.0-3build1 amd64 Python 3 bindings for gobject-introspection libraries
ii python3-gi-cairo 3.42.0-3build1 amd64 Python 3 Cairo bindings for the GObject library
ii python3-gpxpy 1.5.0-1 all GPX file parser and GPS track manipulation library (Python 3)
ii python3-h5py 3.6.0-2build1 all general-purpose Python interface to hdf5
ii python3-h5py-serial 3.6.0-2build1 amd64 general-purpose Python interface to hdf5 (Python 3 serial)
ii python3-hamcrest 2.0.2-2 all Hamcrest framework for matcher objects (Python 3)
ii python3-html5lib 1.1-3 all HTML parser/tokenizer based on the WHATWG HTML5 specification
ii python3-httplib2 0.20.2-2 all comprehensive HTTP client library written for Python3
ii python3-hyperlink 21.0.0-3 all Immutable, Pythonic, correct URLs.
ii python3-idna 3.3-1 all Python IDNA2008 (RFC 5891) handling (Python 3)
ii python3-img2pdf 0.4.2-2 all Lossless conversion of raster images to PDF (library)
ii python3-importlib-metadata 4.6.4-1 all library to access the metadata for a Python package - Python 3.x
ii python3-incremental 21.3.0-1 all Library for versioning Python projects
ii python3-iniconfig 1.1.1-2 all brain-dead simple parsing of ini files
ii python3-ipython 7.31.1-1 all Enhanced interactive Python shell (Python 3 version)
ii python3-isodate 0.6.1-1 all ISO 8601 date/time/duration parser and formatter (Python 3 module)
ii python3-jdcal 1.0-1.3 all Julian dates from proleptic Gregorian and Julian calendars
ii python3-jedi 0.18.0-1 all autocompletion tool for Python 3
ii python3-jeepney 0.7.1-3 all pure Python D-Bus interface
ii python3-jinja2 3.0.3-1 all small but fast and easy to use stand-alone template engine
ii python3-joblib 0.17.0-4ubuntu1 all tools to provide lightweight pipelining in Python
ii python3-jwt 2.3.0-1 all Python 3 implementation of JSON Web Token
ii python3-keyring 23.5.0-1 all store and access your passwords safely
ii python3-kiwisolver 1.3.2-1build1 amd64 fast implementation of the Cassowary constraint solver - Python 3.X
ii python3-launchpadlib 1.10.16-1 all Launchpad web services client library (Python 3)
ii python3-lazr.restfulclient 0.14.4-1 all client for lazr.restful-based web services (Python 3)
ii python3-lazr.uri 1.0.6-2 all library for parsing, manipulating, and generating URIs
ii python3-ldb 2:2.4.2-0ubuntu1 amd64 Python 3 bindings for LDB
ii python3-lensfun 0.3.2-6 amd64 Lens Correction library - Python3 module
ii python3-lib2to3 3.10.4-0ubuntu1 all Interactive high-level object-oriented language (lib2to3)
ii python3-libdiscid 2.0.1-2build1 amd64 libdiscid binding for Python 3
ii python3-llvmlite 0.38.0-1 amd64 LLVM Python 3 binding for writing JIT compilers
ii python3-lxml:amd64 4.8.0-1build1 amd64 pythonic binding for the libxml2 and libxslt libraries
ii python3-lz4 3.1.3+dfsg-1build3 amd64 Python interface to the lz4 compression library (Python 3)
ii python3-magic 2:0.4.24-2 all python3 interface to the libmagic file type identification library
ii python3-mako 1.1.3+ds1-2 all fast and lightweight templating for the Python 3 platform
ii python3-markdown 3.3.6-1 all text-to-HTML conversion library/tool (Python 3 version)
ii python3-markupsafe 2.0.1-2build1 amd64 HTML/XHTML/XML string library
ii python3-matplotlib 3.5.1-2build1 amd64 Python based plotting system in a style similar to Matlab (Python 3)
ii python3-matplotlib-inline 0.1.3-1 all Matplotlib backend for inline use in IPython and Jupyter
ii python3-minimal 3.10.4-0ubuntu2 amd64 minimal subset of the Python language (default python3 version)
ii python3-mnemonic 0.19-1 all Implementation of Bitcoin BIP-0039 (Python 3)
ii python3-mock 4.0.3-3 all Mocking and Testing Library (Python3 version)
ii python3-monotonic 1.6-2 all implementation of time.monotonic() - Python 3.x
ii python3-more-itertools 8.10.0-2 all library with routines for operating on iterables, beyond itertools (Python 3)
ii python3-mpi4py 3.1.3-1build2 amd64 bindings of the Message Passing Interface (MPI) standard
ii python3-mpmath 1.2.1-2 all library for arbitrary-precision floating-point arithmetic (Python3)
ii python3-msgpack 1.0.3-1build1 amd64 Python 3 implementation of MessagePack format
ii python3-mutagen 1.45.1-2 all audio metadata editing library (Python 3)
ii python3-nacl 1.5.0-2 amd64 Python bindings to libsodium (Python 3)
ii python3-netifaces:amd64 0.11.0-1build2 amd64 portable network interface information - Python 3.x
ii python3-networkx 2.4-4ubuntu2 all tool to create, manipulate and study complex networks (Python3)
ii python3-nibabel 3.2.2-1 all Python3 bindings to various neuroimaging data formats
ii python3-nipy 0.5.0-2build1 all Analysis of structural and functional neuroimaging data
ii python3-nipy-lib:amd64 0.5.0-2build1 amd64 Analysis of structural and functional neuroimaging data (compiled modules)
ii python3-nipype 1.7.0-1 all Neuroimaging data analysis pipelines in Python3
ii python3-nitime 0.9-2 all timeseries analysis for neuroscience data (nitime)
ii python3-nose 1.3.7-8 all test discovery and running for Python3 unittest
ii python3-numba 0.55.1-0ubuntu2 amd64 native machine code compiler for Python 3
ii python3-numexpr 2.8.1-1build1 amd64 Fast numerical array expression evaluator for Python 3 and NumPy
ii python3-numpy 1:1.21.5-1build2 amd64 Fast array facility to the Python 3 language
ii python3-oauthlib 3.2.0-1 all generic, spec-compliant implementation of OAuth for Python3
ii python3-odf 1.4.2-1 all Python3 API to manipulate OpenDocument files
ii python3-odil 0.12.1-5build1 amd64 C++11 library for the DICOM standard (Python 3 wrappers)
ii python3-olefile 0.46-3 all Python module to read/write MS OLE2 files
ii python3-openpyxl 3.0.9-1 all Python 3 module to read/write OpenXML xlsx/xlsm files
ii python3-openssl 21.0.0-1 all Python 3 wrapper around the OpenSSL library
ii python3-packaging 21.3-1 all core utilities for python3 packages
ii python3-pandas 1.3.5+dfsg-3 all data structures for "relational" or "labeled" data
ii python3-pandas-lib:amd64 1.3.5+dfsg-3 amd64 low-level implementations and bindings for pandas
ii python3-parso 0.8.1-1 all Python parser that supports error recovery - Python 3.X
ii python3-passlib 1.7.4-1 all comprehensive password hashing framework
ii python3-pbr 5.8.0-0ubuntu1 all inject useful and sensible default behaviors into setuptools - Python 3.x
ii python3-pexpect 4.8.0-2ubuntu1 all Python 3 module for automating interactive applications
ii python3-pickleshare 0.7.5-5 all File system based database that uses Python pickles for Python 3
ii python3-pikepdf 5.0.1+dfsg-1 amd64 Python library to read and write PDFs with QPDF
ii python3-pil:amd64 9.0.1-1build1 amd64 Python Imaging Library (Python3)
ii python3-pil.imagetk:amd64 9.0.1-1build1 amd64 Python Imaging Library - ImageTk Module (Python3)
ii python3-pip 22.0.2+dfsg-1 all Python package installer
ii python3-pkg-resources 59.6.0-1.2 all Package Discovery and Resource Access using pkg_resources
ii python3-pluggy 0.13.0-7.1 all plugin and hook calling mechanisms for Python - 3.x
ii python3-ply 3.11-5 all Lex and Yacc implementation for Python3
ii python3-png 0.0.20+ds-3 all Pure Python PNG Reader/Writer (Python 3)
ii python3-problem-report 2.20.11-0ubuntu82.1 all Python 3 library to handle problem reports
ii python3-prompt-toolkit 3.0.28-1 all library for building interactive command lines (Python 3)
ii python3-prov 2.0.0-2 all W3C Provenance Data Model (Python 3)
ii python3-psutil 5.9.0-1build1 amd64 module providing convenience functions for managing processes (Python3)
ii python3-ptyprocess 0.7.0-3 all Run a subprocess in a pseudo terminal from Python 3
ii python3-py 1.10.0-1 all Advanced Python development support library (Python 3)
ii python3-pyasn1 0.4.8-1 all ASN.1 library for Python (Python 3 module)
ii python3-pyasn1-modules 0.2.1-1 all Collection of protocols modules written in ASN.1 language (Python 3)
ii python3-pycparser 2.21-1 all C parser in Python 3
ii python3-pycryptodome 3.11.0+dfsg1-3build1 amd64 cryptographic Python library (Python 3)
ii python3-pydicom 2.2.2-1 all DICOM medical file reading and writing (Python 3)
ii python3-pydot 1.4.2-1build1 all Python interface to Graphviz's dot (Python 3)
ii python3-pydotplus 2.0.2-3 all interface to Graphviz's Dot language - Python 3.x
ii python3-pyface 7.4.0-1 all traits-capable windowing framework
ii python3-pygments 2.11.2+dfsg-2 all syntax highlighting package written in Python 3
ii python3-pyparsing 2.4.7-1 all alternative to creating and executing simple grammars - Python 3.x
ii python3-pyqrcode 1.2.1-4 all Python 3 module to generate QR Codes
ii python3-pyqt5 5.15.6+dfsg-1ubuntu3 amd64 Python 3 bindings for Qt5
ii python3-pyqt5.qtmultimedia 5.15.6+dfsg-1ubuntu3 amd64 Python 3 bindings for Qt5's Multimedia module
ii python3-pyqt5.qtopengl 5.15.6+dfsg-1ubuntu3 amd64 Python 3 bindings for Qt5's OpenGL module
ii python3-pyqt5.qtsvg 5.15.6+dfsg-1ubuntu3 amd64 Python 3 bindings for Qt5's SVG module
ii python3-pyqt5.qtwebkit 5.15.6+dfsg-1ubuntu3 amd64 Python 3 bindings for Qt5's WebKit module
ii python3-pyqt5.sip 12.9.1-1build1 amd64 runtime module for Python extensions using SIP
ii python3-pytest 6.2.5-1ubuntu2 all Simple, powerful testing in Python3
ii python3-pythran 0.10.0+ds2-1 amd64 ahead of time compiler for Python
ii python3-pyxattr:amd64 0.7.2-2ubuntu2 amd64 module for manipulating filesystem extended attributes (Python3)
ii python3-pyxid 1.0-6 all interface for Cedrus XID and StimTracker devices
ii python3-rdflib 6.1.1-1 all Python 3 library containing an RDF triple store and RDF parsers/serializers
ii python3-renderpm:amd64 3.6.8-1 amd64 python low level render interface
ii python3-reportlab 3.6.8-1 all ReportLab library to create PDF documents using Python3
ii python3-reportlab-accel:amd64 3.6.8-1 amd64 C coded extension accelerator for the ReportLab Toolkit
ii python3-requests 2.25.1+dfsg-2 all elegant and simple HTTP library for Python3, built for human beings
ii python3-scipy 1.8.0-1exp2ubuntu1 amd64 scientific tools for Python 3
ii python3-scour 0.38.2-2 all SVG scrubber and optimizer (Python 3 module)
ii python3-secretstorage 3.3.1-1 all Python module for storing secrets - Python 3.x version
ii python3-serial 3.5-1 all pyserial - module encapsulating access for the serial port
ii python3-service-identity 18.1.0-6 all Service identity verification for pyOpenSSL (Python 3 module)
ii python3-setuptools 59.6.0-1.2 all Python3 Distutils Enhancements
ii python3-shapely 1.8.0-1build1 amd64 geometric objects, predicates, and operations (Python 3)
ii python3-simplejson 3.17.6-1build1 amd64 simple, fast, extensible JSON encoder/decoder for Python 3.x
ii python3-six 1.16.0-3ubuntu1 all Python 2 and 3 compatibility library (Python 3 interface)
ii python3-sklearn 0.23.2-5ubuntu6 all Python modules for machine learning and data mining - Python 3
ii python3-sklearn-lib:amd64 0.23.2-5ubuntu6 amd64 low-level implementations and bindings for scikit-learn - Python 3
ii python3-snappy 0.5.3-1.1build5 amd64 snappy compression library from Google - Python 3.x
ii python3-software-properties 0.99.22.1 all manage the repositories that you install software from
ii python3-sortedcontainers 2.1.0-2 all sorted container types: SortedList, SortedDict, and SortedSet (Python 3)
ii python3-soupsieve 2.3.1-1 all modern CSS selector implementation for BeautifulSoup (Python 3)
ii python3-sparqlwrapper 1.8.5-2 all SPARQL endpoint interface to Python3
ii python3-surfer 0.11.0-3 all visualize Freesurfer's data in Python3
ii python3-sympy 1.9-1 all Computer Algebra System (CAS) in Python (Python 3)
ii python3-systemd 234-3ubuntu2 amd64 Python 3 bindings for systemd
ii python3-tables 3.7.0-2build1 all hierarchical database for Python3 based on HDF5
ii python3-tables-lib 3.7.0-2build1 amd64 hierarchical database for Python3 based on HDF5 (extension)
ii python3-talloc:amd64 2.3.3-2build1 amd64 hierarchical pool based memory allocator - Python3 bindings
ii python3-threadpoolctl 3.1.0-1 all Python helpers for common threading libraries (BLAS, OpenMP)
ii python3-tifffile 20220209-1 all Read and write image data from and to TIFF files
ii python3-tk:amd64 3.10.4-0ubuntu1 amd64 Tkinter - Writing Tk applications with Python 3.x
ii python3-toml 0.10.2-1 all library for Tom's Obvious, Minimal Language - Python 3.x
ii python3-tqdm 4.57.0-2 all fast, extensible progress bar for Python 3 and CLI tool
ii python3-traitlets 5.1.1-1 all Lightweight Traits-like package for Python 3
ii python3-traits 6.3.2-1build1 amd64 Manifest typing and reactive programming for Python (Python 3)
ii python3-traitsui 7.2.1-1 all traits-capable user interfaces
ii python3-trie 0.4.0+ds-1 all Pure Python implementation of the trie data structure (Python 3)
ii python3-twisted 22.1.0-2ubuntu2.1 all Event-based framework for internet applications
ii python3-txaio 21.2.1-2 all compatibility API between asyncio/Twisted/Trollius - Python 3.x
ii python3-tz 2022.1-1 all Python3 version of the Olson timezone database
ii python3-u-msgpack 2.3.0-2 all Python3 MessagePack serializer and deserializer
ii python3-ubjson 0.16.1-2build1 amd64 Universal Binary JSON encoder/decoder for Python 3
ii python3-ufolib2 0.13.1+dfsg1-1 all Unified Font Object (UFO) fonts library
ii python3-ujson:amd64 5.1.0-1build1 amd64 ultra fast JSON encoder and decoder for Python 3
ii python3-unicodedata2 14.0.0+ds-8 amd64 Python unicodedata backport/updates
ii python3-uno 1:7.3.3-0ubuntu0.22.04.1 amd64 Python-UNO bridge
ii python3-update-manager 1:22.04.9 all python 3.x module for update-manager
ii python3-urllib3 1.26.5-1~exp1 all HTTP library with thread-safe connection pooling for Python3
ii python3-urwid 2.1.2-2build1 amd64 curses-based UI/widget library for Python 3
ii python3-vtk7 7.1.1+dfsg2-10.1build1 amd64 Python bindings for VTK
ii python3-wadllib 1.3.6-1 all Python 3 library for navigating WADL files
ii python3-wcwidth 0.2.5+dfsg1-1 all determine printable width of a string on a terminal
ii python3-webencodings 0.5.1-4 all Python implementation of the WHATWG Encoding standard
ii python3-websockets 9.1-1 all implementation of the WebSocket Protocol (RFC 6455)
ii python3-wheel 0.37.1-2 all built-package format for Python
ii python3-wsaccel 0.6.3-2build1 amd64 Accelerator for ws4py and AutobahnPython - Python 3.x
ii python3-wxgtk4.0 4.0.7+dfsg-13build1 amd64 Python 3 interface to the wxWidgets Cross-platform C++ GUI toolkit
ii python3-xcffib 0.11.1-2 all CFFI-based Python binding for X
ii python3-xkit 0.5.0ubuntu5 all library for the manipulation of xorg.conf files (Python 3)
ii python3-xlwt 1.3.0-3 all module for writing Microsoft Excel spreadsheet files - Python 3.x
ii python3-xvfbwrapper 0.2.9-2 all headless display inside Xvfb - Python 3.x
ii python3-yaml 5.4.1-1ubuntu1 amd64 YAML parser and emitter for Python3
ii python3-zipp 1.0.0-3 all pathlib-compatible Zipfile object wrapper - Python 3.x
ii python3-zope.interface 5.4.0-1build1 amd64 Interfaces for Python3
ii python3.10 3.10.4-3 amd64 Interactive high-level object-oriented language (version 3.10)
ii python3.10-dev 3.10.4-3 amd64 Header files and a static library for Python (v3.10)
ii python3.10-minimal 3.10.4-3 amd64 Minimal subset of the Python language (version 3.10)
|
glaskugel
(Themenstarter)
Anmeldungsdatum: 8. Juli 2010
Beiträge: 3453
|
Ich habe es jetzt geschafft, dass der ganze Rechner nicht mehr reagierte, nachdem ich mit dem Mausrad scrollte bis alle Daten sichtbar wurden, also alles sehr klein. Der Wechsel auf eine Konsole mit Strg-Alt brachte nur ein schwarzen Blinken, über F7 zurück ging nicht. Ich war aber auch vom 2o.o4-PC per ssh verbunden, damit ging ein reboot. Ähnliche Situation noch einmal, mit dem Mausrad gezoomt, den Mauszeiger sieht man noch und kann ihn bewegen, aber sonst reagiert nichts. Könnte man die Ausgabe in ein Fester geben, sodass man zB die Arbeitsfläche (vielleicht) wechseln kann und somit einen Befehl in einer Konsole ausführen kann. Ich muss mir zur Zeit via ssh helfen. System:
AMD FX(tm)-8320 Eight-Core Processor, 1409 MHz BenQ PD2700U nVidia GP108 [GeForce GT 1030] Nvidia 510.73.05-0ubuntu0.22.04.1
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11180
Wohnort: München
|
Mit 2560x1440 Auflösung habe ich mit einer GTX970 und einem Core i5-2500 keine Probleme das unter Jammy im Vollbild laufen zu lassen - das funktioniert sogar spürbar flotter als unter Windows. Ich habe das jetzt mal von dynamisch generierten Texturen für das Grid auf Objekte in einer ShapeElementList umgestellt und die Skalierung des Grids an die Sample-Rate angepasst (ist momentan noch statisch, scrollt also nicht mit), damit sollte er wesentlich weniger Zeit beim Starten brauchen und das Rendern geht ähnlich flott - die Version benötigt Python3.10. Man kann dem Skript außerdem mitgeben, ob es im Vollbild oder mit einer bestimmten Auflösung laufen soll: ./ecg_viewer.py -h
usage: ecg_viewer.py [-h] [-f] [-g GEOMETRY] ECG_FILE
view ECG Data exported by Polar Sensor Logger
positional arguments:
ECG_FILE
options:
-h, --help show this help message and exit
-f, --fullscreen start in fullscreen
-g GEOMETRY, --geometry GEOMETRY
resolution of the window as WIDTHxHEIGHT
Also z.B.
ecg_viewer.py -g 2560x512 polar_sensor_logger_files/Polar_H10_AF7xxxxB_20220521_000903_ECG.txt Edit: noch einen Fehler behoben, dass im Fullscreen nicht die volle Auflösung genutzt wird
Edit2: man kann jetzt die Größe des Fensters dynamisch verändern
- ecg_viewer.py (9.8 KiB)
- Download ecg_viewer.py
|
glaskugel
(Themenstarter)
Anmeldungsdatum: 8. Juli 2010
Beiträge: 3453
|
Danke dir, und bevor ich die neue Version ausprobiere ein Test mit der alten auf einem sehr alten PC unter Jammy. AMD Athlon(tm) II X2 255 Processor, 2400 MHz VIEWSONIC VX3211-4K nVidia GK208B [GeForce GT 730] Nvidia 470.129.06-0ubuntu0.22.04.1
Das Zoomen mit dem Mausrad funktioniert brauchbar schnell. Das Problem ist wie beim anderen Jammy-PC, dass es Probleme beim Erreichen des max. Zoom in oder out Probleme gibt, dieses Mal konnte ich beim Erreichen der Grenze aber weitermachen und beim Erreichen der anderen Grenze schmierte das Bild dann ab. In der Konsole stand: $ python3 /usr/local/bin/ecg_viewer.py /install/Polar_H10_AF7xxxxB_20220521_000903_ECG.txt
Traceback (most recent call last):
File "/usr/local/lib/python3.10/dist-packages/arcade/texture_atlas.py", line 318, in allocate
x, y = self._allocator.alloc(
File "/usr/local/lib/python3.10/dist-packages/pyglet/image/atlas.py", line 150, in alloc
raise AllocatorException('No more space in %r for box %dx%d' % (self, width, height))
pyglet.image.atlas.AllocatorException: No more space in <pyglet.image.atlas.Allocator object at 0x7f9c98bd5e00> for box 3842x2162
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/bin/ecg_viewer.py", line 216, in <module>
main()
File "/usr/local/bin/ecg_viewer.py", line 212, in main
arcade.run()
File "/usr/local/lib/python3.10/dist-packages/arcade/window_commands.py", line 289, in run
pyglet.app.run()
File "/usr/local/lib/python3.10/dist-packages/pyglet/app/__init__.py", line 107, in run
event_loop.run(interval)
File "/usr/local/lib/python3.10/dist-packages/pyglet/app/base.py", line 184, in run
timeout = self.idle()
File "/usr/local/lib/python3.10/dist-packages/pyglet/app/base.py", line 245, in idle
self.clock.call_scheduled_functions(dt)
File "/usr/local/lib/python3.10/dist-packages/pyglet/clock.py", line 277, in call_scheduled_functions
item.func(now - item.last_ts, *item.args, **item.kwargs)
File "/usr/local/lib/python3.10/dist-packages/pyglet/app/base.py", line 154, in _redraw_windows
window.dispatch_event('on_draw')
File "/usr/local/lib/python3.10/dist-packages/pyglet/window/__init__.py", line 1340, in dispatch_event
super().dispatch_event(*args)
File "/usr/local/lib/python3.10/dist-packages/pyglet/event.py", line 422, in dispatch_event
if getattr(self, event_type)(*args):
File "/usr/local/bin/ecg_viewer.py", line 134, in on_draw
self.v_texture.draw_sized(SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2, SCREEN_WIDTH, SCREEN_HEIGHT)
File "/usr/local/lib/python3.10/dist-packages/arcade/texture.py", line 293, in draw_sized
self._create_cached_sprite()
File "/usr/local/lib/python3.10/dist-packages/arcade/texture.py", line 283, in _create_cached_sprite
self._sprite_list.append(self._sprite)
File "/usr/local/lib/python3.10/dist-packages/arcade/sprite_list/sprite_list.py", line 606, in append
self._update_all(sprite)
File "/usr/local/lib/python3.10/dist-packages/arcade/sprite_list/sprite_list.py", line 935, in _update_all
tex_slot, _ = self._atlas.add(sprite._texture)
File "/usr/local/lib/python3.10/dist-packages/arcade/texture_atlas.py", line 292, in add
x, y, slot, region = self.allocate(texture)
File "/usr/local/lib/python3.10/dist-packages/arcade/texture_atlas.py", line 323, in allocate
raise AllocatorException(
pyglet.image.atlas.AllocatorException: No more space for texture voltage_20 size=(3840, 2160) Das alles nur als Hinweis, bevor ich die neue Version ausprobiere.
|
glaskugel
(Themenstarter)
Anmeldungsdatum: 8. Juli 2010
Beiträge: 3453
|
9316851-ecg_viewer.py hat auf beiden Jammy-PCs keine Probleme gemacht und ist flüssig. Super! Mir ist noch nicht klar, ob man das Bild horizontal spreizen kann, vertikal funktioniert über das Mausrad. Edit: Ich würde horizontales (links rechts) Spreizen mit dem Mausrad bevorzugen, iar aber nicht so wichtig, Hauptsache es funktioniert irgendwie. Vielleicht schreibst du in die Hilfe noch rein, dass die Daten mit "ECG Logger for Polar H10" von Matti Mononen erstellt wurden. Ich habe noch keine Daten von der Original-Polar-App zum Probieren. Melde mich dann. Sollte das Skript auch am Raspberry (ARM) laufen? Da läuft noch Xubuntu 20.04, Die Umstellung erfolgt erst, wenn ich viel Zeit habe, also nicht so schnell.
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11180
Wohnort: München
|
glaskugel schrieb: Mir ist noch nicht klar, ob man das Bild horizontal spreizen kann, vertikal funktioniert über das Mausrad.
Ich würde horizontales (links rechts) Spreizen mit dem Mausrad bevorzugen, iar aber nicht so wichtig, Hauptsache es funktioniert irgendwie.
Ich habe das mal eingebaut und die Tastenbelegung so angepasst:
man kann jetzt mit
+ und
- oder dem Mausrad die X-Achse zoomen. Die Grid-Linien werden jetzt in Abhängigkeit von der Zoom-Stufe ausgeblendet, damit das nicht zu dicht aussieht.
Bild ↑ /
Bild ↓ /
↑ /
↓ ändern den Zoom der Y-Achse (eine Stufe pro Tastendruck)
← /
→ scrollen das EKG nach links/rechts
geht eine Bildschirmseite weiter
Esc /
Q beenden das Programm
Sollte das Skript auch am Raspberry (ARM) laufen? Da läuft noch Xubuntu 20.04, Die Umstellung erfolgt erst, wenn ich viel Zeit habe, also nicht so schnell.
Theoretisch sollte das (mit Python 3.10) gehen, auch wenn der vermutlich früher oder später an die Grenzen eines Kernes stoßen wird - mit einem RPI4 könnte ich mir aber durchaus vorstellen, dass das brauchbar genug läuft, wenn die Fenstergröße nicht zu hoch ist. Edit: neuer Anhang mit Fix für das Ziehen des EKG bei aktiver Skalierung der X-Achse und Abwärtskompatibilität für Python3.8 aus focal - damit solltest du es auf dem Raspberry Pi ausprobieren können.
- ecg_viewer.py (11.7 KiB)
- Download ecg_viewer.py
|