Zawartość: - Koncepcja 0.1 oraz rozszerzona Koncepcja 0.2 (model domenowy, architektura, mapowanie cel→metryki→usługi AI, wymienialność modeli, model danych) - Katalog 15 celów analiz kognitywnych - Specyfikacja procesu AI + opis procesów źródłowych - Pytania do koncepcji - Materiały źródłowe: info.md, n8n.json Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
251 lines
13 KiB
Markdown
251 lines
13 KiB
Markdown
# 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`.*
|