Sviluppare APP di realtà aumentata con Google AR
Parte 1
Si è fatto un gran parlare di Realtà Aumentata o Augmented Reality, come probabilmente è meglio conosciuta. Con questa serie di tutorial procederemo nello sviluppare un’app per Android che utilizzi la realtà aumentata per fornire informazioni dettagliate su prodotti commerciali che presentino un codice a barre o 3D per la loro classificazione e conseguentemente faremo in modo che attingendo da un Database si riconosca il prodotto e lo si descriva, sovrapponendo all’immagine del prodotto scansionato, tutte le sue informazioni nutrizionali e i dati relativi alla composizione e agli effetti sulla salute. Si potrebbero integrare i dati, aggiungendo, ricerche sui componenti del prodotto, oltre che notizie riguardanti quella tipologia di articoli o surrogati utilizzabili.
Vediamo insieme i passaggi principali per sviluppare questa applicazione:
1. Definizione delle funzionalità principali
L’applicazione dovrà:
- Utilizzare la fotocamera per scansionare codici a barre e/o confezioni di prodotti.
- Riconoscere i prodotti e recuperare informazioni dal database.
- Visualizzare informazioni nutrizionali (calorie, grassi, zuccheri, sodio, ecc.).
- Fornire avvisi sui rischi per la salute basati su ricerche e studi.
- Utilizzare la realtà aumentata per sovrapporre le informazioni sullo schermo in modo intuitivo.
2. Tecnologia e strumenti necessari
- Linguaggi di programmazione: Kotlin o Java per lo sviluppo Android.
- SDK AR: ARCore di Google per le funzionalità di realtà aumentata.
- SDK per scansione codice a barre: ZXing o ML Kit di Google.
- Database: Firebase Firestore o un database SQL per memorizzare le informazioni sui prodotti.
- API di informazione nutrizionale: Nutritional database API come Nutritionix.
3. Struttura dell’applicazione
Interfaccia utente
- Schermata principale: Accesso alla fotocamera per la scansione.
- Schermata dei risultati: Mostra le informazioni sul prodotto scansionato.
- Schermata di dettaglio: Informazioni approfondite e ricerche sui componenti del prodotto.
Backend
- Server database: Memorizzazione di tutte le informazioni sui prodotti.
- API server: Gestisce le richieste per recuperare i dati relativi ai prodotti scansionati.
4. Implementazione
Fase 1: Configurazione dell’ambiente di sviluppo
- Configura Android Studio con i necessari SDK (ARCore, ML Kit).
- Imposta il progetto e i moduli iniziali.
Fase 2: Scansione del codice a barre e riconoscimento del prodotto
- Implementa la funzionalità di scansione utilizzando ML Kit.
- Integrazione con il database per recuperare le informazioni del prodotto.
Fase 3: Visualizzazione delle informazioni in realtà aumentata
- Utilizza ARCore per sovrapporre le informazioni sullo schermo quando un prodotto viene scansionato.
Fase 4: Integrazione con database nutrizionali e API
- Collegati alle API per recuperare dati aggiornati sulle informazioni nutrizionali e sui rischi per la salute.
Fase 5: Test e debug
- Testiamo l’applicazione su diversi dispositivi.
- Correggiamo eventuali bug e ottimizziamo le prestazioni.
5. Distribuzione
- Prepariamo il file APK per il testing e la distribuzione.
- Pubblichiamo l’app sul Google Play Store seguendo le linee guida di Google.
Prima parte di codice
Di seguito un esempio di codice, in versione KOTLIN, per scansionare un codice a barre utilizzando ML Kit:
import com.google.mlkit.vision.barcode.Barcode
import com.google.mlkit.vision.barcode.BarcodeScanning
import com.google.mlkit.vision.common.InputImage
import android.graphics.Bitmap
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import android.widget.Toast
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Supponiamo che bitmap sia l'immagine acquisita dalla fotocamera
val image = InputImage.fromBitmap(bitmap, 0)
val scanner = BarcodeScanning.getClient()
scanner.process(image)
.addOnSuccessListener { barcodes ->
for (barcode in barcodes) {
val rawValue = barcode.rawValue
Toast.makeText(this, "Codice a barre scansionato: $rawValue", Toast.LENGTH_SHORT).show()
// Esegui una query nel database per ottenere le informazioni del prodotto
}
}
.addOnFailureListener {
Toast.makeText(this, "Errore nella scansione del codice a barre", Toast.LENGTH_SHORT).show()
}
}
}
Questa è la stessa App ma in versione JAVA:
import android.graphics.Bitmap;
import android.os.Bundle;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.mlkit.vision.barcode.Barcode;
import com.google.mlkit.vision.barcode.BarcodeScanner;
import com.google.mlkit.vision.barcode.BarcodeScanning;
import com.google.mlkit.vision.common.InputImage;
import java.util.List;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Supponiamo che bitmap sia l'immagine acquisita dalla fotocamera
Bitmap bitmap = getCapturedImage(); // Questa è una funzione ipotetica per ottenere un'immagine
InputImage image = InputImage.fromBitmap(bitmap, 0);
BarcodeScanner scanner = BarcodeScanning.getClient();
scanner.process(image)
.addOnSuccessListener(new OnSuccessListener<List<Barcode>>() {
@Override
public void onSuccess(List<Barcode> barcodes) {
for (Barcode barcode : barcodes) {
String rawValue = barcode.getRawValue();
Toast.makeText(MainActivity.this, "Codice a barre scansionato: " + rawValue, Toast.LENGTH_SHORT).show();
// Esegui una query nel database per ottenere le informazioni del prodotto
}
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(MainActivity.this, "Errore nella scansione del codice a barre", Toast.LENGTH_SHORT).show();
}
});
}
// Funzione ipotetica per ottenere un'immagine acquisita dalla fotocamera
private Bitmap getCapturedImage() {
// Implementa il codice per acquisire un'immagine dalla fotocamera
return null;
}
}
Permessi della Fotocamera:
Assicuriamoci di aver richiesto i permessi per utilizzare la fotocamera nel file AndroidManifest.xml.
<uses-permission android:name="android.permission.CAMERA"/>
Poi aggiungiamo il permesso per l'uso della fotocamera:
<application
...>
<activity android:name=".MainActivity">
...
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
Dipendenze:
Successivamente ci assicureremo di aver aggiunto le dipendenze necessarie nel file build.gradle del nostro modulo:
dependencies {
implementation 'com.google.mlkit:barcode-scanning:16.1.0'
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.core:core-ktx:1.3.2'
// Altre dipendenze...
}
Gestione dell'immagine:
La funzione getCapturedImage() è solo un segnaposto. Dovremmo poi implementare il codice per catturare un'immagine dalla fotocamera e restituirla come Bitmap.
Conclusione
Questo progetto richiede competenze in sviluppo mobile, realtà aumentata e gestione di database. Suddivideremo i compiti e procederemo passo dopo passo per realizzare questa applicazione innovativa e utile per i consumatori. Abbiamo illustrato come utilizzare ML Kit per scansionare codici a barre e recuperare il valore grezzo del codice in Java. Estenderemo questo esempio per interrogare un database e ottenere informazioni dettagliate sul prodotto scansionato.
Se hai domande su quanto descritto o desideri approfondire qualche aspetto specifico, fammi sapere!
Arrivederci alla seconda puntata.