Acquisire ed elaborare immagini - Prima parte

Slides:



Advertisements
Presentazioni simili
Gli ipertesti del World Wide Web Funzionamento e tecniche di realizzazione a cura di Loris Tissìno (
Advertisements

Acquisire ed elaborare immagini - Terza parte
1 Introduzione ai calcolatori Parte II Software di base.
APRIRE PROGRAMMA DI POSTA OUTLOOK EXPRESS
Interazione Uomo - Macchina
PHP.
I linguaggi di programmazione
INTERNET : ARPA sviluppa ARPANET (rete di computer per scopi militari)
Ogni PC, per iniziare a lavorare, ha bisogno di un sistema operativo. Infatti questo è il primo programma che viene eseguito e che permette all'utente.
Programmazione con socket
IL NOSTRO LABORATORIO. Di INFORMATICA.. Presentazione: Nel nostro laboratorio abbiamo 24 postazioni con dei computer di tipo Desktop con queste caratteristiche:
IL NOSTRO LABORATORIO. Di INFORMATICA..
IL NOSTRO LABORATORIO Di INFORMATICA. Presentazione Nel nostro laboratorio abbiamo 24 postazioni con dei computer di tipo Desktop con queste caratteristiche:
Organizzazione di una rete Windows 2003
Sicurezza e Policy in Active Directory. Sommario Amministrazione della sicurezza in una rete Windows 2003 Amministrazione della sicurezza in una rete.
Amministrazione di una rete con Active Directory.
Programmazione socket
Laurea Triennale in Infermieristica
Giuseppe Fabio Fortugno.
Come programmare servizi di rete?
Il Software: Obiettivi Programmare direttamente la macchina hardware è molto difficile: lutente dovrebbe conoscere lorganizzazione fisica del computer.
Indirizzi delle variabili A ogni variabile sono associati tre concetti fondamentali: il valore memorizzato; il tipo dati di appartenenza; lindirizzo. Il.
JavaScript Laboratorio di Applicazioni Informatiche II mod. A.
Argomenti dalla linea dei comandi Gli argomenti possono essere passati a qualsiasi funzione di un programma, compresa la main(), direttamente dalla linea.
File.
1 Corso di Informatica (Programmazione) Lezione 4 (24 ottobre 2008) Architettura del calcolatore: la macchina di Von Neumann.
Architettura del World Wide Web
Corso di Informatica Corso di Laurea in Conservazione e Restauro dei Beni Culturali Gianluca Torta Dipartimento di Informatica Tel: Mail:
Internet Explorer Il browser.
Struttura dei sistemi operativi (panoramica)
CORSO DI INFORMATICA LAUREA TRIENNALE-COMUNICAZIONE & DAMS
Acquisire ed elaborare immagini - Seconda parte
I Thread.
Il protocollo ftp.
RETI E INTERNET.
Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio.
File di testo, file binari
Posta elettronica : per iniziare : per iniziare Primi passi con la posta elettronica Primi passi con la posta elettronica
I File.
4 Cosa è una rete? ã Punto di vista logico: sistema di dati ed utenti distribuito ã Punto di vista fisico: insieme di hardware, collegamenti, e protocolli.
Corso di PHP.
DBMS ( Database Management System)
Corso di Informatica per Giurisprudenza Lezione 7
Modulo 7 – reti informatiche u.d. 3 (syllabus – )
INTRODUZIONE l sistema operativo è il primo software che lutente utilizza quando accende il computer; 1)Viene caricato nella memoria RAM con loperazione.
Usare la posta elettronica con il browser web
Guida IIS 6 A cura di Nicola Del Re.
STRUTTURA GENERALE DI UN ELABORATORE
Server Web in una rete Windows Sommario Meccanismi di accesso remoto Meccanismi di accesso remoto Introduzione ai Server Web Introduzione ai Server.
Configurazione in ambiente Windows Ing. A. Stile – Ing. L. Marchesano – 1/23.
AICA Corso IT Administrator: modulo 4 AICA © EUCIP IT Administrator Modulo 4 - Uso Esperto della Rete Risoluzione dei Problemi e Analisi del Traffico.
1 Ripassino Reti di Computer Carasco 19/02/ Che cosa è una rete informatica? Una rete informatica è un insieme di computer connessi tra di loro.
BIOINFO3 - Lezione 41 ALTRO ESEMPIO ANCORA Progettare il comando di creazione di una tabella di pubblicazioni scientifiche. Come chiave usare un numero.
Amministrazione della rete: web server Apache
Lezione 1 Approccio al sistema operativo : la distribuzione Knoppix Live Cd Knoppix 3.6 Interfacce a caratteri e grafica: console e windows manager File.
Prima di iniziare… Durata attività: due lezioni frontali + una lezione laboratorio + compiti per casa Prerequisiti: elementi base architettura dei calcolatori.
FTP File Transfer Protocol
Creato da Riccardo Nuzzone
Internet e HTML Diffusione di informazioni mediante la rete Internet.
INTERFACCE Schede elettroniche che permettono al calcolatore di comunicare con le periferiche, che possono essere progettate e costruite in modo molto.
Indice argomenti Installazione e configurazione
TW Asp - Active Server Pages Nicola Gessa. TW Nicola Gessa Introduzione n Con l’acronimo ASP (Active Server Pages) si identifica NON un linguaggio di.
1 Informatica Generale Alessandra Di Pierro Ricevimento: Giovedì ore presso Dipartimento di Informatica, Via Buonarroti,
Reti di calcolatori e sicurezza “Configurare il web-server Apache” a cura di Luca Sozio.
Servizi Internet Claudia Raibulet
Sistemi operativi di rete Ing. A. Stile – Ing. L. Marchesano – 1/18.
Corso integrato di Matematica, Informatica e Statistica Informatica di base Linea 1 Daniela Besozzi Dipartimento di Informatica e Comunicazione Università.
Informatica Lezione 8 Psicologia dello sviluppo e dell'educazione (laurea magistrale) Anno accademico:
Protocolli di rete. Sommario  Introduzione ai protocolli di rete  Il protocollo NetBEUI  Il protocollo AppleTalk  Il protocollo DLC  Il protocollo.
MyVue FAQ Linea di supporto (Radiologia Ospedale del Delta): , orario: FAQ (Frequently Asked Questions) In caso avessi bisogno di ulteriore.
Transcript della presentazione:

Acquisire ed elaborare immagini - Prima parte Luca Capisani

SOMMARIO Acquisizione immagini con Network Camera Rete Ethernet e protocollo HTTP Sistema operativo Linux Rappresentazione delle immagini Richiedere/Ottenere immagini con HTTP ESEMPIO: Configurare la telecamera in diretta Esempio: GIMP e le immagini esadecimali

SOMMARIO - 2 La programmazione nel linguaggio C Blocchi fondamentali di un programma C ESEMPI: Un semplice programma C Le strutture di controllo del linguaggio C Le librerie di rete di Linux per il linguaggio C Come acquisire una immagine da telecamera Come salvare l’immagine su un file

Acquisizione immagini con Network Camera Scambio di immagini Mediante Ethernet/WI-FI Internet Accesso da qualunque dispositivo che accede alla rete Internet!

Network Camera: quali risorse utilizza? La rete Ethernet La rete Internet I protocolli TCP/IP Il protocollo Client/Server Browser per Internet!!!

Network Camera: vantaggi? Perché è una soluzione interessante? Vecchie telecamere: connessioni particolari Servivano schede apposite, difficili da trovare e programmare Mancavano i drivers per applicazioni particolari Tali interfacce erano spesso analogiche e costose Un solo utilizzatore alla volta!!! Nuove telecamere: Ethernet e WI-FI Ethernet e Wi-FI supportate da buona parte dei sistemi Bassissimo costo di realizzazione della connessione Ottima veliocità di trasmissione dati Molto semplice condividere la telecamera tra più utenti Non serve software dedicato!

Network Camera: Configurazione Per poter funzionare in rete bisogna: Impostare l’accesso di utenti Configurare l’indirizzo IP Configurare il tipo di video desiderato Configurare la luminosità e i colori L’utente usa un calcolatore da configurare: Indirizzo IP del calcolatore Software in grado di acquisire e visualizzare le immagini/ il video

Network Camera: Configurazione utenti Serve per Impostare chi può usare la telecamera Evitare che venga usata da chi non è autorizzato (la rete è pubblica!) Evitare che chiunque possa cambiare le impostazioni

Network Camera: Configurazione Indirizzo IP La telecamera è connessa su una rete condivisa da tanti dispositivi Deve avere un indirizzo IP unico, non utilizzato da altri dispositivi, coerente con la rete a cui è connessa Esempio: 192.168.121.12 La netmask specifica quali altri indirizzi IP appartengono alla stessa rete: Esempio 255.255.255.0 significa che appartengono alla rete tutti gli indirizzi che iniziano con 192.168.121 Sbagliando l’indirizzo IP non è possibile usare la telecamera!

Network Camera: Formato video/immagine Permette di: Impostare la risoluzione dell’immagine Es. 320x240 Il tipo e la qualità dell’immagine Es. Dimensione del file ecc. Quante immagini al secondo vengono spedite Es. 15 frame/secondo

Network Camera: Configurazione colori e luminosità Da bianco e nero al massimo risalto dei colori Luminosità Va impostata in base a quanta luce c’è nell’ambiente da filmare Contrasto Permette di “sbiadire” l’immagine oppure “renderla più viva”

Network Camera: Collegamento e configurazione calcolatore Client Schema di collegamento: Switch Ethernet Altri Utenti Utente IP: 192.168.0.34 MASK: 255.255.255.0 Il client deve avere: Indirizzo IP Netmask Devono essere coerenti con la rete di appartenenza! IP: 192.168.0.1 MASK: 255.255.255.0

Rete Ethernet e protocollo HTTP Sono supportati da TUTTI gli apparecchi in grado di connettersi alla rete! HTTP: permette lo scambio di FILES: Il Client (utente) chiede al server (telecamera) un file Il server risponde con il file richiesto (se esiste)

Come avviene lo scambio di dati sulla rete Ciascun livello (applicazione TCP, IP, Scheda Rete) ha una propria specifica funzione. L’applicazione traduce il filmato in una serie di “pacchetti di dati” da spedire in rete Applicazione Applicazione TCP TCP IP IP Scheda Rete Scheda Rete

Come avviene lo scambio di dati sulla rete (2) Il flusso di dati viene suddiviso in “Pacchetti” Ogni pacchetto attraversa la rete indipendentemente dagli altri Un pacchetto può essere perso in tutto o in parte durante il percorso Ogni pacchetto contiene tutte le informazioni rilevati sul percorso Applicazione Applicazione TCP TCP IP IP Scheda Rete Scheda Rete

A cosa serve il protocollo IP Quando la rete è complessa (es. Internet) non è facile capire quale strada connette meglio due utenti La rete IP serve, come una guida telefonica, per trovare a che rete è connesso il destinatario!!!! Ogni router ha una rubrica telefonica che dice dove vanno i pacchetti a seconda del destinatario! 13.33.x.x?? 13.33.x.x ???? 193.201.x.x 13.33.x.x

A cosa serve il protocollo TCP TCP serve per: Mantenere una connessione tra telecamera e client Controllare che non siano stati persi dati sulla rete Permettere tanti flussi di dati contemporanei Facilitare l’applicazione nel gestire la trasmissione

Cos’è una porta? Che porta useremo? E’ il meccanismo per poter permettere a tante applicazioni di usare la stessa architettura di rete senza interferenze!!!! TELNET HTTP POP3 Porta 80: è la porta predefinita per le comunicazioni HTTP alla base del trasferimento delle pagine WEB tra i server WWW e i client (utenti). Viene usata dall’applicazione Internet Explorer (o Mozilla) e dal rispettivo server (Telecamera, Apache o Microsoft Internet Information server). P23 P80 P110 Applicazione TCP IP Scheda Rete

Possiamo vedere il traffico della rete? Con il programma gratuito wireshark, si può vedere quali informazioni vengono ricevute e quali vengono spedite dal nostro PC:

Il protocollo HTTP: a cosa serve? Il protocollo HTTP (HyperText Transfer Protocol) permette di trasferire dei files da un server HTTP (Apache, Internet Information Server, Network Camera) a un client HTTP (Mozilla Firefox, Internet Explorer) Permette di controllare se il richiedente è autorizzato a ricevere il file Fornisce informazioni supplementari riguardo al file trasferito e alle caratteristiche del client e del server.

Scambio di richieste risposte tra PC (client) e telecamera (server) Richiesta: GET /mjpg/image.jpg HTTP/1.1 Host: 192.168.121.12 User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3 Accept: image/png,image/*;q=0.8,*/*;q=0.5 Accept-Language: it-it,it;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: http://192.168.121.12/view/view.shtml?imagePath=/mjpg/video.mjpg&size=1 Authorization: Basic cm9vdDpmcmFuY2VzY2E= Nome del file richiesto e vers. HTTP Indirizzo IP del server Informazioni sull’applicazione richiedente il servizio Password di autorizzazione

Scambio di richieste risposte tra PC (client) e telecamera (server) Risposta: HTTP/1.0 200 OK Cache-Control: no-cache Pragma: no-cache Expires: Thu, 01 Dec 1994 16:00:00 GMT Connection: close Content-Type: multipart/x-mixed-replace; boundary=--myboundary --myboundary Content-Type: image/jpeg Content-Length: 29423 ......JFIF.. Il server risponde che la richiesta è corretta! Ci informa che il contenuto richiesto è una immagine JPEG ed è lunga 29423 bytes!!!! Il JPEG inizia a essere trasmesso!!!!

Qual è la procedura per farsi mandare una immagine? Mi connetto al server Applicazione con protocollo HTTP Manda una richiesta alla porta 80 del server Il server accetta la connessione Invio una richiesta GET /mjpg/image.jpg HTTP/1.1 Specifico la password e altre info Il server risponde con le sue informazioni dalla porta 80 alla mia porta (che ha un numero a caso) Alla fine comincia ad inviare i pezzi del file richiesto, Tipicamente circa 1500 bytes alla volta

Il Sistema Operativo Linux E’ composto da tantissimi blocchi, i quali sono sviluppati da gruppi indipendenti di programmatori volontari E’ facilmente programmabile per interfacciarsi con la rete La configurazione della rete è semplice Ci sono tanti strumenti che aiutano in caso di problemi Offre gratuitamente tanti tool per la programmazione: Compilatore C, C++, Java … Editor Librerie per fare qualunque cosa Interagire con l’utente Accedere alla rete Convertire le immagini Leggere e Memorizzare i dati sul disco

Linux: componenti fondamentali Distribuzioni (Chi mette assieme le componenti fondamentali) Kernel (il cuore del sistema operativo) File system (gestisce i files di sistema e utenti) Utenti e amministratore (Ciascuno ha le proprie regole!) Interfaccia grafica (NON è parte fondamentale!) Terminale (è il modo più diretto per accedere al sistema) Sistema di rete (Offre tutti gli strumenti indispensabili e oltre!) I pacchetti software (sono sempre accessori rispetto al “piccolo kernel”)

Distribuzioni Dato che Linux è composto da tantissimi piccoli blocchi programmati indipendentemente Alcune importanti organizzazioni si occupano di “mettere assieme” i blocchi Per rendere più semplice ed immediata l’installazione Per favorire gli utenti non esperti Per assicurarsi che il sistema complessivo funzioni bene Per tener traccia di tutti gli ultimi aggiornamenti sulla sicurezza Le più famose: Mandriva, Ubuntu, Fedora, SuSE, Knoppix, Debian, Gentoo, Slackware… Elenco completo: http://www.linux.org/dist/list.html

File system E’ l’insieme di tutti i programmi e dello spazio di memoria che servono per Memorizzare i files Evitare perdita di dati Ritrovare velocemente i dati Lo spazio di memoria di Linux è tipicamente organizzato in 3 partizioni root, “/”, mantiene l’albero principale delle directory /home, mantiene i files dell’utente swap, mantiene i files temporanei

Gli utenti e l’amministratore In linux, ogni programma Può essere creato solo da alcuni utenti Può essere installato solo dall’amministratore o da chi ne ha il permesso Può essere eseguito solo da chi ne ha il permesso In linux, ogni file Può essere letto solo da chi ne ha il permesso Può essere scritto/cancellato solo da chi ne ha il permesso Può essere eseguito (se è un programma) solo da chi ne ha il permesso In linux, ogni risorsa (rete, periferiche, audio,video, …) Può essere utilizzata solo da chi ne ha il permesso L’amministratore (root) ha sempre tutti i permessi e può decidere i permessi degli altri

Gli utenti e l’amministratore (2) Ogni utente: Ha una “user name” denominata login Ha una password Ogni utente può: Cambiare la propria password Cambiare i permessi dei propri files, dei propri programmi e delle proprie risorse Gli utenti non possono: Vedere alcuna password Utilizzare programmi, files, risorse assegnate ad altri L’amministratore (root) può: Modificare le password di chiunque (non le può vedere) Utilizzare e modificare qualunque programma, files o risorsa (rischio!!!)

Il terminale E’ il modo più diretto per interagire con tutte le funzioni del sistema operativo È dotato di un prompt che risponde ai comandi dell’utente Il prompt è gestito dalla shell che aiuta l’utente a Velocizzare le operazioni noiose Ricordare tutti i comandi utilizzati Effettuare alcune operazioni automaticamente Gestire l’interazione con i programmi

Il comando sudo Entrare come amministratore (root) è pericoloso: Si possono cancellare, distruggere files e configurazioni Si può resettare la macchina senza autorizzazioni Soluzione: è meglio usare l’utente root solo quando è necessario!!! Solo alcuni comandi richiedono di essere amministratore Basta scrivere prima del comando desiderato, il comando sudo e inserire la password: Esempio: enzo@www-server:~$ sudo ifconfig [sudo] password for enzo: **** ……… NB: la password non appare a terminale!!!

Impostare gli indirizzi di rete Un Computer (Host IP), per connettersi alla rete, ha bisogno di: Un Indirizzo IP e una netmask Un indirizzo per il default gateway Un indirizzo del server DNS Tale indirizzo serve per tradurre i nomi degli host con gli indirizzi IP La scheda di rete viene individuata con la sigla eth0

Impostare gli indirizzi di rete (2) Indirizzo IP e netmask: sudo ifconfig eth0 192.168.x.x netmask 255.255.x.x Default gateway: sudo route del default (cancella una route esistente) sudo route add default gw 192.168.x.x Server DNS: sudo echo nameserver 151.99.x.x > /etc/resolv.conf

I pacchetti software Tutte le distribuzioni sono composte da pacchetti software: Spesso l’istallazione di alcuni pacchetti rende indispensabile l’installazione di altri pacchetti, struttura gerarchica!!! Kernel Glibc (librerie) Bash (shell) libjpeg (x le immagini!) XORG (amb. Grafico) netfilter (firewall) CUPS (stampanti) OpenOffice (Word, Excel,…)

Installare il software da Internet: APT-GET INSTALL Scarica da Internet e installa automaticamente uno o più pacchetti software andando a cercare automaticamente le dipendenze Esempio: installazione editor GEDIT sudo apt-get install gedit Funziona solo sulle distribuzioni Debian-Ubuntu Mandriva: urpmi

Visualizzazione di un file con CAT E’ il modo più veloce per visualizzare un file da terminale Comando: cat /home/lab/pippo Visualizza il file pippo nella cartella /home/lab

Visualizzazione di un file esadecimale con HEXDUMP E’ il modo più veloce per visualizzare un file in esadecimale Comando: hexdump /home/lab/pippo Visualizza il file pippo nella cartella /home/lab

Editing di un file con GEDIT E’ un editor che ha funzioni specifiche per programmare. Si avvia da terminale con il comando gedit &

Rappresentazione delle immagini Ciascuna immagine è rappresentata nel computer per mezzo di numeri L’area viene suddivisa in tanti piccoli quadrati colorati Ci sono metodi efficienti per la memorizzazione Vediamone i dettagli.

Come viene rappresentata una immagine? ZOOM! Una immagine è una sequenza di tantissimi puntini colorati detti pixel (PICture ELement)

Dimensioni dell’immagine Una immagine è una grande matrice di pixel: La dimensione è il numero di pixel orizzontali x il numero di pixel verticali: 640x480 800x600 102x768 Ecc.

Colorazione pixel RGB! Ogni pixel ha un colore unico! Il colore del pixel è determinato in base a tre componenti fondamentali: Rosso – R: 0-255 Verde – G: 0-255 Blu – B: 0-255 In questo modo si possono ottenere più di 16 milioni di colori diversi (per ciascun pixel dell’immagine)!

Formati di immagine: cosa sono? Considerando il numero di pixels e il numero di colori di ciascun pixel, una immagine occupa tantissimo spazio. Una immagine si può memorizzare interamente così com’è Formato RASTER: occupa molto spazio! Esempio BMP Oppore si può memorizzare in modo da ridurre lo spazio occupato: Formato lossy. Esempio: JPG

I numeri esadecimali Sono rappresentazioni particolari dei numeri binari. Ogni numero è una cifra da 0 a F che corrisponde ai numeri da 0 a 15

Rappresentazione RGB esadecimale Esempio: il pixel È un mix dei colori: Rosso: 224/255 Verde: 36/255 Blu: 36/255 Si rappresenta su tre bytes RGB. Una rappresentazione semplice si ha in hex E02424 (E0 (224), 24 (36), 24(36))

ESEMPIO: Configurare la telecamera in diretta 1 coppia alla volta Accedere alla telecamera con la userid e la password di default Impostare un indirizzo IP e una netmask ammissibile per la rete Verificare e cambiare le impostazioni immagine/video Controllare che le modifiche abbiano effetto Non cambiare le password

Esempio: GIMP e le immagini esadecimali Aprire GIMP con il comando gimp & da terminale Creare una immagine nuova 1x1 pixel Immettere un pixel di un certo colore RGB Salvare l’immagine in uno dei seguenti formati: PBM PGM XPM PPM BMP Verificare con hexdump che cosa è stato scritto su disco Ripetere l’esercizio con una immagine 3x3

Creare una immagine di pochi pixel

Impostare un colore

Colorare un pixel con quel colore, gli altri in nero

Salvare l’immagine in uno dei formati RASTER

Fare alcune prove confrontando i vari formati RASTER Cosa cambia tra i vari formati raster? Cosa cambia tra una immagine di 1 pixel e una di 9? Cosa si vede salvando l’immagine come jpg?

La programmazione nel linguaggio C Rende semplice interagire con la rete ed elaborare le immagini Produce dei programmi estremamente veloci Non è indicato per creare programmi con finestre e pulsanti

Cosa serve per poter programmare in C Il compilatore GCC Le librerie di sistema (per aprire i files, connettersi alla rete, interagire con l’utente, ecc.) Alcune librerie aggiuntive per leggere/scrivere files jpeg Altre librerie contenenti funzioni già preparate per eseguire i programmi che ci interessano

Linguaggio C: il sistema operativo Funzionalità offerte dal sistema operativo Interfacciamento con l’utente (terminale ecc) Rete File system Ecc.

Il compilatore C di linux: GCC! Il suo funzionamento è semplicissimo: gcc nomefile.c Produce un file eseguibile denominato a.out Si esegue con il comando ./a.out Importante!!! Saper leggere i messaggi di errore di gcc!!!

Librerie di sistema: aiuto alla programmazione Ci sono compiti che non dobbiamo risolvere noi programmatori: Come si invia un dato sulla rete? Come si scrive un carattere sul video? Come si scrive un file? Risposta? Non ci interessa! Ci sono librerie già fatte per fare queste operazioni, basta saperle usare!

Librerie di sistema: aiuto alla programmazione Esempi: #include <stdio.h>: contiene tutto ciò che ci serve per gestire la stampa di caratteri a video! #include <sys/socket.h>, include <arpa/inet.h>, include <netdb.h>: contengono tutto ciò che ci serve per usare la rete! #include <string.h>: contiene tutto ciò che ci serve per usare le stringhe!

Librerie utente: permettono di scrivere il codice una volta per tutte! Esempio: Connettersi alla telecamera e richiedere una immagine è un problema ricorrente E’ meglio avere un pezzo di codice che lo fa, senza doverci preoccupare ogni volta del problema!

Blocchi fondamentali di un programma C Sezione INCLUDE: Serve per includere le librerie e altri files .c #include <stdlib.h> Con le parentesi < e > si includono le librerie di sistema #include “mialib.h” Con le virgolette si includono le librerie dell’utente (nella stessa cartella dei programmi) Inlcudere un file significa mettere il file indicato al posto della parola include!!! È come scrivere il codice al posto dell’include

Blocchi fondamentali di un programma C (2) Sezione DEFINE: Serve per definire le costanti #define imgX 640 #define imgY 480 Hanno lo stesso effetto di sostituire il numero al nome della costante prima di compilare il codice! Sezione del codice: Metodi del programma Sono le parti del programma Metodo main() Contiene quella parte di programma che viene chiamata non appena il programma parte Al suo interno chiama le altre parti (metodi) del codice

Blocchi fondamentali: metodo main() int main(int argc, const char ** argv){ //Questo è un commento leggiDati(); calcolaQualcosa(); scriviLaRisposta(); return 0; //Non ci sono errori }

Blocchi fondamentali: PRINTF() La funzione printf()serve per visualizzare qualcosa all’utente Comunicare una informazione all’utente. Esempio: printf(“Ciao, come va?”); Visualizza a video: Ciao, come va?

Un semplice programma in linguaggio C Nome file: prova.c #include <stdio.h> int main(int argc, const char ** argv){ printf(“Ciao, come va?”); return 0; }

Copiare, salvare, compilare ed eseguire l’esempio Copiare l’esempio con l’editor GEDIT Salvare il file .c Compilare con il comando gcc prova.c Eseguire con il comando ./a.out

Modificare l’esempio per scrivere il proprio nome e cognome Cosa devo cambiare per fare scrivere il mio nome e cognome? L’istruzione PRINTF serve per: Interagire con l’utente Comunicare all’utente qualcosa o il risultato NOTA: In questo momento noi siamo contemporaneamente programmatori e utenti! Programmatori quando scriviamo il programma, Utenti quando eseguiamo il programma e ne verifichiamo gli output interagendo con esso.

Scrivere nome, cognome ed età Nome file: età.c #include <stdio.h> int main(int argc, const char ** argv){ int annoNascita = 1982; int eta = 2008 – 1982; printf(“Luca Capisani, età %i”, eta); return 0; }

Salvare tutte le informazioni su un file: fprintf()! #include <stdio.h> int main(int argc, const char ** argv){ FILE *fptr = fopen(“f.txt","w"); int annoNascita = 1982; int eta = 2008 – 1982; fprintf(fptr,“Luca Capisani, età %i”, eta); fclose(fptr); return 0; } Per controllare che il file è corretto: cat f.txt dopo aver eseguito il programma

Blocchi fondamentali 2: le strutture di controllo Nell’esercizio di prima, ogni istruzione viene eseguita nell’ordine indicato. A volte è necessario eseguire istruzioni solo se si verificano certe condizioni Se piove Prendo l’ombrello Altrimenti Esco in bicicletta! A volte è necessario cambiare l’ordine delle istruzioni o ripetere l’esecuzione di alcuni blocchi Per fare una torta Aggiungere farina Aggiungere olio Aggiungere zucchero Mescolare il tutto Se non si amalgama, ricominciare dall’inizio

Istruzione condizionale IF THEN ELSE Esempio: mi dice se sono maggiorenne #include <stdio.h> int main(int argc, const char ** argv){ int annoNascita = 1982; int eta = 2008 – 1982; printf(“Luca Capisani, età %i \n”, eta); if (eta >= 18){ printf(“Sei maggiorenne! \n”); } return 0;

Cicli FOR Esempio: comunicare all’utente il conteggio da 1 a 10!!! Procedura: Scrivere 1; Calcolare 1 + 1 = 2 Scrivere 2; Calcolare 2 + 1 = 3 Scrivere 3; Calcolare 3 + 1 = 4 … Le istruzioni si ripetono! Come possiamo scrivere la stessa cosa più rapidamente???

Cicli FOR Esempio: comunicare all’utente il conteggio da 1 a 10!!! Non voglio ripetere le istruzioni uguali! Procedura: Imposto a = 0; Inizio di un ciclo a = a + 1 Scrivo (a) Mi fermo solo quando ho raggiunto il limite Le istruzioni non si ripetono più! Come possiamo scrivere la stessa cosa nel linguaggio C???

Esempio: Uso dei cicli #include <stdio.h> int main(int argc, const char ** argv){ int i; for (i = 0; i<10; ){ i = i+1; printf("i = %d \n" ,i); } return 0;

Uso delle librerie di rete Richiede di Includere le librerie di rete #include <sys/socket.h> #include <arpa/inet.h> #include <stdlib.h> #include <netdb.h> Configurare le impostazioni desiderate per la connesione Creare la connessione Utilizzarla per inviare/ricevere dati Chiudere la connessione

Configurare la rete… struct sockaddr_in *remote; int tmpres; char *ip; char *get; char buf[BUFSIZ+1]; char *host; char *page; host = "192.168.121.12"; page = PAGE; sock = create_tcp_socket(); ip = get_ip(host); remote = (struct sockaddr_in *)malloc(sizeof(struct sockaddr_in *)); remote->sin_family = AF_INET; tmpres = inet_pton(AF_INET, ip, (void *)(&(remote->sin_addr.s_addr))); if( tmpres < 0) { perror("Can't set remote->sin_addr.s_addr"); exit(8); }else if(tmpres == 0){ fprintf(stderr, "%s is not a valid IP address\n", ip); exit(7); } remote->sin_port = htons(PORT); if(connect(sock, (struct sockaddr *)remote, sizeof(struct sockaddr)) < 0){ perror("Could not connect"); exit(4);

Un semplice programma per richiedere una immagine alla camera #include <stdio.h> #include <sys/socket.h> #include <arpa/inet.h> #include <stdlib.h> #include <netdb.h> #include <string.h> #include <unistd.h> #include "netHTTP.h" #include "mylib.h" int PORT=80; char* HOST = "192.168.121.12"; //char* PAGE = "/mjpg/video.mjpg"; char* PAGE = "/jpg/image.jpg"; int pktCount=0; void dataRec(void *data, unsigned long int l){ pktCount++; printf("Ricevuto pkt %d len %d\n", pktCount, l); } int main(int argc, char **argv) { tcpConnect(); sendHTTPRequest(); memset(buf,0,sizeof(buf)); while((tmpres = recv(sock, buf, BUFSIZ, 0)) > 0){ dataRec(buf,tmpres); closeSock(); return 0;

Librerie!! #include <stdio.h> #include <sys/socket.h> Di sistema #include <stdio.h> #include <sys/socket.h> #include <arpa/inet.h> #include <stdlib.h> #include <netdb.h> #include <string.h> #include <unistd.h> Utente #include "netHTTP.h" #include "mylib.h"

Parametri!! Configurazione! int PORT=80; char* HOST = "192.168.121.12"; Voglio ricevere il filmato? //char* PAGE = "/mjpg/video.mjpg"; Voglio vedere solo “una foto”? char* PAGE = "/jpg/image.jpg";

Richiesta HTTP di una immagine Connessione TCP alla telecamera Avviene usando l’indirizzo IP 192.168.x.x e la Porta 80 tcpConnect(); Richiesta HTTP di tipo GET alla telecamera Specifica il file che mi interessa e che cosa sono in grado di fare (le mie caratteristiche) sendHTTPRequest();

Arriva l’immagine!!! Preparo lo spazio di memoria memset(buf,0,sizeof(buf)); Attendo ciasun “pacchetto” dalla rete e lo memorizzo while((tmpres=recv(sock,buf,BUFSIZ,0))> 0){ dataRec(buf,tmpres); }

Chiudo la connessione! Dico alla telecamera che ho finito di utilizzarla Non faccio più nessuna richiesta alla telecamera! closeSock();

Diagramma di flusso di connessione e richiesta INIZIO CONNESSIONE TCP RICHIESTA HTTP TRASFERIMENTO DI UN PACCHETTO FINE DATI??? NO! SI! CHIUSURA CONNESSIONE FINE

Dove va a finire la risposta? Nel nostro caso la risposta della telecamera va persa! Tuttavia vedremo la prossima volta come si può memorizzare su un file Alla fine possiamo visualizzare la foto con un comune programma da disegno!

Esercizio Fate un programma che, sommando tutte le lunghezze dei pacchetti ricevuti dalla telecamera, vi dica quanto era lunga l’immagine.