ocactivity-gen 1.0.7__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.
Files changed (29) hide show
  1. ocactivity_gen-1.0.7/LICENSE +21 -0
  2. ocactivity_gen-1.0.7/PKG-INFO +246 -0
  3. ocactivity_gen-1.0.7/README.md +229 -0
  4. ocactivity_gen-1.0.7/pyproject.toml +39 -0
  5. ocactivity_gen-1.0.7/setup.cfg +4 -0
  6. ocactivity_gen-1.0.7/src/ocactivity_gen.egg-info/PKG-INFO +246 -0
  7. ocactivity_gen-1.0.7/src/ocactivity_gen.egg-info/SOURCES.txt +27 -0
  8. ocactivity_gen-1.0.7/src/ocactivity_gen.egg-info/dependency_links.txt +1 -0
  9. ocactivity_gen-1.0.7/src/ocactivity_gen.egg-info/entry_points.txt +2 -0
  10. ocactivity_gen-1.0.7/src/ocactivity_gen.egg-info/requires.txt +4 -0
  11. ocactivity_gen-1.0.7/src/ocactivity_gen.egg-info/top_level.txt +1 -0
  12. ocactivity_gen-1.0.7/src/pyactivity/__init__.py +34 -0
  13. ocactivity_gen-1.0.7/src/pyactivity/activity_generator.py +3230 -0
  14. ocactivity_gen-1.0.7/src/pyactivity/cli.py +9 -0
  15. ocactivity_gen-1.0.7/src/pyactivity/default_template.py +908 -0
  16. ocactivity_gen-1.0.7/src/pyactivity/fonts/DejaVuSans.ttf +0 -0
  17. ocactivity_gen-1.0.7/src/pyactivity/fonts/NotoColorEmoji.ttf +0 -0
  18. ocactivity_gen-1.0.7/src/pyactivity/fonts/NotoSansSymbols-Regular.ttf +0 -0
  19. ocactivity_gen-1.0.7/src/pyactivity/fonts/Oxanium-Regular.ttf +0 -0
  20. ocactivity_gen-1.0.7/src/pyactivity/fonts/arial.ttf +0 -0
  21. ocactivity_gen-1.0.7/src/pyactivity/fonts/seguiemj.ttf +0 -0
  22. ocactivity_gen-1.0.7/src/pyactivity/fonts/seguisb.ttf +0 -0
  23. ocactivity_gen-1.0.7/src/pyactivity/fonts/seguisym.ttf +0 -0
  24. ocactivity_gen-1.0.7/src/pyactivity/fonts/toxigenesis_bd.ttf +0 -0
  25. ocactivity_gen-1.0.7/src/pyactivity/modules/__init__.py +0 -0
  26. ocactivity_gen-1.0.7/src/pyactivity/modules/elevation_graph.py +774 -0
  27. ocactivity_gen-1.0.7/src/pyactivity/modules/file_analyzer.py +680 -0
  28. ocactivity_gen-1.0.7/src/pyactivity/static/background.jpg +0 -0
  29. ocactivity_gen-1.0.7/src/pyactivity/static/watermark.png +0 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Jiří Vik
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,246 @@
1
+ Metadata-Version: 2.4
2
+ Name: ocactivity-gen
3
+ Version: 1.0.7
4
+ Summary: Nástroj pro generování obrázků aktivity z GPX/FIT nebo dle vlastního zadání.
5
+ Author-email: Jiří Vik <mimic2300@gmail.com>
6
+ License-Expression: MIT
7
+ Project-URL: Repository, https://gitlab.com/OphiteCorp/pyactivity-generator
8
+ Keywords: mimic,ophitecorp,strava,activity,generator,gen,image
9
+ Requires-Python: >=3.14
10
+ Description-Content-Type: text/markdown
11
+ License-File: LICENSE
12
+ Requires-Dist: Pillow>=10.4.0
13
+ Requires-Dist: fitparse>=1.2.0
14
+ Requires-Dist: numpy>=2.1.0
15
+ Requires-Dist: rich>=13.9.0
16
+ Dynamic: license-file
17
+
18
+ # ocactivity-gen 🏃‍♂️🚴‍♀️🏔️
19
+
20
+ **ocactivity-gen** (`pyactivity`) je Python nástroj a konzolová aplikace pro generování estetických grafických kartogramů a vizualizací sportovních aktivit (běh, chůze, turistika, cyklistika apod.).
21
+
22
+ Dokáže zpracovat soubory **Garmin FIT** a **GPX**, extrahovat z nich metriky (vzdálenost, čas, tempo, rychlost, stoupání, klesání, tep, teplotu, kalorie, kroky) a vykreslit trasy na mapové podklady z OpenStreetMap/Mapy.com společně s výškovým profilem a statistikami.
23
+
24
+ ---
25
+
26
+ ## 🛠️ Hlavní funkce
27
+
28
+ - **Podpora Garmin FIT & GPX:** Automatické vytěžování telemetrie, GPS trasy a časových dat.
29
+ - **Inteligentní vyhlazování GPX:** Filtr GPS šumu pomocí 2D Kalmanova filtru.
30
+ - **Rychlá analýza dat:** Adaptivní prahy pohybů a hysterézní filtr převýšení pro přesný výpočet stoupání a času v pohybu.
31
+ - **Generování výškového profilu:** Graf nadmořské výšky.
32
+ - **Flexibilní mapa:** Stahování a kešování mapových dlaždic (OSM / Mapy.com) s automatickým přizpůsobením zoomu.
33
+ - **Dynamic Element Stacking:** Zobrazované statistiky se řadí dynamicky bez mezer i v případě, že některé metriky chybí.
34
+ - **Podpora vlastních fotek:** Možnost překrýt mapu vlastní fotografií na pozadí.
35
+ - **Vodoznak a EXIF metadata:** Vkládání loga/vodoznaku a zápis autorství do EXIF/PNG metadat.
36
+ - **Export obrázku:** Možnost exportovat jak do JPG, tak PNG.
37
+ - **Vlastní aktivita:** Možnost vytvoření úplně nové aktivity podle vstupních parametrů.
38
+
39
+ ---
40
+
41
+ ## 📦 Instalace
42
+
43
+ Aplikaci lze nainstalovat přímo z PyPI pomocí `pip`:
44
+
45
+ ```bash
46
+ pip install ocactivity-gen
47
+ ```
48
+
49
+ ---
50
+
51
+ ## 🚀 Použití z příkazové řádky (CLI)
52
+ Po instalaci je ihned k dispozici příkaz `ocactivity-gen`.
53
+
54
+ Příklady použití:
55
+ 1) Vygenerování obrázku z FIT souboru:
56
+ ```bash
57
+ ocactivity-gen -file "aktivity/zavod.fit" -name "Horský Ultra Běh 🏔️"
58
+ ```
59
+
60
+ 2) Vygenerování z GPX souboru s vlastní fotkou na pozadí:
61
+ ```bash
62
+ ocactivity-gen -file "vylet.gpx" -bg "moje_fotka.jpg" -name "Víkendová procházka" -out "vylet.png"
63
+ ```
64
+
65
+ 3) Ruční vytvoření aktivity bez datového souboru:
66
+ ```bash
67
+ ocactivity-gen -type "Běh" -distance 10500 -pace "4:45" -avgspeed "12.6" -ascent 250 -time 2980 -name "Ranní desítka"
68
+ ```
69
+
70
+ 4) Přepsání načtených hodnot z FIT souboru a skrytí grafu a teploty:
71
+ ```bash
72
+ ocactivity-gen -file "zavod.fit" -nograph -avgtemp -999 -name "Závod bez grafu a teploty"
73
+ ```
74
+
75
+ 5) Pokud je potřeba použít jiné mapové podklady, třeba mapy.com. Je dobré změnit i cache, aby se nepoužívali staré podklady.
76
+ ```bash
77
+ ocactivity-gen -file "activity.fit" -mapcache "mapy" -mapurl "https://api.mapy.cz/v1/maptiles/basic/256/{z}/{x}/{y}?apikey={YOUR_API_KEY}" -name "Nedělní výlet"
78
+ ```
79
+
80
+ 6) Více příkladů v help:
81
+ ```bash
82
+ ocactivity-gen -h
83
+ ```
84
+
85
+ ---
86
+
87
+ ## 🎛️ Přehled parametrů CLI
88
+ `-file` = Cesta k FIT nebo GPX souboru.\
89
+ `-bg` = Cesta k fotce na pozadí.\
90
+ `-name` = Název nebo popis aktivity.\
91
+ `-type` = Typ aktivity (např. "Běh", "Turistika").\
92
+ `-distance` = Vzdálenost v metrech.\
93
+ `-avgspeed` = Průměrná rychlost v km/h.\
94
+ `-maxspeed` = Maximální rychlost v km/h.\
95
+ `-pace` = Tempo v min/km (např. "4:30").\
96
+ `-ascent` = Stoupání v metrech.\
97
+ `-descent` = Klesání v metrech.\
98
+ `-time` = Čas v pohybu v sekundách.\
99
+ `-avghr` = Průměrná tepová frekvence (bpm).\
100
+ `-maxhr` = Maximální tepová frekvence (bpm).\
101
+ `-avgtemp` = Průměrná teplota (°C).\
102
+ `-maxtemp` = Maximální teplota (°C).\
103
+ `-kcal` = Spálené kalorie.\
104
+ `-steps` = Počet kroků.\
105
+ `-cdate` = Datum a čas spuštění aktivity ve formátu YYYY-MM-DD HH:MM:SS.\
106
+ `-fdate` = Datum a čas zastavení aktivity ve formátu YYYY-MM-DD HH:MM:SS.\
107
+ `-elapsedtime` = Celkový čas akvitity v sekundách včetně přestávek.\
108
+ `-idletime` = Součet času odpočinku nebo čekání v sekundách.\
109
+ `-nograph` = Vypne vykreslování grafu převýšení.\
110
+ `-nogpx` = Vypne vykreslování trasy na mapě.\
111
+ `-grayscale` = Použije na pozadí částečný černobilý efekt, aby se snížila intenzita barev.\
112
+ `-kmstep` = Nastaví vzdálenost v kilometrech mezi značkami na trase.\
113
+ `-lang` = Nastaví lokalizaci popisků (CZ, EN).\
114
+ `-out` = Cílová cesta pro uložení výsledku (.jpg / .png).\
115
+ `-mapurl` = URL adresa pro mapové podklady.\
116
+ `-mapcache` = Název cache adresáře do kterého se budou ukládat mapové dlaždice.\
117
+
118
+ ---
119
+
120
+ ## 🐍 Použití v kódu
121
+ Díky modularitě lze knihovnu importovat do vlastního Python skriptu:
122
+ #### A) Podobný styl obrázku, který je generován nativně:
123
+ - Vlastní definice metrik (parametry aktivity).
124
+ ```python
125
+ from pyactivity import (
126
+ ActivityGenerator,
127
+ ActivityMetrics,
128
+ ActivityParser,
129
+ ElementStyle,
130
+ ElevationGraphConfig,
131
+ GeneratorConfig,
132
+ GPXConfig,
133
+ WatermarkConfig,
134
+ create_element,
135
+ default_viewport_callback,
136
+ format_activity_type,
137
+ )
138
+
139
+ # Vytvoření metrik
140
+ metrics = ActivityMetrics(
141
+ name="Nedělní procházka",
142
+ activity_type="Chůze",
143
+ distance=12345, # Metry (12.3 km)
144
+ moving_time=7173 # Sekundy (1h 59m 33s)
145
+ )
146
+
147
+ # Sestavení konfigurace a generátoru
148
+ config = GeneratorConfig(
149
+ # Vlastní konfigurace GPX trasy
150
+ gpx=GPXConfig(),
151
+ # Vlastní konfigurace vodoznaku
152
+ watermark=WatermarkConfig(),
153
+ # Vykreslení prvků na obrázek
154
+ # Název klíče musí odpovídat atributu v metrice!
155
+ # Pokud je potřeba vlastní element, tak musí začínat prefixem: custom_
156
+ elements={
157
+ # Název aktivity
158
+ "name": ElementStyle(
159
+ is_absolute=True,
160
+ value_pos=(360, 1180),
161
+ value_font_size=40,
162
+ auto_shrink=True, # Když bude text dlouhý, tak se začne změnšovat
163
+ value_color=(255, 255, 255, 255)
164
+ ),
165
+ # Typ aktivity
166
+ "activity_type": create_element("Aktivita"),
167
+ "custom_activity_type_marker": create_element(
168
+ "🎯",
169
+ is_absolute=True,
170
+ take_pos_y_from_prev_label=True
171
+ ),
172
+ # Vzdálenost
173
+ "distance": create_element("Vzdálenost"),
174
+ "custom_distance_marker": create_element(
175
+ "📍",
176
+ is_absolute=True,
177
+ take_pos_y_from_prev_label=True
178
+ ),
179
+ # Čas pohybu
180
+ "moving_time": create_element("Čas"),
181
+ "custom_moving_time_marker": create_element(
182
+ "🕒",
183
+ is_absolute=True,
184
+ take_pos_y_from_prev_label=True
185
+ )
186
+ }
187
+ )
188
+
189
+ # Uložení obrázku
190
+ generator = ActivityGenerator(metrics=metrics, config=config)
191
+ generator.save(output_path="vystup.jpg", quality=90)
192
+ ```
193
+ #### B) Načtení vlastního FIT souboru:
194
+ - Bude použit stejný kód jako v bodě (A), ale musí se udělat několik úprav.
195
+ ##### Přidání mapování typu aktivity:
196
+ Protože FIT soubor má vlastní typy, tak se hodnoty musí přemapovat na vlastní název.
197
+ ```python
198
+ ACTIVITY_MAPPING: dict[str | None, str] = {
199
+ "walk": "Chůze",
200
+ "walking": "Chůze",
201
+ "run": "Běh",
202
+ "running": "Běh"
203
+ }
204
+ ```
205
+ ##### Načtení FIT souboru a metrik:
206
+ Místo vytvoření vlastních metrik je načteme z FIT souboru.
207
+ ```python
208
+ # Načtení FIT souboru a těžba dat
209
+ fit_file = Path("activity.fit")
210
+ fit_data = ActivityParser().parse_fit(fit_file)
211
+
212
+ # Získání metrik s možností je přepsat
213
+ metrics = fit_data.metrics
214
+ metrics.name = "Název aktivity" # FIT neobsahuje název
215
+ ```
216
+ ##### Úprava konfigurace - GeneratorConfig:
217
+ Do `GeneratorConfig` přidáme následující konfiguraci.
218
+ ```python
219
+ # Obecná konfigurace
220
+ edge_vignette=False, # Okraje obrázku nebudou mít gradient
221
+ elevation_graph_enabled=True, # Vygeneruje graf převýšení
222
+ # Konfigurace GPX trasy
223
+ gpx=GPXConfig(
224
+ gpx_enabled=True, # Povolí vykreslení trasy
225
+ gpx_path=fit_file, # Může být GPX i FIT
226
+ gpx_points=fit_data.gpx_points, # Musí být vždy
227
+ gpx_points_with_elev=fit_data.gpx_points_with_elev, # Pouze pro FIT, protože GPX nemá převýšení
228
+ viewport=default_viewport_callback, # Pokud se generuje i graf převýšení, tak je dobré použít vlastní viewport
229
+ show_start_finish=True, # Vykreslí začátek a konec trasy
230
+ show_km_markers=True # Vykreslí kilometrové značky na trase
231
+ ),
232
+ # Konfigurace grafu převýšení (pouze pro FIT)
233
+ elevation=ElevationGraphConfig(
234
+ show_bubble_interval=True, # Značky každých N-km
235
+ show_bubble_extreme=True # Značka na nejvyšším a nejnižším místě
236
+ ),
237
+ ```
238
+ ##### Úprava activity_type v elements:
239
+ Aby bylo možné použít vlastní mapování pro typ aktivity, tak musíme přidat mapper.
240
+ ```python
241
+ "activity_type": create_element(
242
+ "Aktivita",
243
+ formatter=lambda _cfg, _met, val: format_activity_type(val, ACTIVITY_MAPPING),
244
+ ),
245
+ ```
246
+ Celkové toho nastavení je mnoho. Tady je použit pouze nutný výčet a nějaké nice-to-have. Často je možné nastavit vše, od pozice, barvy, různých hodnot. Stačí projít konfigurační objekty.
@@ -0,0 +1,229 @@
1
+ # ocactivity-gen 🏃‍♂️🚴‍♀️🏔️
2
+
3
+ **ocactivity-gen** (`pyactivity`) je Python nástroj a konzolová aplikace pro generování estetických grafických kartogramů a vizualizací sportovních aktivit (běh, chůze, turistika, cyklistika apod.).
4
+
5
+ Dokáže zpracovat soubory **Garmin FIT** a **GPX**, extrahovat z nich metriky (vzdálenost, čas, tempo, rychlost, stoupání, klesání, tep, teplotu, kalorie, kroky) a vykreslit trasy na mapové podklady z OpenStreetMap/Mapy.com společně s výškovým profilem a statistikami.
6
+
7
+ ---
8
+
9
+ ## 🛠️ Hlavní funkce
10
+
11
+ - **Podpora Garmin FIT & GPX:** Automatické vytěžování telemetrie, GPS trasy a časových dat.
12
+ - **Inteligentní vyhlazování GPX:** Filtr GPS šumu pomocí 2D Kalmanova filtru.
13
+ - **Rychlá analýza dat:** Adaptivní prahy pohybů a hysterézní filtr převýšení pro přesný výpočet stoupání a času v pohybu.
14
+ - **Generování výškového profilu:** Graf nadmořské výšky.
15
+ - **Flexibilní mapa:** Stahování a kešování mapových dlaždic (OSM / Mapy.com) s automatickým přizpůsobením zoomu.
16
+ - **Dynamic Element Stacking:** Zobrazované statistiky se řadí dynamicky bez mezer i v případě, že některé metriky chybí.
17
+ - **Podpora vlastních fotek:** Možnost překrýt mapu vlastní fotografií na pozadí.
18
+ - **Vodoznak a EXIF metadata:** Vkládání loga/vodoznaku a zápis autorství do EXIF/PNG metadat.
19
+ - **Export obrázku:** Možnost exportovat jak do JPG, tak PNG.
20
+ - **Vlastní aktivita:** Možnost vytvoření úplně nové aktivity podle vstupních parametrů.
21
+
22
+ ---
23
+
24
+ ## 📦 Instalace
25
+
26
+ Aplikaci lze nainstalovat přímo z PyPI pomocí `pip`:
27
+
28
+ ```bash
29
+ pip install ocactivity-gen
30
+ ```
31
+
32
+ ---
33
+
34
+ ## 🚀 Použití z příkazové řádky (CLI)
35
+ Po instalaci je ihned k dispozici příkaz `ocactivity-gen`.
36
+
37
+ Příklady použití:
38
+ 1) Vygenerování obrázku z FIT souboru:
39
+ ```bash
40
+ ocactivity-gen -file "aktivity/zavod.fit" -name "Horský Ultra Běh 🏔️"
41
+ ```
42
+
43
+ 2) Vygenerování z GPX souboru s vlastní fotkou na pozadí:
44
+ ```bash
45
+ ocactivity-gen -file "vylet.gpx" -bg "moje_fotka.jpg" -name "Víkendová procházka" -out "vylet.png"
46
+ ```
47
+
48
+ 3) Ruční vytvoření aktivity bez datového souboru:
49
+ ```bash
50
+ ocactivity-gen -type "Běh" -distance 10500 -pace "4:45" -avgspeed "12.6" -ascent 250 -time 2980 -name "Ranní desítka"
51
+ ```
52
+
53
+ 4) Přepsání načtených hodnot z FIT souboru a skrytí grafu a teploty:
54
+ ```bash
55
+ ocactivity-gen -file "zavod.fit" -nograph -avgtemp -999 -name "Závod bez grafu a teploty"
56
+ ```
57
+
58
+ 5) Pokud je potřeba použít jiné mapové podklady, třeba mapy.com. Je dobré změnit i cache, aby se nepoužívali staré podklady.
59
+ ```bash
60
+ ocactivity-gen -file "activity.fit" -mapcache "mapy" -mapurl "https://api.mapy.cz/v1/maptiles/basic/256/{z}/{x}/{y}?apikey={YOUR_API_KEY}" -name "Nedělní výlet"
61
+ ```
62
+
63
+ 6) Více příkladů v help:
64
+ ```bash
65
+ ocactivity-gen -h
66
+ ```
67
+
68
+ ---
69
+
70
+ ## 🎛️ Přehled parametrů CLI
71
+ `-file` = Cesta k FIT nebo GPX souboru.\
72
+ `-bg` = Cesta k fotce na pozadí.\
73
+ `-name` = Název nebo popis aktivity.\
74
+ `-type` = Typ aktivity (např. "Běh", "Turistika").\
75
+ `-distance` = Vzdálenost v metrech.\
76
+ `-avgspeed` = Průměrná rychlost v km/h.\
77
+ `-maxspeed` = Maximální rychlost v km/h.\
78
+ `-pace` = Tempo v min/km (např. "4:30").\
79
+ `-ascent` = Stoupání v metrech.\
80
+ `-descent` = Klesání v metrech.\
81
+ `-time` = Čas v pohybu v sekundách.\
82
+ `-avghr` = Průměrná tepová frekvence (bpm).\
83
+ `-maxhr` = Maximální tepová frekvence (bpm).\
84
+ `-avgtemp` = Průměrná teplota (°C).\
85
+ `-maxtemp` = Maximální teplota (°C).\
86
+ `-kcal` = Spálené kalorie.\
87
+ `-steps` = Počet kroků.\
88
+ `-cdate` = Datum a čas spuštění aktivity ve formátu YYYY-MM-DD HH:MM:SS.\
89
+ `-fdate` = Datum a čas zastavení aktivity ve formátu YYYY-MM-DD HH:MM:SS.\
90
+ `-elapsedtime` = Celkový čas akvitity v sekundách včetně přestávek.\
91
+ `-idletime` = Součet času odpočinku nebo čekání v sekundách.\
92
+ `-nograph` = Vypne vykreslování grafu převýšení.\
93
+ `-nogpx` = Vypne vykreslování trasy na mapě.\
94
+ `-grayscale` = Použije na pozadí částečný černobilý efekt, aby se snížila intenzita barev.\
95
+ `-kmstep` = Nastaví vzdálenost v kilometrech mezi značkami na trase.\
96
+ `-lang` = Nastaví lokalizaci popisků (CZ, EN).\
97
+ `-out` = Cílová cesta pro uložení výsledku (.jpg / .png).\
98
+ `-mapurl` = URL adresa pro mapové podklady.\
99
+ `-mapcache` = Název cache adresáře do kterého se budou ukládat mapové dlaždice.\
100
+
101
+ ---
102
+
103
+ ## 🐍 Použití v kódu
104
+ Díky modularitě lze knihovnu importovat do vlastního Python skriptu:
105
+ #### A) Podobný styl obrázku, který je generován nativně:
106
+ - Vlastní definice metrik (parametry aktivity).
107
+ ```python
108
+ from pyactivity import (
109
+ ActivityGenerator,
110
+ ActivityMetrics,
111
+ ActivityParser,
112
+ ElementStyle,
113
+ ElevationGraphConfig,
114
+ GeneratorConfig,
115
+ GPXConfig,
116
+ WatermarkConfig,
117
+ create_element,
118
+ default_viewport_callback,
119
+ format_activity_type,
120
+ )
121
+
122
+ # Vytvoření metrik
123
+ metrics = ActivityMetrics(
124
+ name="Nedělní procházka",
125
+ activity_type="Chůze",
126
+ distance=12345, # Metry (12.3 km)
127
+ moving_time=7173 # Sekundy (1h 59m 33s)
128
+ )
129
+
130
+ # Sestavení konfigurace a generátoru
131
+ config = GeneratorConfig(
132
+ # Vlastní konfigurace GPX trasy
133
+ gpx=GPXConfig(),
134
+ # Vlastní konfigurace vodoznaku
135
+ watermark=WatermarkConfig(),
136
+ # Vykreslení prvků na obrázek
137
+ # Název klíče musí odpovídat atributu v metrice!
138
+ # Pokud je potřeba vlastní element, tak musí začínat prefixem: custom_
139
+ elements={
140
+ # Název aktivity
141
+ "name": ElementStyle(
142
+ is_absolute=True,
143
+ value_pos=(360, 1180),
144
+ value_font_size=40,
145
+ auto_shrink=True, # Když bude text dlouhý, tak se začne změnšovat
146
+ value_color=(255, 255, 255, 255)
147
+ ),
148
+ # Typ aktivity
149
+ "activity_type": create_element("Aktivita"),
150
+ "custom_activity_type_marker": create_element(
151
+ "🎯",
152
+ is_absolute=True,
153
+ take_pos_y_from_prev_label=True
154
+ ),
155
+ # Vzdálenost
156
+ "distance": create_element("Vzdálenost"),
157
+ "custom_distance_marker": create_element(
158
+ "📍",
159
+ is_absolute=True,
160
+ take_pos_y_from_prev_label=True
161
+ ),
162
+ # Čas pohybu
163
+ "moving_time": create_element("Čas"),
164
+ "custom_moving_time_marker": create_element(
165
+ "🕒",
166
+ is_absolute=True,
167
+ take_pos_y_from_prev_label=True
168
+ )
169
+ }
170
+ )
171
+
172
+ # Uložení obrázku
173
+ generator = ActivityGenerator(metrics=metrics, config=config)
174
+ generator.save(output_path="vystup.jpg", quality=90)
175
+ ```
176
+ #### B) Načtení vlastního FIT souboru:
177
+ - Bude použit stejný kód jako v bodě (A), ale musí se udělat několik úprav.
178
+ ##### Přidání mapování typu aktivity:
179
+ Protože FIT soubor má vlastní typy, tak se hodnoty musí přemapovat na vlastní název.
180
+ ```python
181
+ ACTIVITY_MAPPING: dict[str | None, str] = {
182
+ "walk": "Chůze",
183
+ "walking": "Chůze",
184
+ "run": "Běh",
185
+ "running": "Běh"
186
+ }
187
+ ```
188
+ ##### Načtení FIT souboru a metrik:
189
+ Místo vytvoření vlastních metrik je načteme z FIT souboru.
190
+ ```python
191
+ # Načtení FIT souboru a těžba dat
192
+ fit_file = Path("activity.fit")
193
+ fit_data = ActivityParser().parse_fit(fit_file)
194
+
195
+ # Získání metrik s možností je přepsat
196
+ metrics = fit_data.metrics
197
+ metrics.name = "Název aktivity" # FIT neobsahuje název
198
+ ```
199
+ ##### Úprava konfigurace - GeneratorConfig:
200
+ Do `GeneratorConfig` přidáme následující konfiguraci.
201
+ ```python
202
+ # Obecná konfigurace
203
+ edge_vignette=False, # Okraje obrázku nebudou mít gradient
204
+ elevation_graph_enabled=True, # Vygeneruje graf převýšení
205
+ # Konfigurace GPX trasy
206
+ gpx=GPXConfig(
207
+ gpx_enabled=True, # Povolí vykreslení trasy
208
+ gpx_path=fit_file, # Může být GPX i FIT
209
+ gpx_points=fit_data.gpx_points, # Musí být vždy
210
+ gpx_points_with_elev=fit_data.gpx_points_with_elev, # Pouze pro FIT, protože GPX nemá převýšení
211
+ viewport=default_viewport_callback, # Pokud se generuje i graf převýšení, tak je dobré použít vlastní viewport
212
+ show_start_finish=True, # Vykreslí začátek a konec trasy
213
+ show_km_markers=True # Vykreslí kilometrové značky na trase
214
+ ),
215
+ # Konfigurace grafu převýšení (pouze pro FIT)
216
+ elevation=ElevationGraphConfig(
217
+ show_bubble_interval=True, # Značky každých N-km
218
+ show_bubble_extreme=True # Značka na nejvyšším a nejnižším místě
219
+ ),
220
+ ```
221
+ ##### Úprava activity_type v elements:
222
+ Aby bylo možné použít vlastní mapování pro typ aktivity, tak musíme přidat mapper.
223
+ ```python
224
+ "activity_type": create_element(
225
+ "Aktivita",
226
+ formatter=lambda _cfg, _met, val: format_activity_type(val, ACTIVITY_MAPPING),
227
+ ),
228
+ ```
229
+ Celkové toho nastavení je mnoho. Tady je použit pouze nutný výčet a nějaké nice-to-have. Často je možné nastavit vše, od pozice, barvy, různých hodnot. Stačí projít konfigurační objekty.
@@ -0,0 +1,39 @@
1
+ [build-system]
2
+ requires = ["setuptools>=61.0"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "ocactivity-gen"
7
+ version = "1.0.7"
8
+ description = "Nástroj pro generování obrázků aktivity z GPX/FIT nebo dle vlastního zadání."
9
+ readme = "README.md"
10
+ requires-python = ">=3.14"
11
+ license = "MIT"
12
+ license-files = ["LICENSE"]
13
+ keywords = ["mimic", "ophitecorp", "strava", "activity", "generator", "gen", "image"]
14
+ authors = [
15
+ { name = "Jiří Vik", email = "mimic2300@gmail.com" }
16
+ ]
17
+
18
+ dependencies = [
19
+ "Pillow>=10.4.0",
20
+ "fitparse>=1.2.0",
21
+ "numpy>=2.1.0",
22
+ "rich>=13.9.0"
23
+ ]
24
+
25
+ [project.scripts]
26
+ ocactivity-gen = "pyactivity.cli:main"
27
+
28
+ [tool.setuptools.packages.find]
29
+ where = ["src"]
30
+
31
+ [tool.setuptools.package-data]
32
+ pyactivity = [
33
+ "fonts/*.ttf",
34
+ "static/*",
35
+ "static/**/*"
36
+ ]
37
+
38
+ [project.urls]
39
+ "Repository" = "https://gitlab.com/OphiteCorp/pyactivity-generator"
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+