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.

Articoli simili

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *