ASM_PNS_C/Opis-procesow-AI-n8n.md

252 lines
13 KiB
Markdown
Raw Permalink Normal View History

# Procesy AI w workflow n8n „v1.6 Test"
> Dokument opisuje **procesy realizowane za pomocą modeli AI** w przepływie
> zdefiniowanym w pliku `n8n.json` (workflow n8n o nazwie **„v1.6 Test"**).
> Skupia się na węzłach wywołujących modele uczenia maszynowego; węzły pomocnicze
> (merge, code, sticky notes) opisano tylko w zakresie potrzebnym do zrozumienia
> przepływu danych.
---
## 1. Cel i charakter systemu
Workflow przyjmuje **pojedynczy obraz** (np. kreację reklamową / grafikę marketingową)
przesłany przez formularz, a następnie przepuszcza go równolegle przez **pięć modeli AI**.
Efektem jest zestaw analiz **predykcyjnych dotyczących uwagi wzrokowej i zawartości obrazu**
de facto „syntetyczny eye-tracking", czyli przewidywanie, **co** znajduje się na grafice
i **gdzie** skupi się wzrok odbiorcy, jeszcze przed badaniem z udziałem realnych użytkowników.
Wyniki są prezentowane jako interaktywne strony HTML (overlay z suwakiem przezroczystości,
siatka porównawcza, wizualizacja bounding boxów).
Notatki (sticky notes) w workflow wskazują, że docelowo system ma obejmować również:
mapę cieplną w interwałach czasowych, ścieżki fiksacji oraz mapę emocji (patrz sekcja 6).
---
## 2. Architektura przepływu danych
```
┌─────────────────────┐
│ Form input data │ (upload obrazu przez formularz)
└─────────┬───────────┘
┌───────────┼───────────────────────────────┐
│ │ │
▼ ▼ ▼
┌─────────┐ ┌──────────────┐ ┌──────────────────┐
│ base64 │ │ Credentials │ │ Merge2 │
│(do b64) │ │ (Data Table) │──────────► │ (łączy dane + │
└────┬────┘ └──────────────┘ │ URL + token) │
│ └────────┬─────────┘
│ rozsyła obraz + poświadczenia do 5 modeli AI:
┌──────────────────────────────────────────────────────────────────┐
│ [AI-1] LLaVA ──► Labels string ──► [AI-2] Grounding DINO │
│ [AI-3] DeepGaze │
│ [AI-4] unisal │
│ [AI-5] asmModel │
└──────────────────────────────────────────────────────────────────┘
│ │ │ │
▼ ▼ ▼ ▼
Object Detection Inverted Merge6 ──► Inverted heatmap Compare
(HTML boxy) heatmap (siatka 2×2: DeepGaze / unisal /
(HTML) asmModel detailed / asmModel general)
```
- **Wejście:** `Form input data` (`formTrigger`) — pole typu *file*.
- **Poświadczenia:** węzeł `Credentials` (`dataTable`, operacja *get*) pobiera z tabeli danych
adresy URL serwerów modeli (`LLaVA`, `Grounding_DINO`, `DeepGaze`) oraz `Token`
(autoryzacja `Bearer` / nagłówek `X-API-Key`).
- **Dystrybucja:** `Merge2` łączy obraz (jako binarny + base64 w polu `image_input`)
z poświadczeniami i rozsyła go równolegle do wszystkich modeli.
---
## 3. Modele AI i realizowane procesy
W workflow działa **pięć** węzłów wywołujących modele AI (wszystkie to żądania HTTP POST
do dedykowanych mikroserwisów modelowych). Poniżej opis każdego procesu.
### 3.1. LLaVA — ekstrakcja typów obiektów (proces „Object Listing")
| Atrybut | Wartość |
|---|---|
| Węzeł | `LLaVA-based object types extractor` (`httpRequest`) |
| Endpoint | `POST http://{{LLaVA}}/llava-api/v1/get-object-types` |
| Parametry | `temperature = 0.2`, `top_p = 0.9`, `image` (binarnie) |
| Typ modelu | Multimodalny model wizualno-językowy (VLM, *Large Language-and-Vision Assistant*) |
| Obsługa błędu | `continueRegularOutput` (przepływ nie zatrzymuje się przy błędzie) |
**Co robi:** model „ogląda" obraz i zwraca **listę typów obiektów** (etykiet/kategorii),
które się na nim znajdują — w trybie otwartego słownika (open-vocabulary). Niska temperatura
(0.2) zapewnia powtarzalne, deterministyczne odpowiedzi.
**Rola w przepływie:** jest to **pierwszy etap detekcji obiektów**. Wynik trafia do węzła
`Labels string` (code), który skleja etykiety w jeden ciąg rozdzielony przecinkami
(`labels.join(", ")`) i przekazuje go dalej do modelu Grounding DINO.
---
### 3.2. Grounding DINO — detekcja obiektów / bounding boxy (proces „Object Detection")
| Atrybut | Wartość |
|---|---|
| Węzeł | `Grounding DINO` (`httpRequest`) |
| Endpoint | `POST http://{{Grounding_DINO}}/grounding-dino-api/v1/get-objects-bboxes` |
| Parametry | `object_types` (etykiety z LLaVA), `max_objects = 50`, `base64 = false`, `image` |
| Typ modelu | Otwarto-zbiorowa (zero-shot) detekcja obiektów sterowana tekstem (*open-set object detection / grounding*) |
**Co robi:** otrzymuje obraz **oraz** listę etykiet wygenerowaną przez LLaVA i dla każdego
wskazanego typu zwraca **ramki ograniczające** (`bbox_coords_xyxy`), nazwę typu (`object_type`)
oraz pewność detekcji (`score`). Limit 50 obiektów.
**Rola w przepływie:** **drugi etap detekcji** — lokalizuje na obrazie obiekty nazwane przez
LLaVA. Połączenie LLaVA + Grounding DINO tworzy kompletny potok **open-vocabulary object
detection** (jeden model nazywa, drugi wskazuje położenie).
**Prezentacja wyniku:** węzeł `Object Detection` (code) generuje interaktywny plik HTML
(`detection_viewer.html`) z kolorowymi ramkami nałożonymi na oryginał, dynamiczną paletą barw
per typ obiektu, legendą, przyciskami filtrowania typów i wyświetlaniem `score` (%).
Wymiary obrazu są odczytywane bezpośrednio z nagłówka PNG/JPEG.
---
### 3.3. DeepGaze — mapa uwagi / saliency (proces „Inverted heatmap DeepGaze")
| Atrybut | Wartość |
|---|---|
| Węzeł | `DeepGaze` (`httpRequest`) |
| Endpoint | `POST http://{{DeepGaze}}/v1/predict-heatmap` |
| Parametry | `image` (binarnie) |
| Typ modelu | Model predykcji saliency / uwagi wzrokowej (przewidywanie ludzkiego spojrzenia) |
| Obsługa błędu | `continueRegularOutput` |
**Co robi:** przewiduje **mapę cieplną uwagi (saliency map)** — rozkład prawdopodobieństwa,
w które rejony obrazu skieruje się wzrok człowieka. Model zwraca obraz heatmapy
zakodowany w base64 (`heatmap_b64`, `heatmap_mime`, `width`, `height`).
**Rola w przepływie:** to **pierwszy z trzech modeli uwagi**. Wynik:
- węzeł `Image` (code) dekoduje `heatmap_b64` do binarnego PNG,
- węzeł `Inverted heatmap` (code) generuje stronę HTML (`heatmap_viewer.html`) z heatmapą
nałożoną na oryginał i **suwakiem przezroczystości** (podgląd „oryginał ↔ mapa uwagi"),
- wynik trafia także do `Merge6` (porównanie zbiorcze, sekcja 4).
---
### 3.4. UNISAL — mapa uwagi / saliency (model porównawczy)
| Atrybut | Wartość |
|---|---|
| Węzeł | `unisal - inverted heatmap` (`httpRequest`) |
| Endpoint | `POST http://1.208.108.242:58951/unisal/process-image?as_base64=true` |
| Autoryzacja | nagłówek `X-API-Key` = `{{ Token }}` |
| Parametry | `file` (obraz, binarnie) |
| Typ modelu | Zunifikowany model saliency dla obrazu i wideo (*UNIfied SALiency*) |
| Obsługa błędu | `continueRegularOutput` |
**Co robi:** alternatywna **predykcja mapy uwagi**, zwracana jako obraz base64 (pole `data`,
`mimetype`). Stanowi drugie, niezależne źródło saliency obok DeepGaze.
**Rola w przepływie:** wynik trafia do `Merge6` (wejście 2) i jest zestawiany z pozostałymi
modelami w widoku porównawczym (sekcja 4).
---
### 3.5. asmModel (ASM) — mapy uwagi + warunkowanie opisem marketingowym (model centralny)
| Atrybut | Wartość |
|---|---|
| Węzeł | `asmModel - inverted heatmap` (`httpRequest`) |
| Endpoint | `POST http://1.208.108.242:58951/asmModel/process-image` |
| Autoryzacja | nagłówek `X-API-Key` = `{{ Token }}` |
| Parametry (query) | `prompt = "Describe the image in the style of a polished marketing ad."`, `as_raw_output = false`, `max_new_tokens = 100` |
| Parametry (body) | `file` (obraz, binarnie) |
| Typ modelu | Autorski/proprietarny model uwagi (ASM), warunkowany tekstowym promptem, generujący dwie mapy uwagi |
| Obsługa błędu | `continueRegularOutput` |
**Co robi:** model zwraca **dwie mapy uwagi** — szczegółową (`image_detailed`) i ogólną
(`image_general`) — wraz z `mimetype`. Obecność parametrów `prompt` oraz `max_new_tokens`
wskazuje, że jest to model **multimodalny warunkowany tekstem**: predykcja uwagi jest
osadzona w kontekście „dopracowanej reklamy" (*polished marketing ad*).
> **Uwaga interpretacyjna:** dokładna architektura `asmModel` nie wynika wprost z pliku
> (to wewnętrzny mikroserwis pod adresem `1.208.108.242:58951`). Na podstawie konfiguracji
> (prompt marketingowy + `max_new_tokens` + dwie mapy uwagi) jest to **kluczowy, autorski
> model projektu** (nazwa katalogu projektu: *ASM PNS C*), łączący predykcję saliency
> z warunkowaniem językowym. Opis bazuje na obserwowalnych parametrach żądania.
**Rola w przepływie:** wynik trafia do `Merge6` (wejście 3) i dostarcza dwa z czterech
kafelków widoku porównawczego.
---
## 4. Proces zestawienia i porównania wyników AI
| Węzeł | Funkcja |
|---|---|
| `Merge6` (4 wejścia) | Łączy: [0] oryginał (base64), [1] DeepGaze, [2] unisal, [3] asmModel |
| `Inverted heatmap - Compare` (code) | Generuje HTML (`inverted_heatmap.html`) — **siatkę 2×2** porównującą cztery mapy uwagi |
W widoku porównawczym (`Inverted heatmap - Compare`) zestawiane są obok siebie cztery wyniki
modeli uwagi: **DeepGaze**, **unisal**, **asmModel detailed**, **asmModel general**.
Strona renderuje tzw. **inwersję heatmapy** w technice pikselowego blendu na `<canvas>`:
suwak miesza oryginał z mapą luminancji uwagi (biel = wysoka uwaga, czerń = niska),
co daje efekt „reflektora" pokazującego rejony przyciągające wzrok.
Dzięki temu proces AI ma wbudowaną **walidację krzyżową** — trzy niezależne modele saliency
(DeepGaze, unisal, ASM) można porównać na jednej grafice.
---
## 5. Podsumowanie tabelaryczne procesów AI
| # | Model AI | Proces / zadanie | Wejście | Wyjście | Wizualizacja |
|---|---|---|---|---|---|
| 1 | **LLaVA** | Rozpoznanie i wylistowanie typów obiektów (VLM) | obraz | lista etykiet | (etap pośredni) |
| 2 | **Grounding DINO** | Detekcja i lokalizacja obiektów (bounding boxy) | obraz + etykiety z LLaVA | ramki + score | `Object Detection` (HTML) |
| 3 | **DeepGaze** | Predykcja mapy uwagi (saliency) | obraz | heatmapa (base64) | `Inverted heatmap` (HTML, suwak) |
| 4 | **UNISAL** | Predykcja mapy uwagi (model porównawczy) | obraz | heatmapa (base64) | `Inverted heatmap Compare` |
| 5 | **asmModel (ASM)** | Predykcja uwagi (detailed + general) z warunkowaniem promptem marketingowym | obraz + prompt | 2 mapy uwagi | `Inverted heatmap Compare` |
**Dwa główne typy procesów AI:**
1. **Rozumienie zawartości obrazu** — co jest na grafice i gdzie (LLaVA → Grounding DINO).
2. **Predykcja uwagi wzrokowej** — gdzie spojrzy odbiorca (DeepGaze, UNISAL, asmModel),
z możliwością porównania trzech modeli.
---
## 6. Procesy planowane (notatki bez podłączonych węzłów)
W workflow znajdują się notatki (sticky notes) opisujące **kolejne, jeszcze niezaimplementowane
etapy** analizy uwagi (brak podłączonych węzłów, pozycje w dolnej części płótna):
- **Heatmap** — mapa cieplna,
- **Interwały** — „30 sek, 6 obrazów", „20 sek. do 0,5 sekundy" (analiza uwagi w przedziałach czasu),
- **Ścieżki fiksacji** — przewidywana sekwencja ruchów oka (scanpath),
- **Mapa emocji** — predykcja reakcji emocjonalnej.
Wskazują one na docelowy kierunek rozwoju: pełen **syntetyczny eye-tracking** kreacji
reklamowych (mapa uwagi → interwały czasowe → ścieżki fiksacji → mapa emocji).
---
## 7. Węzły pomocnicze (nie-AI)
Dla kompletności — elementy obsługujące przepływ, które **nie** są modelami AI:
- `Form input data` — formularz wejściowy (upload obrazu).
- `Credentials` (Data Table) — pobranie adresów URL modeli i tokenu autoryzacyjnego.
- `base64` (Extract from File) — konwersja obrazu do base64 (`image_input`).
- `Labels string` (Code) — sklejenie etykiet LLaVA w ciąg dla Grounding DINO.
- `Image` (Code) — dekodowanie heatmapy DeepGaze do PNG.
- `Merge` / `Merge1` / `Merge2` / `Merge5` / `Merge6` — synchronizacja i łączenie strumieni danych.
- `Object Detection`, `Inverted heatmap`, `Inverted heatmap - Compare` (Code) — generowanie
interaktywnych raportów HTML (prezentacja wyników, bez logiki AI).
- `Sticky Note*` — komentarze/notatki na płótnie.
---
*Workflow: `v1.6 Test` · status: nieaktywny (`active: false`) · `executionOrder: v1`.*
*Opis wygenerowany na podstawie analizy pliku `n8n.json`.*