{"id":14,"date":"2024-06-13T12:30:51","date_gmt":"2024-06-13T10:30:51","guid":{"rendered":"http:\/\/194.163.156.75\/?p=14"},"modified":"2024-06-15T11:31:29","modified_gmt":"2024-06-15T09:31:29","slug":"sviluppare-app-di-realta-aumentata-con-google-ar","status":"publish","type":"post","link":"https:\/\/www.playnerd.site\/index.php\/2024\/06\/13\/sviluppare-app-di-realta-aumentata-con-google-ar\/","title":{"rendered":"Sviluppare APP di realt\u00e0 aumentata con Google AR"},"content":{"rendered":"\n<p><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">Parte 1<\/mark><\/strong><\/p>\n\n\n\n<p>Si \u00e8 fatto un gran parlare di Realt\u00e0 Aumentata o Augmented Reality, come probabilmente \u00e8 meglio conosciuta. Con questa serie di tutorial procederemo nello sviluppare un&#8217;app per Android che utilizzi la realt\u00e0 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&#8217;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.<\/p>\n\n\n\n<p>Vediamo insieme i passaggi principali per sviluppare questa applicazione:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. Definizione delle funzionalit\u00e0 principali<\/h3>\n\n\n\n<p>L&#8217;applicazione dovr\u00e0:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Utilizzare la fotocamera per scansionare codici a barre e\/o confezioni di prodotti.<\/li>\n\n\n\n<li>Riconoscere i prodotti e recuperare informazioni dal database.<\/li>\n\n\n\n<li>Visualizzare informazioni nutrizionali (calorie, grassi, zuccheri, sodio, ecc.).<\/li>\n\n\n\n<li>Fornire avvisi sui rischi per la salute basati su ricerche e studi.<\/li>\n\n\n\n<li>Utilizzare la realt\u00e0 aumentata per sovrapporre le informazioni sullo schermo in modo intuitivo.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">2. Tecnologia e strumenti necessari<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Linguaggi di programmazione:<\/strong> Kotlin o Java per lo sviluppo Android.<\/li>\n\n\n\n<li><strong>SDK AR:<\/strong> ARCore di Google per le funzionalit\u00e0 di realt\u00e0 aumentata.<\/li>\n\n\n\n<li><strong>SDK per scansione codice a barre:<\/strong> ZXing o ML Kit di Google.<\/li>\n\n\n\n<li><strong>Database:<\/strong> Firebase Firestore o un database SQL per memorizzare le informazioni sui prodotti.<\/li>\n\n\n\n<li><strong>API di informazione nutrizionale:<\/strong> Nutritional database API come Nutritionix.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">3. Struttura dell&#8217;applicazione<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Interfaccia utente<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Schermata principale:<\/strong> Accesso alla fotocamera per la scansione.<\/li>\n\n\n\n<li><strong>Schermata dei risultati:<\/strong> Mostra le informazioni sul prodotto scansionato.<\/li>\n\n\n\n<li><strong>Schermata di dettaglio:<\/strong> Informazioni approfondite e ricerche sui componenti del prodotto.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Backend<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Server database:<\/strong> Memorizzazione di tutte le informazioni sui prodotti.<\/li>\n\n\n\n<li><strong>API server:<\/strong> Gestisce le richieste per recuperare i dati relativi ai prodotti scansionati.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">4. Implementazione<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Fase 1: Configurazione dell&#8217;ambiente di sviluppo<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Configura Android Studio con i necessari SDK (ARCore, ML Kit).<\/li>\n\n\n\n<li>Imposta il progetto e i moduli iniziali.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Fase 2: Scansione del codice a barre e riconoscimento del prodotto<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Implementa la funzionalit\u00e0 di scansione utilizzando ML Kit.<\/li>\n\n\n\n<li>Integrazione con il database per recuperare le informazioni del prodotto.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Fase 3: Visualizzazione delle informazioni in realt\u00e0 aumentata<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Utilizza ARCore per sovrapporre le informazioni sullo schermo quando un prodotto viene scansionato.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Fase 4: Integrazione con database nutrizionali e API<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Collegati alle API per recuperare dati aggiornati sulle informazioni nutrizionali e sui rischi per la salute.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Fase 5: Test e debug<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Testiamo l&#8217;applicazione su diversi dispositivi.<\/li>\n\n\n\n<li>Correggiamo eventuali bug e ottimizziamo le prestazioni.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">5. Distribuzione<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Prepariamo il file APK per il testing e la distribuzione.<\/li>\n\n\n\n<li>Pubblichiamo l&#8217;app sul Google Play Store seguendo le linee guida di Google.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Prima parte di codice<\/h3>\n\n\n\n<p>Di seguito un esempio di codice, in versione KOTLIN, per scansionare un codice a barre utilizzando ML Kit:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><sup><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">import com.google.mlkit.vision.barcode.Barcode<br>import com.google.mlkit.vision.barcode.BarcodeScanning<br>import com.google.mlkit.vision.common.InputImage<br>import android.graphics.Bitmap<br>import android.os.Bundle<br>import androidx.appcompat.app.AppCompatActivity<br>import android.widget.Toast<br><br>class MainActivity : AppCompatActivity() {<br><br>    override fun onCreate(savedInstanceState: Bundle?) {<br>        super.onCreate(savedInstanceState)<br>        setContentView(R.layout.activity_main)<br>        <br>        \/\/ Supponiamo che bitmap sia l'immagine acquisita dalla fotocamera<br>        val image = InputImage.fromBitmap(bitmap, 0)<br>        <br>        val scanner = BarcodeScanning.getClient()<br><br>        scanner.process(image)<br>            .addOnSuccessListener { barcodes -&gt;<br>                for (barcode in barcodes) {<br>                    val rawValue = barcode.rawValue<br>                    Toast.makeText(this, \"Codice a barre scansionato: $rawValue\", Toast.LENGTH_SHORT).show()<br>                    \/\/ Esegui una query nel database per ottenere le informazioni del prodotto<br>                }<br>            }<br>            .addOnFailureListener {<br>                Toast.makeText(this, \"Errore nella scansione del codice a barre\", Toast.LENGTH_SHORT).show()<br>            }<br>    }<br>}<\/mark><\/strong><\/sup><code><br><\/code><br>Questa \u00e8 la stessa App ma in versione JAVA: <br><br><strong><sup><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">import android.graphics.Bitmap;<br>import android.os.Bundle;<br>import android.widget.Toast;<br>import androidx.annotation.NonNull;<br>import androidx.appcompat.app.AppCompatActivity;<br>import com.google.android.gms.tasks.OnFailureListener;<br>import com.google.android.gms.tasks.OnSuccessListener;<br>import com.google.mlkit.vision.barcode.Barcode;<br>import com.google.mlkit.vision.barcode.BarcodeScanner;<br>import com.google.mlkit.vision.barcode.BarcodeScanning;<br>import com.google.mlkit.vision.common.InputImage;<br>import java.util.List;<br><br>public class MainActivity extends AppCompatActivity {<br><br>    @Override<br>    protected void onCreate(Bundle savedInstanceState) {<br>        super.onCreate(savedInstanceState);<br>        setContentView(R.layout.activity_main);<br><br>        \/\/ Supponiamo che bitmap sia l'immagine acquisita dalla fotocamera<br>        Bitmap bitmap = getCapturedImage(); \/\/ Questa \u00e8 una funzione ipotetica per ottenere un'immagine<br><br>        InputImage image = InputImage.fromBitmap(bitmap, 0);<br><br>        BarcodeScanner scanner = BarcodeScanning.getClient();<br><br>        scanner.process(image)<br>                .addOnSuccessListener(new OnSuccessListener&lt;List&lt;Barcode&gt;&gt;() {<br>                    @Override<br>                    public void onSuccess(List&lt;Barcode&gt; barcodes) {<br>                        for (Barcode barcode : barcodes) {<br>                            String rawValue = barcode.getRawValue();<br>                            Toast.makeText(MainActivity.this, \"Codice a barre scansionato: \" + rawValue, Toast.LENGTH_SHORT).show();<br>                            \/\/ Esegui una query nel database per ottenere le informazioni del prodotto<br>                        }<br>                    }<br>                })<br>                .addOnFailureListener(new OnFailureListener() {<br>                    @Override<br>                    public void onFailure(@NonNull Exception e) {<br>                        Toast.makeText(MainActivity.this, \"Errore nella scansione del codice a barre\", Toast.LENGTH_SHORT).show();<br>                    }<br>                });<br>    }<br><br>    \/\/ Funzione ipotetica per ottenere un'immagine acquisita dalla fotocamera<br>    private Bitmap getCapturedImage() {<br>        \/\/ Implementa il codice per acquisire un'immagine dalla fotocamera<br>        return null;<br>    }<br>}<\/mark><\/sup><\/strong><br><br><strong>Permessi della Fotocamera:<\/strong><br>Assicuriamoci di aver richiesto i permessi per utilizzare la fotocamera nel file <strong><em>AndroidManifest.xml<\/em><\/strong>.<br><br><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">&lt;uses-permission android:name=\"android.permission.CAMERA\"\/&gt;<\/mark><br><br><strong>Poi aggiungiamo il permesso per l'uso della fotocamera:<\/strong><br><br><br><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">&lt;application<br>    ...&gt;<br>    &lt;activity android:name=\".MainActivity\"&gt;<br>        ...<br>        &lt;intent-filter&gt;<br>            &lt;action android:name=\"android.intent.action.MAIN\" \/&gt;<br>            &lt;category android:name=\"android.intent.category.LAUNCHER\" \/&gt;<br>        &lt;\/intent-filter&gt;<br>    &lt;\/activity&gt;<br>&lt;\/application&gt;<\/mark><br><br><strong>Dipendenze:<\/strong><br>Successivamente ci assicureremo di aver aggiunto le dipendenze necessarie nel file <em><strong>build.gradle<\/strong><\/em> del nostro modulo:<br><br><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">dependencies {<br>    implementation 'com.google.mlkit:barcode-scanning:16.1.0'<br>    implementation 'androidx.appcompat:appcompat:1.2.0'<br>    implementation 'androidx.core:core-ktx:1.3.2'<br>    \/\/ Altre dipendenze...<br>}<\/mark><br><br><strong>Gestione dell'immagine:<\/strong><br>La funzione getCapturedImage() \u00e8 solo un segnaposto. Dovremmo poi implementare il codice per catturare un'immagine dalla fotocamera e restituirla come Bitmap.<br><br><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Conclusione<\/h3>\n\n\n\n<p>Questo progetto richiede competenze in sviluppo mobile, realt\u00e0 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.<\/p>\n\n\n\n<p>Se hai domande su quanto descritto o desideri approfondire qualche aspetto specifico, fammi sapere! <\/p>\n\n\n\n<p>Arrivederci alla seconda puntata.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Parte 1 Si \u00e8 fatto un gran parlare di Realt\u00e0 Aumentata o Augmented Reality, come probabilmente \u00e8 meglio conosciuta. Con questa serie di tutorial procederemo nello sviluppare un&#8217;app per Android che utilizzi la realt\u00e0 aumentata per fornire informazioni dettagliate su prodotti commerciali che presentino un codice a barre o 3D per la loro classificazione e&#8230;<\/p>\n","protected":false},"author":2,"featured_media":15,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","iawp_total_views":3,"footnotes":""},"categories":[2],"tags":[],"class_list":["post-14","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-develop"],"magazineBlocksPostFeaturedMedia":{"thumbnail":"https:\/\/www.playnerd.site\/wp-content\/uploads\/2024\/06\/AR.png","medium":"https:\/\/www.playnerd.site\/wp-content\/uploads\/2024\/06\/AR.png","medium_large":"https:\/\/www.playnerd.site\/wp-content\/uploads\/2024\/06\/AR.png","large":"https:\/\/www.playnerd.site\/wp-content\/uploads\/2024\/06\/AR.png","1536x1536":"https:\/\/www.playnerd.site\/wp-content\/uploads\/2024\/06\/AR.png","2048x2048":"https:\/\/www.playnerd.site\/wp-content\/uploads\/2024\/06\/AR.png"},"magazineBlocksPostAuthor":{"name":"PlayNerd","avatar":"https:\/\/secure.gravatar.com\/avatar\/f27bf6da72b84eef3177bb82584b1928da8209533462374c776eb0720ab54fae?s=96&d=retro&r=g"},"magazineBlocksPostCommentsNumber":"0","magazineBlocksPostExcerpt":"Parte 1 Si \u00e8 fatto un gran parlare di Realt\u00e0 Aumentata o Augmented Reality, come probabilmente \u00e8 meglio conosciuta. Con questa serie di tutorial procederemo nello sviluppare un&#8217;app per Android che utilizzi la realt\u00e0 aumentata per fornire informazioni dettagliate su prodotti commerciali che presentino un codice a barre o 3D per la loro classificazione e...","magazineBlocksPostCategories":["Develop"],"magazineBlocksPostViewCount":359,"magazineBlocksPostReadTime":6,"magazine_blocks_featured_image_url":{"full":["https:\/\/www.playnerd.site\/wp-content\/uploads\/2024\/06\/AR.png",448,256,false],"medium":["https:\/\/www.playnerd.site\/wp-content\/uploads\/2024\/06\/AR.png",300,171,false],"thumbnail":["https:\/\/www.playnerd.site\/wp-content\/uploads\/2024\/06\/AR.png",150,86,false]},"magazine_blocks_author":{"display_name":"PlayNerd","author_link":"https:\/\/www.playnerd.site\/index.php\/author\/playnerd\/"},"magazine_blocks_comment":0,"magazine_blocks_author_image":"https:\/\/secure.gravatar.com\/avatar\/f27bf6da72b84eef3177bb82584b1928da8209533462374c776eb0720ab54fae?s=96&d=retro&r=g","magazine_blocks_category":"<a href=\"#\" class=\"category-link category-link-2\">Develop<\/a>","_links":{"self":[{"href":"https:\/\/www.playnerd.site\/index.php\/wp-json\/wp\/v2\/posts\/14","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.playnerd.site\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.playnerd.site\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.playnerd.site\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.playnerd.site\/index.php\/wp-json\/wp\/v2\/comments?post=14"}],"version-history":[{"count":6,"href":"https:\/\/www.playnerd.site\/index.php\/wp-json\/wp\/v2\/posts\/14\/revisions"}],"predecessor-version":[{"id":27,"href":"https:\/\/www.playnerd.site\/index.php\/wp-json\/wp\/v2\/posts\/14\/revisions\/27"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.playnerd.site\/index.php\/wp-json\/wp\/v2\/media\/15"}],"wp:attachment":[{"href":"https:\/\/www.playnerd.site\/index.php\/wp-json\/wp\/v2\/media?parent=14"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.playnerd.site\/index.php\/wp-json\/wp\/v2\/categories?post=14"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.playnerd.site\/index.php\/wp-json\/wp\/v2\/tags?post=14"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}