Page 1
opencv-python
Standard

OpenCV / Python – Primi passi

 

L’utilizzo di OpenCV rende veramente semplice l’elaborazione di immagini e video ed è ancora più semplice scoprire come python si presti bene a questo utilizzo. Prima di entrare nei dettagli voglio fare un piccolo riepilogo di quello che stiamo per utilizzare:

PRO

  • Semplicità d’uso;
  • Velocità di scrittura del codice;
  • Sorgenti efficienti;
  • Utilizzo nativo di strutture dati efficienti (numpy);
  • Si può fare di tutto!

Continue Reading →

extendedcampania
Standard

Google I/O Extended Campania

Google I/O è una conferenza annuale tenuta da Google a San Francisco che, è ormai diventata un punto di riferimento per aziende, startups, sviluppatori e progettisti.

Il GDG Campania organizza l’edizione Extended che consisterà in tre giornate parallele con l’edizione di San Francisco con alcune esclusività.

Google I/O Extended è un evento totalmente GRATUITO ed è un’occasione per scambiare esperienze, impressioni sulle tecnologie Google e per costruire una rete di relazioni professionali.

L’iniziativa è rivolta a Studenti, Professionisti, Startups, Aziende e appassionati del settore.

L’evento si terrà nei giorni del 15 – 16 – 17 Maggio 2013.

Il link di riferimento con tutte le informazioni è il seguente:

Google I/O Extended Campania

Il link per le registrazioni:

Google I/O Extended Campania REGISTRAZIONE

Per semplificare le cose aggiungo il modulo di registrazione anche qui:

numpy4
Standard

Introduzione a Numpy

Python non è famoso per l’efficienza computazionale, ma esistono librerie ed estensioni che lo rendono adatto al calcolo numerico e ad alte performance. La prima fra tutte è sicuramente numpy. Troverete il sito ufficiale a questo indirizzo: numpy.org, mentre la documentazione qui: docs.scipy.org

Numpy è stata scelta del team di opencv per essere integrato all’interno del framework, infatti, la maggior parte delle operazioni vengono effettuate in strutture dati integrate in numpy. La prima struttura dati da comprendere sono gli array N-dimensionali ‘ndarray': Continue Reading →

opencv150x125
Standard

Computer Vision con OpenCV e Python – Introduzione & installazione

 

Uno degli argomenti più interessanti nel mondo della Computer Science è sicuramente la Computer Vision che possiamo definire in poche parole come:

Computer vision is a field that includes methods for acquiring, processing, analyzing, and understanding images and, in general, high-dimensional data from the real world in order to produce numerical or symbolic information, e.g., in the forms of decisions. Wikipedia

Quindi, brevemente, come la metodologia per l’acquisizione, l’elaborazione, l’analisi e la comprensione di immagini e dati dal mondo reale.

Tutta la Computer Vision ha solide basi matematiche, dunque per affrontare questo argomento dobbiamo essere a conoscenza di una certa quantità di teoria (o altrimenti ci potremmo trovare ad affrontare problematiche di non semplice risoluzione). Ad ogni modo non è per questo che siamo qui :) ma per introdurvi come poter effettuare queste operazioni all’apparenza complesse con pochi semplici strumenti. Il segreto sta tutto in un framework chiamato OpenCV che mette a disposizione tutto il necessario per le più disparate operazioni di image processing e per la ricerca di nuove e più performanti tecniche di analisi delle immagini.

Continue Reading →

sharedpref
Standard

[Android Lab] Shared Preferences

Oggi mi è stato chiesto se potessi fare un piccolo tutorial sulle Shared Preferences e come potrei non accontentare i miei lettori!!!

Cosa sono?

Le Shared Preferences permettono di salvare dei dati formati da una coppia chiave/valore (esattamente come in un dizionario) e renderli persistenti e recuperabili anche dopo la chiusura dell’applicazione, in questo modo possiamo salvare molto semplicemente alcuni dati importanti che vogliamo non vadano perduti. I tipi di dato che possiamo inserire sono i seguenti:

  • Boolean;
  • Float;
  • Int;
  • Long;
  • String;

Questo strumento però ci permette di fare molto di più! Ad esempio se abbiamo dei dati che vogliamo utilizzare in tutta l’applicazione invece di inviarli ad un activity all’altra utilizzando gli intent possiamo farlo tramite questo utile strumento. Questo metodo ci consente quindi di “snellire” l’applicazione evitando di avere dati ridondanti, e che appesantiscono la nostra applicazione.

Andiamo al sodo…

Abbiamo una classe denominata SharedPreferences che ci fornisce tutti gli strumenti di cui abbiamo bisogno senza complicarci troppo le cose. Come prima cosa dobbiamo utilizzare una SP questa può avere un nome (nel caso vogliamo crearne più di una, o se ci piace semplicemente tenere tutto sotto controllo) oppure essere anonima. Abbiamo due metodi per fare questo:

  • getSharedPreferences(String name, int mode):  abbiamo bisogno di specificare il nome della risorsa a cui vogliamo accedere e in che modalità (privata o accessibile a tutti);
  • getPreferences(int mode): come sopra ma abbiamo bisogno solo della modalità di accesso;

Dopo aver richiesto il file delle preferenze non ci resta che accedere in lettura/scrittura:

  • La lettura è estremamente semplice basta richiamare la preferenza come scritto sopra e richiedere il tipo di dato che ci interessa, ad esempio se è una stringa useremo getString(), un intero getInt() un boooleano getBoolean() e così via. Ogni metodo richiede due argomenti:
    1. La chiave utilizzata per memorizzare il dato;
    2. Un valore di default che sarà restituito nel caso non fosse stato trovato nessun dato;

// 0 corrisponde a modalità privata
SharedPreferences prefs = getSharedPreferences(prefsName, 0);
String nome = prefs.getString("Nome", "Nome non trovato");
  • La scrittura è un po più sofisticata poiché abbiamo bisogno di un oggetto della classe SharedPreferences.Editor per poter scrivere sul file. Fortunatamente la SharedPreference che andiamo ad utilizzare possiede già il necessario per poter scrivere su di essa, allora ci basterà invocare il metodo edit() e per poter scrivere ci basterà chiamare i metodi get<Type>() con il tipo di dato da inserire. Tutto quello che abbiamo fatto fin’ora però non va a scrivere direttamente sul file, ma per far questo dobbiamo eseguire commit() che conferma l’operazione:

SharedPreferences.Editor prefsEditor = prefs.edit();
prefsEditor.putString("Nome", "Emanuel");
prefsEditor.commit();

Questo è sostanzialmente tutto quello di cui c’è bisogno sapere, tutto molto semplice!

Lab

Bene ora apriamo Eclipse e proviamo a fare una piccola applicazione di esempio:

Creiamo la solita activity io l’ho chiamata SaveSharedActivity e nel layout ho aggiunto tre TextView:

  • Nome;
  • Cognome;
  • Email;

Tre EditText per inserire i campi sopraccitati e un bottone per passare alla seconda activity;

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SaveSharedActivity" >
<EditText
android:id="@+id/eNome"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/tNome"
android:layout_marginLeft="18dp"
android:layout_marginTop="16dp"
android:ems="10"
android:inputType="textPersonName" />

<TextView
android:id="@+id/tCognome"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/eNome"
android:layout_below="@+id/eNome"
android:layout_marginTop="17dp"
android:text="Cognome" />

<TextView
android:id="@+id/tNome"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/eNome"
android:layout_alignParentTop="true"
android:layout_marginTop="24dp"
android:text="Nome" />

<EditText
android:id="@+id/eCognome"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/tCognome"
android:layout_below="@+id/tCognome"
android:layout_marginTop="25dp"
android:ems="10"
android:inputType="textPersonName" >

<requestFocus />
</EditText>

<TextView
android:id="@+id/tMail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/tNome"
android:layout_centerVertical="true"
android:text="Email" />

<EditText
android:id="@+id/eEmail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/tMail"
android:layout_below="@+id/tMail"
android:layout_marginTop="29dp"
android:ems="10"
android:inputType="textEmailAddress" />

<Button
android:id="@+id/next"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="55dp"
android:text="Salva e prosegui" />
</RelativeLayout></pre>

Nell’activity creiamo un attributo con tipologia “public static final String” (in modo che sia accessibile in tutto il progetto senza restrizioni):

public class SaveSharedActivity extends Activity {
    public static final String SharedPrefName = "Shared";

Creiamo i tre EditText con il bottone:

    private EditText eNome;
    private EditText eCognome;
    private EditText eEmail;
    private Button saveAndGoBtn;

L’onCreate conterrà le inizializzazioni dei quatro campi e l’assegnazione di un azione al Button

    private OnClickListener saveAndGoAction = new OnClickListener() {
    @Override
    public void onClick(View v) {
        // Richiamiamo la nostra preferenza tramite il nome
        SharedPreferences prefs = getSharedPreferences(SharedPrefName, 0);
        // Per poterla editare abbiamo bisogno di un oggetto Editor che ci è fornito dalla SP stessa
        SharedPreferences.Editor prefsEditor = prefs.edit();
        // Inseriamo tutte le righe chiave/valore di cui necessitiamo
        prefsEditor.putString("Nome", eNome.getText().toString());
        prefsEditor.putString("Cognome", eCognome.getText().toString());
        prefsEditor.putString("Email", eEmail.getText().toString());
        // Eseguiamo il commit per scrivere effettivamente nel file
        prefsEditor.commit();
        Intent intent = new Intent(getApplicationContext(), PrintShared.class);
        startActivity(intent);
    }
};

Abbiamo recuperato la SP tramite il metodo getSharedPreferences() e gli abbiamo assegnato come nome quello creato poco fa. Qui avevamo necessità di scrivere e abbiamo a questo scopo creato un oggetto della classe SharedPreferences.Editor, abbiamo inserito tre stringhe con i valori degli EditText e infine è stato effettuato un intent per richiamare la seconda activity chiamata PrintShared.

Il layout di PrintShared è veramente basilare solo tre TextView di tipo Large in cui inserire i dati presenti nella SharedPreference.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".PrintShared" >

<TextView
android:id="@+id/printNome"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="30dp"
android:text="Nome"
android:textAppearance="?android:attr/textAppearanceLarge" />

<TextView
android:id="@+id/printCognome"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/printNome"
android:layout_centerHorizontal="true"
android:layout_marginTop="100dp"
android:text="Cognome"
android:textAppearance="?android:attr/textAppearanceLarge" />

<TextView
android:id="@+id/printEmail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/printCognome"
android:layout_centerHorizontal="true"
android:layout_marginTop="100dp"
android:text="Email"
android:textAppearance="?android:attr/textAppearanceLarge" />

</RelativeLayout>

Mentre  l’activity contiene i tre attributi che si riferiscono alle TextView e nell’onCreate andiamo ad assegnargli i valori nella SharedPreference.

SharedPreferences prefs = getSharedPreferences(SaveSharedActivity.SharedPrefName, 0);
this.tNome.setText(prefs.getString("Nome", "Nome non trovato"));
this.tCognome.setText(prefs.getString("Cognome", "Cognome non trovato"));
this.tEmail.setText(prefs.getString("Email", "Email non trovata"));

Abbiamo acceduto al nome precedentemente creato per recuperare la preference e letto i dati che erano al suo interno tramite i tre getString().

FINE!

Ecco un anteprima:

sahredprefpreview

Vi allego i file del progetto che ho utilizzato:

SharedPreferences Android Lab (161)
Standard

Buon Compleanno!

annivesario

Oggi è il primo anniversario del blog! Compie un anno di vita! Voglio ringraziare tutti gli utenti che hanno utilizzato e continuano ad utilizzare questo spazio, spero che possa essere stato utile a tutti quelli che hanno deciso di seguirlo, per me è stato fantastico poter scrivere per voi e far si che sia potuto crescere nel migliore dei modi. Il blog continuerà a sfornare contenuti sempre più ricchi ed interessanti!

Vorrei ora condividere con voi le statistiche per questo primo anno di vita:

http://jetpack.me/annual-report/34720355/2012/

Spero che continuiate a far sentire la vostra voce tramite i commenti e le email, siete sempre i benvenuti che siano critiche, domande o quant’altro :)

*Immagine in evidenza: http://www.roseblossomlegacies.com/2012/04/one-year.html

devfest_campania
Standard

DevFest Campania

 

Il Google Developers Group Campania in collaborazione conl’Università degli studi di Napoli Parthenope e l’Open Source Lab presenta:

DevFest Campania

Per la giornata del 6 Dicembre sono previste le seguenti tematiche:

  • Introduzione ad Android;
  • Introduzione a Cloud Computing e Google App Engine;
  • Google Cloud Messaging;
  • Advanced Android Technologies;
  • CodeLab Google App Engine;
  • CodeLab Android;
  • UniParthenope API Store;
  • Restful API software stack: how to deploy a FRAPI environment;
Per la giornata del 7 Dicembre:
  • Hackaton di un’intera giornata!
  • Gli siluppatori/teams migliori saranno invitati a presentare la propria applicazione con delle slides.
  • Tanti premi in palio!
L’evento si svolgerà presso l’Università degli Studi di Napoli “Parthenope” presso la Facoltà di Scienze e Tecnologie sita nel Centro Direzionale di Napoli, Isola C4.

INGRESSO GRATUITO!!!

Per maggiori informazioni sull’evento e per effettuare la registrazione è possibile riferirsi al seguente link:

DevFest Campania Registration 

O in alternativa potete utilizzare il seguente modulo:

python-logo-glassy
Standard

Installare ed integrare python nei SO

 

Come ho detto nel precedente articolo python è un linguaggio di programmazione multipiattaforma, cioè è possibile utilizzarlo su più sistemi operativi senza restrizioni derivanti da quest’ultimi. Ora vedremo come integrarli nei nostri sistemi.

I file per tutti i tipi di sistemi li trovate a questo indirizzo: http://python.org/download/

Continue Reading →

Python-Programming-Language
Standard

A Beautiful and Useful Programming Language: Python

Dopo tanto tempo che non pubblico un articolo voglio parlarvi di un linguaggio di programmazione che ultimamente sto utilizzando molto e che mi da sempre più soddisfazioni, sia per la sua semplicità che per la sua potenza! Come suggerisce il titolo dell’articolo quello di cui voglio parlavi è PYTHON!

Python è un linguaggio multipiattaforma, interpretato orientato agli oggetti, infatti, è fornito di un interprete che legge il codice python ed esegue le istruzioni al suo interno. Su sistemi Mac OS X e linux viene fornito di default insieme al sistema operativo, mentre su sistemi windows è necessario utilizzare l’installer per integrarlo nel sistema. Troverete sul sito ufficiale direttamente a questo indirizzo:

Python download

Inoltre troverete la documentazione per le varie versioni di python in questa pagina: http://docs.python.org/, basterà scegliere quale versione utilizzate e sarete reindirizzati verso la giusta sezione. 

In questa guida mi riferirò a python usando una terminologia familiare agli utilizziatori di sistemi unix-like (ma per chi vuole provarlo su windows non c’è quasi alcuna differenza se non in alcuni comandi specifici del terminale) Continue Reading →

130px-Apple_logo
Standard

In ricordo di Steve Jobs

 

Anche se ormai è passato un anno mi fa piacere ricordarlo attraverso questo link messo a disposizione da Apple:

http://www.apple.com/it/stevejobs/

Penso non ci sia bisogno di aggiungere altro alle tante parole che sono state dette sia che fossero positive che negative…

Solo un pensiero per una persona che si è indubbiamente fatta sentire in questi anni. Per chiunque voglia lasciare un pensiero basta mandare un’email a questo indirizzo: [email protected]