Lucrare practică 7

Obiective:

    • aplicarea conceptelor de utilizare a bibliotecilor standard și populare în limbajul Python (de ex. math, statistics, json, requests, matplotlib, opencv-python, beautifulsoup4, hashlib);
    • dezvoltarea de aplicații cu interfață grafică (GUI) folosind biblioteci specifice (de ex. tkinter sau alte framework-uri grafice);
    • înțelegerea și aplicarea paradigmelor moderne în programare: programare orientată pe obiecte, programare bazată pe evenimente (GUI), elemente de programare funcțională (funcții, filtrări, expresii lambda);
    • integrarea bibliotecilor pentru analiza datelor, procesarea imaginilor/video, web scraping și criptografie în aplicații Python reale;
    • dezvoltarea unei aplicații practice complete cu interfață grafică, care modelează o situație reală și utilizează cel puțin o bibliotecă standard și o bibliotecă externă (populară).

Sarcina de lucru:

La dispoziție sunt 4 variante; cadrul didactic responsabil de orele practice împarte variantele.

  • Se recomandă lucrul în echipe de 2–3 studenți; numărul exact este stabilit de cadrul didactic de lucrări practice;

  • Obligatoriu, toate variantele vor avea interfață grafică (GUI) cu ferestre, butoane, câmpuri de introducere a datelor și zone de afișare a rezultatelor;

  • Fiecare variantă va fi completată cu interfață grafică simplă (meniuri, butoane, liste, mesaje de eroare), nu doar interfață text în consolă;

  • Fiecare student va explica utilizarea:

    • bibliotecilor standard folosite în aplicație (ex.: math, statistics, json, datetime etc.);

    • bibliotecilor populare specifice variantei (ex.: matplotlib, opencv-python, requests, beautifulsoup4, hashlib);

    • mecanismelor de tratare a evenimentelor în GUI (click pe butoane, selectarea opțiunilor, actualizarea conținutului ferestrelor);

    • structurii modulare a programului (funcții, clase, separarea logicii de interfață acolo unde este posibil).

Varianta 1. Vizualizarea datelor cu matplotlib

Să se elaboreze o aplicație Python cu interfață grafică care încarcă date numerice și le reprezintă grafic utilizând biblioteca matplotlib.

Cerințe:

1. Dezvoltați o interfață grafică (ex.: folosind tkinter) cu cel puțin următoarele elemente:

  • o zonă / control pentru încărcarea fișierului de date (ex.: fișier .csv sau .txt cu valori numerice);
  • un meniu sau grup de butoane pentru selectarea tipului de grafic (de ex.: linie, bară, histogramă);
  • un buton „Desenează graficul” care declanșează afișarea graficului;
  • un buton „Ieșire” pentru închiderea aplicației.

2. Utilizați biblioteca matplotlib pentru a genera și afișa graficele. Graficul trebuie să fie afișat în fereastra aplicației (nu doar într-o fereastră separată implicită), de exemplu prin integrarea unui canvas specific matplotlib în GUI.

3. Calculați câțiva indicatori statistici (medie, minim, maxim) folosind biblioteci standard (ex.: statistics sau math) și afișați rezultatele în interfață.

4. Implementați o opțiune pentru salvarea graficului generat într-un fișier imagine (ex.: .png), indicând în interfață locația sau numele fișierului salvat.

Rezultat așteptat:

O aplicație cu interfață grafică ce permite încărcarea unui fișier de date, reprezentarea grafică a informațiilor prin matplotlib și calculul unor statistici de bază.

Varianta 2. Procesarea unui videostream de la camera web

Să se elaboreze o aplicație Python cu interfață grafică pentru vizualizarea și procesarea în timp real a imaginii preluate de la camera web a laptopului.

Cerințe:

1. Utilizați biblioteca opencv-python (modulul cv2) pentru a prelua un flux video (videostream) de la camera web.

2. Creați o interfață grafică (ex.: cu tkinter) care să conțină cel puțin:

  • o zonă de afișare a imaginii (frame video) actuale;
  • buton „Start” pentru pornirea capturii video;
  • buton „Stop” pentru oprirea capturii video;
  • buton „Captură imagine” pentru salvarea unui cadru (frame) în fișier (ex.: snapshot_1.png).

3. Implementați cel puțin două efecte/filtre care pot fi aplicate asupra imaginii video:

  • convertire în tonuri de gri (grayscale);
  • detecția marginilor (edge detection) sau estompare (blur);

și oferiți utilizatorului opțiuni (butoane sau liste) pentru a alege filtrul activ.

4. Afișați în interfață informații suplimentare, de exemplu dimensiunea cadrelor (lățime × înălțime) sau numărul de cadre procesate.

Rezultat așteptat:

O aplicație cu GUI care afișează în timp real videostream-ul de la camera web, permite aplicarea de filtre simple și salvarea unor imagini.

Varianta 3. Web scraping cu interfață grafică

Să se elaboreze o aplicație Python cu interfață grafică pentru preluarea (web scraping) și afișarea de informații de pe o pagină web.

Cerințe:

1. Utilizați biblioteca requests pentru descărcarea conținutului HTML al unei pagini web și biblioteca beautifulsoup4 (modulul bs4) pentru analizarea structurii HTML.

2. Creați o interfață grafică (ex.: cu tkinter) care să conțină:

  • un câmp de introducere a adresei URL;
  • un buton „Citește pagina” pentru pornirea procesului de web scraping;
  • o zonă (ex.: listă, tabel, text) în care să se afișeze informațiile extrase;
  • eventual un câmp/meniu pentru alegerea tipului de informație de extras (de ex.: titluri de știri, linkuri, prețuri etc.).

3. Implementați logica de extragere a unui tip de informație repetitivă de pe o pagină (de ex.: toate titlurile de articole dintr-o secțiune, toate linkurile dintr-o anumită zonă, toate prețurile produselor dintr-o listă).

4. Afișați în interfață un mesaj de eroare clar în caz de:

  • URL invalid;
  • pagina nu poate fi accesată (probleme de rețea);
  • structura paginii nu corespunde așteptărilor (nu pot fi găsite elementele dorite).

5. (Opțional) Oferiți posibilitatea exportării informațiilor extrase într-un fișier .csv sau .txt.

Rezultat așteptat:

O aplicație cu interfață grafică care permite introducerea unui URL, preluarea conținutului paginii, extragerea anumitor date și afișarea lor într-o formă structurată.

Varianta 4. Aplicație de criptografie

Să se elaboreze o aplicație Python cu interfață grafică pentru criptarea și/sau semnarea simplă a unor mesaje text.

Notă: această variantă se alocă exclusiv grupelor de studii SI.

Cerințe:

1. Creați o interfață grafică (ex.: cu tkinter) care să permită utilizatorului:

  • introducerea unui mesaj text;
  • introducerea unei chei (ex.: deplasare pentru cifrarea de tip Cezar sau un cuvânt-cheie pentru un cifru mai avansat);
  • alegerea operației: „Criptează”, „Decriptează”, „Calculează hash”.

2. Implementați cel puțin un algoritm simplu de criptare simetrică clasică (ex.: Cezar, substituție simplă sau Vigenère), care să poată fi folosit atât pentru criptare, cât și pentru decriptare.

3. Utilizați biblioteca standard hashlib pentru calculul unor valori hash (ex.: SHA-256) ale mesajului inițial sau criptat și afișați rezultatul în interfață.

4. Adăugați butoane pentru:

  • „Șterge” – pentru curățarea câmpurilor de intrare/ieșire;
  • „Salvează în fișier” – pentru salvarea mesajului criptat sau a hash-ului într-un fișier text.

5. Afișați în interfață mesaje de avertizare/eroare pentru cazuri precum: cheie lipsă, mesaj lipsă, caractere neacceptate etc.

Rezultat așteptat:

O aplicație cu GUI care permite criptarea/decriptarea unor mesaje text și calculul hash-ului acestora, ilustrând concepte de bază din criptografie.

Evaluarea rezultatelor efectuării lucrării practice:

Pontaj:

    • Nota 5 pentru implementarea unei aplicații funcționale conform variantei alese, cu interfață grafică și realizarea a cel puțin 3 cerințe specifice;
    • +1 pentru utilizarea corectă și justificată a cel puțin unei biblioteci standard și a unei biblioteci populare (externă) relevante pentru temă;
    • +1 pentru structură modulară clară (funcții, clase, separarea logicii de interfață, tratarea evenimentelor GUI într-un mod coerent);
    • +3 pentru explicații corecte și răspunsuri argumentate la întrebările cadrului didactic privind alegerea bibliotecilor, arhitectura aplicației, funcționarea interfeței grafice și a algoritmilor utilizați.

Penalități:

    • −1 pentru lipsa interfeței grafice (aplicația funcționează doar în consolă) sau o interfață minimă care nu permite testarea cerințelor;
    • −1 pentru absență la ora practică în care s-a oferit sarcina sau demonstrația lucrării;
    • −1 pentru fiecare săptămână de întârziere la predarea lucrării;
    • −2 pentru încălcarea principiilor de etică academică (plagiat, copiere neautorizată, lipsa surselor proprii).