This is an old revision of the document!


Laborator 2: Captură și transmisie de imagini prin aplicație mobilă

În laboratorul trecut ne-am familiarizat cu aplicația web (serverul) care primește imaginile trimise prin MQTT. În cadrul acestui laborator ne vom axa pe clientul mobil responsabil de transmiterea imaginilor.

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

Recomandări

Pentru parcurgerea acestui laborator, vă sugerăm următoarele:

  • Mediu de dezvoltare: Utilizați Android Studio ca mediu de dezvoltare. Acesta include un emulator (mașină virtuală), util dacă nu aveți la dispoziție un dispozitiv Android fizic. Cea mai simplă metodă de instalare și gestionare este prin JetBrains Toolbox.
  • Schelet de cod: Pentru această materie vom utiliza scheletul oficial disponibil aici.

În situația în care nu ați parcurs primul laborator, puteți testa funcționalitatea acestui schelet prin rularea locală a unui broker MQTT și utilizarea unui client care să recepționeze imaginile.

Testare locală cu broker MQTT

1. Instalare broker MQTT

Asigurați-vă că aveți instalat un broker MQTT, de exemplu Mosquitto

2. Fișier de configurare

Creați în root-ul scheletului de laborator un director de test, iar în interiorul acestuia definiți un fișier de configurare cu următorul conținut:

mqtt.conf
listener 1883
allow_anonymous true

3. Pornirea brokerului MQTT

Într-un terminal rulați următoarele comenzi:

sudo systemctl stop mosquitto.service
mosquitto -c mqtt.conf -v

4. Creare environment virtual Python

Un good practice în Python este să folosim virtual environment-uri, astfel rulați într-un terminal:

python -m venv .mqtt_env
source .mqtt_env/bin/activate
pip install paho-mqtt

5. Client MQTT simplu în Python

Creați și rulați un client simplu MQTT care face automat subscribe la topicul ssproject/images și salvează imaginile primite într-un director separat.

mqtt_client.py
import paho.mqtt.client as mqtt
from paho.mqtt.enums import CallbackAPIVersion
import os
import time
 
BROKER = "127.0.0.1"
PORT = 1883
TOPIC = "ssproject/images"
OUTPUT_DIR = "received_images"
 
if not os.path.exists(OUTPUT_DIR):
    os.makedirs(OUTPUT_DIR)
 
def on_connect(client, userdata, flags, reason_code, properties):
    print(f"Connected (reason code: {reason_code})")
    client.subscribe(TOPIC)
 
def on_message(client, userdata, msg):
    timestamp = int(time.time() * 1000)
    filename = f"{OUTPUT_DIR}/image_{timestamp}.jpg"
 
    try:
        with open(filename, "wb") as f:
            f.write(msg.payload)
        print(f"Image saved: {filename} ({len(msg.payload)} bytes)")
    except Exception as e:
        print(f"Error saving image: {e}")
 
client = mqtt.Client(callback_api_version=CallbackAPIVersion.VERSION2)
client.on_connect = on_connect
client.on_message = on_message
 
print(f"Connecting to {BROKER}...")
client.connect(BROKER, PORT, 60)
print("Exit with Ctrl+C")
 
print("Waiting for images...")
client.loop_forever()

Structura scheletului de laborator

Mai jos este prezentată structura simplificată a scheletului aplicației Android, evidențiind componentele ce vor fi analizate și modificate pe parcursul semestrului:

ss-mobile
└── app
    ├── src
    │   ├── main
    │   │   ├── java/ro/pub/cs/systems/ssproject
    │   │   │   ├── mqtt            # Logică comunicație MQTT
    │   │   │   ├── ui              # Activități și interfață utilizator
    │   │   │   └── utils           # Clase utilitare
    │   │   ├── res/layout          # Fișiere XML pentru UI
    │   │   └── AndroidManifest.xml # Configurație aplicație
    │   ├── test                    # Unit Tests (logică pură)
    │   └── androidTest             # Instrumented Tests
    └── build.gradle.kts            # Configurații de build

Descriere componente

  • mqtt/ – Conține implementarea clientului MQTT (folosind Paho) și constantele pentru topice.
  • ui/ – Conține codul pentru ecranele aplicației.
    • MainActivity – captură și trimitere imagini.
    • SetupActivity – setări de conexiune.
  • utils/ – Include:
    • ImageUtils – procesare formate imagine (YUV → NV21, rotație)
    • PermissionHandler – gestionare permisiuni
  • test/ – Teste unitare (rulează pe JVM).
  • androidTest/ – Teste instrumentate (rulează pe dispozitiv/emulator).

Cerințe

  1. Descărcați scheletul de laborator de aici
  2. Importați-l în Android Studio.
  3. Analizați structura și înțelegeți funcționarea aplicației.
  4. Rulați aplicația pe un dispozitiv Android.
  5. Testați conexiunea cu brokerul MQTT.

Resurse

ss/laboratoare/02.1772494179.txt.gz · Last modified: 2026/03/03 01:29 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