This is an old revision of the document!


Laborator 1: Platformă web pentru gestionarea imaginilor

Obiective

  • Crearea unei platforme web care primește, procesează și salvează imaginile transmise prin MQTT de platforma hardware/mobilă
  • Implementarea unui sistem de autentificare și autorizare pentru utilizatori
  • Gestionarea dispozitivelor hardware/mobile conectate (vizualizare, actualizare firmware, configurare)
  • Controlul parametrilor camerei și al modului de funcționare prin interfață web
  • Vizualizarea și descărcarea imaginilor procesate

Exemple de imagini pentru procesare

Puteti folosi ca si exemplu pentru inregistrarea si procesare urmatoarele imagini. Obiectul este cel de a extrage textul din imaginile sau PDF-ul atasat.

Din imaginea atasata putem extrage informatie despre persoana, profesia, locul de munca, avizul medical si tipul controlului de medicina muncii.  Imagine raport medicina muncii

Pentru a simplifica partea de procesare pe partea de web se pot extrage aceste informatii din fisierul PDF atasat ca alternativa.

PDF raport medicina muncii

Tehnologii folosite și cerințe preliminare

Componentă Tehnologie
Frontend React + TypeScript + Vite + TailwindCSS
Backend Go (Golang)
Bază de date MongoDB
Broker MQTT Eclipse Mosquitto
Containerizare Docker Compose
  • Docker - pentru rularea containerelor
  • Node.js (v16+, recomandat v24.0.2) - pentru development frontend
  • npm sau yarn (recomandat yarn v1.22.22)
  • Git - pentru clonarea proiectului

Pași pentru setup

Pasul 1: Clonarea proiectului

git clone https://github.com/ResearchYou/ss-web
cd ss-web

Pasul 2: Pornirea proiectului

Verificați/creați un fișier .env în directorul rădăcină:

UID=501                               # User ID local (obține cu `id -u`)
GID=20                                # Group ID local (obține cu `id -g`)
MONGO_INITDB_ROOT_USERNAME=admin      # Username MongoDB
MONGO_INITDB_ROOT_PASSWORD=supersecret # Parolă MongoDB
JWT_SECRET=dev-secret                 # Secret pentru JWT
AWS_ACCESS_KEY=local-aws-access       # Opțional: pentru S3
AWS_SECRET_KEY=local-aws-secret       # Opțional: pentru S3
AWS_REGION=us-east-1                  # Opțional: pentru S3
S3_BUCKET_NAME=local-bucket           # Opțional: pentru S3
MQTT_HOST_IP=192.168.1.95             # IP-ul host-ului pentru MQTT

Metoda 1: Script automat (recomandat)

./start.sh

Acest script va:

  • Instala dependențele client (yarn install)
  • Porni containerele Docker (API, MongoDB, MQTT Broker)
  • Porni serverul de development Vite

Metoda 2: Manual

# Terminal 1 - Pornește containerele Docker
docker compose up -d
 
# Terminal 2 - Pornește frontend-ul
cd client
yarn install
yarn dev:poll

Pasul 3: Verificarea funcționării

După pornire, aplicația va fi disponibilă la:

Serviciu URL/Port
Frontend (Vite) http://localhost:5173
Backend API http://localhost:8080
MongoDB localhost:27019
MQTT Broker localhost:1883

Oprirea proiectului

# Oprește toate serviciile
./scripts/dev-stop.sh
 
# Sau manual
docker compose down

Utilizare

1. Autentificare

  • Accesează http://localhost:5173
  • Login sau înregistrează un cont nou

2. Vizualizare fotografii

  • Navighează la pagina Photos
  • Vezi imaginile capturate de dispozitive
  • Folosește căutarea pentru a găsi imagini după textul extras

Pentru a putea vizualiza fotografiile rezolvați Taskul 1.

3. Management dispozitive

  • Accesează pagina Devices
  • Vezi toate dispozitivele conectate
  • Schimbă modul între Normal și Live

4. Căutare Avansată

  • Caută imagini după text extras (OCR)
  • Filtrează după interval de date

Scripturi Utile

Script Descriere
./start.sh Pornește întregul stack
./scripts/dev-start.sh Script complet de pornire
./scripts/dev-stop.sh Oprește toate serviciile
./scripts/send_image.pyTrimite imagini test prin MQTT
./scripts/seed_data.py Populează baza de date cu date test

Debugging

Verificare containere Docker

docker ps
docker logs go-api
docker logs broker
docker logs mongo-db

Verificare conectivitate MQTT

python scripts/send_image.py

Loguri Frontend

cat .dev-runtime/client.log

Structura codului

Client (Frontend)

client/src/
├── components/       # Componente reutilizabile
│   ├── devicesCards/ # Card-uri pentru dispozitive
│   └── photosCards/  # Card-uri pentru fotografii
├── contexts/         # Context React (Auth)
├── pages/            # Paginile aplicației
│   ├── devicesPage/  # Management dispozitive
│   ├── homePage/     # Pagina principală
│   ├── loginPage/    # Autentificare
│   └── photosPage/   # Vizualizare fotografii
├── App.tsx           # Componenta principală
└── Router.tsx        # Configurare rute

Server (Backend)

server/
├── main.go           # Entry point
├── domain/           # Modele de date
├── repository/       # Acces bază de date
├── routes/           # Endpoint-uri HTTP
├── broker/           # Client MQTT
└── utils/            # Utilități

Încărcarea imaginilor în platformă

Scriptul care ne permite trimiterea individuală de imagini este: ./scripts/send_image.py

Pentru acest laborator vom trimite așa pozele, ulterior se vor trimite prin ESP32-CAM și prin aplicația mobilă.

Acest script permite trimiterea unei singure imagini prin MQTT către server.

Utilizare:

# Trimitere imagine generată automat (pentru testare)
python3 scripts/send_image.py
 
# Trimitere fișier specificat
python3 scripts/send_image.py /cale/catre/imagine.jpg

Configurare Device ID: În fișierul send_image.py, poți modifica:

DEVICE_ID = "python-sender-1"
DEVICE_NAME = "Python Test Device"

Topic-uri MQTT utilizate:

  • register/{DEVICE_ID} - pentru înregistrarea dispozitivului
  • ssproject/images/{DEVICE_ID} - pentru trimiterea imaginilor

Pagina de statistici (Grafice)

Pagina de Statistics se află în meniul aplicației și afișează grafice despre documentele procesate.

Acces: După autentificare → meniul Statistics

Grafice disponibile:

Grafic Ce arată
Control Type DistributionTipurile de controale medicale: Angajare, Periodic, Adaptare, Reluare, Supraveghere, Alte
Medical Opinion Results Rezultatele avizelor medicale: APT, APT Condiționat, Inapt Temporar, Inapt

Carduri sumar:

  • Total Files - numărul total de documente procesate
  • FIT (APT) - numărul de avize APT (apt pentru muncă)
  • Periodic Checks - numărul de controale periodice

Funcționalități:

  • Filtrare pe date - selectează interval de date (default: ultimele 30 zile)
  • Toggle Bar/Pie - schimbă între grafic bar și grafic pie
  • Refresh - reîncarcă datele

Configurare IP MQTT pentru clienți

Unde găsești IP-ul serverului MQTT:

1. In pagina devices din aplicatia web (acolo apare si portul):

2. Aflat automat la pornirea serverului:

Când rulezi ./start.sh, scriptul afișează:

Detected HOST_IP: 192.168.1.95

Gestionarea și ștergerea imaginilor

Există două modalități de a șterge imaginile din aplicație:

1. Ștergere Individuală:

  • Fiecare card de imagine are un buton de ștergere (🗑️) în colțul din dreapta-sus.
  • Utilizați această opțiune pentru a elimina imagini specifice (ex: cele capturate greșit).

2. Ștergere Totală (Resetare):

  • Butonul Delete All (roșu) șterge toate imaginile din baza de date.
  • Această funcție este utilă pentru a curăța baza de date înainte de o nouă sesiune de testare sau demonstrativă.

Ce să verifici în aplicație

1. Pagina Photos

  • Verifică dacă imaginile încărcate apar corect
  • Verifică textul extras automat (OCR)
  • Testează funcția de căutare
  • Testează butoanele Capture, Start Live, Stop Live
  • Testează ștergerea pozelor (buton trash pe fiecare poză)

2. Pagina Devices

  • Verifică dacă dispozitivele se înregistrează
  • Testează schimbarea modului Normal/Live

3. Pagina Statistics

  • Verifică graficele cu distribuția tipurilor de control
  • Verifică graficele cu rezultatele avizelor medicale

Task-uri practice pentru laborator

Task 1: Testare trimitere imagine prin script

  1. Pornește aplicația web (./start.sh)
  2. Deschide un terminal și navighează în folderul proiectului
  3. Rulează scriptul de trimitere imagini:
python3 scripts/send_image.py /cale/catre/o/imagine.jpg
  1. Accesează pagina Photos în browser și verifică că imaginea a apărut
  2. Verifică textul extras prin OCR (dacă imaginea conține text)

Livrabil: Screenshot cu imaginea încărcată vizibilă în pagina Photos

Task 2: Explorare și analiză statistici

  1. Încarcă mai multe imagini folosind send_image.py (repetă de mai multe ori):
python3 scripts/send_image.py /cale/catre/imagine1.jpg
python3 scripts/send_image.py /cale/catre/imagine2.jpg
  1. Accesează pagina Statistics
  2. Modifică intervalul de date și observă cum se schimbă graficele
  3. Schimbă tipul graficului între Bar și Pie pentru ambele categorii
  4. Notează câte documente sunt în fiecare categorie de aviz medical

Livrabil: Screenshot cu pagina Statistics afișând ambele grafice

Resurse suplimentare

ss/laboratoare/01.1772494418.txt.gz · Last modified: 2026/03/03 01:33 by ciprian.popescu0411
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0