{"id":29068,"date":"2019-02-05T00:00:00","date_gmt":"2019-02-04T23:00:00","guid":{"rendered":"https:\/\/blexin.com\/?p=29068"},"modified":"2021-01-13T09:40:47","modified_gmt":"2021-01-13T08:40:47","slug":"riconoscimento-delle-immagini-nel-cloud","status":"publish","type":"post","link":"https:\/\/blexin.com\/it\/blog\/riconoscimento-delle-immagini-nel-cloud\/","title":{"rendered":"Riconoscimento delle immagini nel Cloud"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"608\" data-attachment-id=\"29069\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/riconoscimento-delle-immagini-nel-cloud\/attachment\/c9ceb597-064d-4bfb-b3b1-00bdcf278022\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/c9ceb597-064d-4bfb-b3b1-00bdcf278022.png?fit=1024%2C608&amp;ssl=1\" data-orig-size=\"1024,608\" data-comments-opened=\"0\" data-image-title=\"c9ceb597-064d-4bfb-b3b1-00bdcf278022\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/c9ceb597-064d-4bfb-b3b1-00bdcf278022.png?fit=1024%2C608&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/c9ceb597-064d-4bfb-b3b1-00bdcf278022.png?resize=1024%2C608&#038;ssl=1\" alt=\"\" class=\"wp-image-29069\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/c9ceb597-064d-4bfb-b3b1-00bdcf278022.png 1024w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/c9ceb597-064d-4bfb-b3b1-00bdcf278022-980x582.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/c9ceb597-064d-4bfb-b3b1-00bdcf278022-480x285.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Durante una delle academy Azure tenute per Overnet Education, il nostro partner per la formazione, abbiamo affrontato il tema del riconoscimento delle immagini, che ha riscosso molto interesse tra gli studenti. Ho pensato quindi potesse essere interessante un confronto su questo tema tra i vari Cloud provider, utilizzando Node.js e Typescript.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"introduzione\">Introduzione<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Tutti i principali fornitori di servizi cloud offrono strumenti per l&#8217;analisi di immagini basati sull&#8217;intelligenza artificiale. \u00c8 sufficiente fornire un&#8217;immagine (anche un video nel caso di Amazon Rekognition) e il servizio pu\u00f2 identificare oggetti, persone, testo, scene e attivit\u00e0, oltre che rilevare eventuali contenuti non appropriati.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In questo articolo utilizzeremo gli SDK Javascript di Amazon, Azure e Google in un progetto Node scritto in Typescript, che analizzer\u00e0 immagini caricate localmente. Ciascuno dei cloud si differenzia per la filosofia di utilizzo, i servizi offerti e per il tipo di output restituito. Per questo motivo ci limiteremo ad un&#8217;analisi che \u00e8 possibile svolgere su tutti e tre gli SDK.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Per Amazon, il prerequisito principale \u00e8 quello di creare un account AWS e un utente IAM. Una guida completa che illustra l&#8217;intera procedura \u00e8 disponibile a questo&nbsp;<a href=\"https:\/\/docs.aws.amazon.com\/en_us\/rekognition\/latest\/dg\/setting-up.html\" target=\"_blank\" rel=\"noreferrer noopener\">link<\/a>. Se non avete ancora creato un account sul cloud Amazon, potete accedere mediante il&nbsp;<a href=\"https:\/\/aws.amazon.com\/it\/free\/\" target=\"_blank\" rel=\"noreferrer noopener\">Piano gratuito di AWS<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Per Azure, la procedura per creare un account gratuito di&nbsp;<strong>Computer Vision<\/strong>&nbsp;\u00e8 disponibile a questo&nbsp;<a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/cognitive-services\/computer-vision\/vision-api-how-to-topics\/howtosubscribe\" target=\"_blank\" rel=\"noreferrer noopener\">indirizzo<\/a>. Se non avete ancora creato un account sul cloud Azure, potete accedere mediante un&nbsp;<a href=\"https:\/\/azure.microsoft.com\/it-it\/free\" target=\"_blank\" rel=\"noreferrer noopener\">Piano iniziale gratuito<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La documentazione per iniziare a lavorare con&nbsp;<strong>Google Vision<\/strong>&nbsp;sul cloud Google \u00e8 disponibile a questo&nbsp;<a href=\"https:\/\/cloud.google.com\/vision\" target=\"_blank\" rel=\"noreferrer noopener\">indirizzo<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"setup-del-progetto-nodejs\">Setup del progetto Node.js<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Accedere ai servizi di AI vuol dire eseguire chiamate a servizi REST. Lo faremo utilizzando Node.js, la piattaforma naturale per gestire questo tipo di problema. Creiamo dunque un progetto Node.js da zero; ad esso aggiungeremo, successivamente, tutte le dipendenze necessarie.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I prerequisiti da installare sono i seguenti:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Node.js da&nbsp;<a href=\"https:\/\/nodejs.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/nodejs.org<\/a>&nbsp;(nella versione LTS)<\/li><li>Typescript con il comando npm install -g typescript<\/li><\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Per fare questo, apriamo la linea di comando in una cartella vuota e digitiamo in essa il comando&nbsp;<strong>npm init<\/strong>. Rispondiamo alle domande del wizard e, alla fine del processo, troveremo nella cartella il file&nbsp;<strong>package.json<\/strong>&nbsp;contenente tutte le impostazioni necessarie. In genere, nella stessa cartella, eseguo il comando&nbsp;<strong>git init<\/strong>&nbsp;per inizializzare git e&nbsp;<strong>git remote add<\/strong>&nbsp;per configurare la repository remota del codice.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Occorre ora modificare il file package.json. Anzitutto, nella sezione scripts, inseriamo una sezione&nbsp;<strong>\u201cbuild\u201d: \u201ctsc\u201d<\/strong>&nbsp;per indicare che useremo il compilatore typescript nella fase di build.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ci occorrono poi alcune dipendenze per la fase di sviluppo:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>npm install @types\/node \u2013save-dev ossia le definizioni dei tipi per Typescript di Nod;.<\/li><li>npm install ts-node &#8211;save-dev che useremo per compilare ed eseguire il codice in node;<\/li><li>npm install typescript &#8211;save-dev;<\/li><li>npm install tslint &#8211;save-dev ossia un linter per il linguaggio Typescript.<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"995\" height=\"672\" data-attachment-id=\"29074\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/riconoscimento-delle-immagini-nel-cloud\/attachment\/picture1\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture1.png?fit=995%2C672&amp;ssl=1\" data-orig-size=\"995,672\" data-comments-opened=\"0\" data-image-title=\"Picture1\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture1.png?fit=995%2C672&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture1.png?resize=995%2C672&#038;ssl=1\" alt=\"\" class=\"wp-image-29074\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture1.png 995w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture1-980x662.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture1-480x324.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 995px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Poich\u00e9 stiamo usando Typescript, \u00e8 necessario aggiungere un altro file di configurazione chiamato&nbsp;<strong>tsconfig.json<\/strong>&nbsp;nella root directory. Ci limitiamo ad usare solo lo stretto necessario, ossia le opzioni di compilazione e il percorso dei file sorgenti (con estensione&nbsp;<strong>.ts<\/strong>).<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"550\" height=\"300\" data-attachment-id=\"29076\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/riconoscimento-delle-immagini-nel-cloud\/attachment\/picture2\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture2.png?fit=550%2C300&amp;ssl=1\" data-orig-size=\"550,300\" data-comments-opened=\"0\" data-image-title=\"Picture2\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture2.png?fit=550%2C300&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture2.png?resize=550%2C300&#038;ssl=1\" alt=\"\" class=\"wp-image-29076\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture2.png 550w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture2-480x262.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 550px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Aggiungiamo ora la configurazione necessaria per poter eseguire il debug del codice all\u2019interno di Visual Studio Code. \u00c8 possibile creare manualmente questa configurazione, aggiungendo un folder&nbsp;<strong>.vscode<\/strong>&nbsp;e un file chiamato&nbsp;<strong>launch.json<\/strong>&nbsp;a questa cartella<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"995\" height=\"504\" data-attachment-id=\"29078\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/riconoscimento-delle-immagini-nel-cloud\/attachment\/picture3\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture3.png?fit=995%2C504&amp;ssl=1\" data-orig-size=\"995,504\" data-comments-opened=\"0\" data-image-title=\"Picture3\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture3.png?fit=995%2C504&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture3.png?resize=995%2C504&#038;ssl=1\" alt=\"\" class=\"wp-image-29078\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture3.png 995w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture3-980x496.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture3-480x243.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 995px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">In questo file,&nbsp;<strong>runtimeArgs<\/strong>&nbsp;serve ad indicare a Node che&nbsp;<strong>ts-node<\/strong>&nbsp;deve essere caricato prima di eseguire effettivamente il codice.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Verifichiamo che la configurazione funzioni, scrivendo del codice in index.ts e lanciando in VS Code una sessione di debug<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"579\" height=\"270\" data-attachment-id=\"29081\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/riconoscimento-delle-immagini-nel-cloud\/attachment\/picture4\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture4.png?fit=579%2C270&amp;ssl=1\" data-orig-size=\"579,270\" data-comments-opened=\"0\" data-image-title=\"Picture4\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture4.png?fit=579%2C270&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture4.png?resize=579%2C270&#038;ssl=1\" alt=\"\" class=\"wp-image-29081\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture4.png 579w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture4-480x224.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 579px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Terminiamo la configurazione con l\u2019installazione di:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>npm install aws-sdk \u2013save, grazie alla quale saremo in grado di usare le funzioni di Rekognition;<\/li><li>npm install @google-cloud\/vision, per l&#8217;SDk di Google;<\/li><li>npm install &#8211;save request request-promise, per eseguire direttamente chiamate REST (nel caso di Azure);<\/li><li>npm install &#8211;save-dev @types\/request, per avere in Typescript i tipi di request;<\/li><li>npm install &#8211;save-dev @types\/request-promise, per avere in Typescript i tipi di request-promise.<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"496\" height=\"477\" data-attachment-id=\"29083\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/riconoscimento-delle-immagini-nel-cloud\/attachment\/picture16\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture16.png?fit=496%2C477&amp;ssl=1\" data-orig-size=\"496,477\" data-comments-opened=\"0\" data-image-title=\"Picture16\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture16.png?fit=496%2C477&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture16.png?resize=496%2C477&#038;ssl=1\" alt=\"\" class=\"wp-image-29083\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture16.png 496w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture16-480x462.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 496px, 100vw\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"configurazione-ed-utilizzo-di-azure-computer-vision\">Configurazione ed utilizzo di Azure Computer Vision<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Dal portale di Azure \u00e8 possibile estrarre l&#8217;endpoint del servizio e le due chiavi segrete. Per comodit\u00e0 d&#8217;uso le possiamo inserire in un file di configurazione<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nexport let config = {\n\u00a0\u00a0\u00a0\u00a0azureVisionConfig: {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0azureEndPoint: &quot;https:\/\/westeurope.api.cognitive.microsoft.com\/vision\/v1.0\/&quot;,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0azureKey1: &quot;yourkey1&quot;,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0azureKey2: &quot;yourkey2&quot;,\n\u00a0\u00a0\u00a0\u00a0},\n};\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Dalla&nbsp;<a rel=\"noreferrer noopener\" href=\"https:\/\/westus.dev.cognitive.microsoft.com\/docs\/services\/56f91f2d778daf23d8ec6739\/operations\/56f91f2e778daf14a499e1fa\" target=\"_blank\">documentazione<\/a>&nbsp;ufficiale delle API, risulta che le chiamate http da eseguire sono del tipo<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"771\" data-attachment-id=\"29086\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/riconoscimento-delle-immagini-nel-cloud\/attachment\/picture17\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture17.png?fit=1070%2C806&amp;ssl=1\" data-orig-size=\"1070,806\" data-comments-opened=\"0\" data-image-title=\"Picture17\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture17.png?fit=1024%2C771&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture17.png?resize=1024%2C771&#038;ssl=1\" alt=\"\" class=\"wp-image-29086\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture17-1024x771.png 1024w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture17-980x738.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture17-480x362.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Serve quindi una maniera efficiente per costruire la querystring con la quale interroghiamo il servizio. Creiamo un&#8217;interfaccia per costruire i parametri della request<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"673\" data-attachment-id=\"29089\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/riconoscimento-delle-immagini-nel-cloud\/attachment\/picture18\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture18.png?fit=1238%2C814&amp;ssl=1\" data-orig-size=\"1238,814\" data-comments-opened=\"0\" data-image-title=\"Picture18\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture18.png?fit=1024%2C673&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture18.png?resize=1024%2C673&#038;ssl=1\" alt=\"\" class=\"wp-image-29089\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture18-1024x673.png 1024w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture18-980x644.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture18-480x316.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">La documentazione mostra anche il json restituito da una request. Possiamo convertire questo risultato in un&#8217;interfaccia per tipizzare la response.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nexport interface ICategory {\n\u00a0\u00a0\u00a0\u00a0name: string;\n\u00a0\u00a0\u00a0\u00a0score: number;\n}\nexport interface IImageType {\n\u00a0\u00a0\u00a0\u00a0clipArtType: number;\n\u00a0\u00a0\u00a0\u00a0lineDrawingType: number;\n}\nexport interface ITag {\n\u00a0\u00a0\u00a0\u00a0name: string;\n\u00a0\u00a0\u00a0\u00a0confidence: number;\n}\nexport interface ICaption {\n\u00a0\u00a0\u00a0\u00a0text: string;\n\u00a0\u00a0\u00a0\u00a0confidence: number;\n}\nexport interface IDescription {\n\u00a0\u00a0\u00a0\u00a0tags: string&#x5B;];\n\u00a0\u00a0\u00a0\u00a0captions: ICaption&#x5B;];\n}\nexport interface IMetadata {\n\u00a0\u00a0\u00a0\u00a0width: number;\n\u00a0\u00a0\u00a0\u00a0height: number;\n\u00a0\u00a0\u00a0\u00a0format: string;\n}\nexport interface IAzureCognitiveServiceResponse {\n\u00a0\u00a0\u00a0\u00a0categories: ICategory&#x5B;];\n\u00a0\u00a0\u00a0\u00a0imageType: IImageType;\n\u00a0\u00a0\u00a0\u00a0tags: ITag&#x5B;];\n\u00a0\u00a0\u00a0\u00a0description: IDescription;\n\u00a0\u00a0\u00a0\u00a0faces: any&#x5B;];\n\u00a0\u00a0\u00a0\u00a0requestId: string;\n\u00a0\u00a0\u00a0\u00a0metadata: IMetadata;\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Creiamo quindi un unico metodo in una classe che prender\u00e0 in ingresso il percorso di un file locale e un oggetto di tipo&nbsp;<strong>AzureRequestParameters<\/strong>, che restituir\u00e0 una&nbsp;<strong>IAzureCognitiveServiceResponse<\/strong>. La libreria&nbsp;<strong>request-promise<\/strong>&nbsp;ci consente di creare un metodo async che restituisca una&nbsp;<strong>Promise<\/strong>&nbsp;tipizzata.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"970\" height=\"771\" data-attachment-id=\"29091\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/riconoscimento-delle-immagini-nel-cloud\/attachment\/picture20\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture20.png?fit=970%2C771&amp;ssl=1\" data-orig-size=\"970,771\" data-comments-opened=\"0\" data-image-title=\"Picture20\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture20.png?fit=970%2C771&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture20.png?resize=970%2C771&#038;ssl=1\" alt=\"\" class=\"wp-image-29091\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture20.png 970w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture20-480x382.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 970px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Un esempio semplice di chiamata \u00e8 il seguente:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nconst responseAzure1 = helperAzure.AnalyzeImage(&quot;..\/images\/laurie.jpg&quot;, new AzureRequestParameters({\n\u00a0\u00a0\u00a0\u00a0language: &quot;en&quot;,\n\u00a0\u00a0\u00a0\u00a0visualFeatures: &#x5B;&quot;Faces&quot;, &quot;ImageType&quot;],\n})).then((data: IAzureCognitiveServiceResponse) =&gt; {\n\u00a0\u00a0\u00a0\u00a0data.faces.forEach( (face) =&gt; {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0console.log(face);\n\u00a0\u00a0\u00a0\u00a0});\n});\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">L&#8217;immagine passata in input \u00e8 la seguente:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"235\" height=\"307\" data-attachment-id=\"29094\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/riconoscimento-delle-immagini-nel-cloud\/attachment\/laurie\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/laurie.jpg?fit=235%2C307&amp;ssl=1\" data-orig-size=\"235,307\" data-comments-opened=\"0\" data-image-title=\"laurie\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/laurie.jpg?fit=235%2C307&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/laurie.jpg?resize=235%2C307&#038;ssl=1\" alt=\"\" class=\"wp-image-29094\" srcset=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/laurie.jpg?w=235&amp;ssl=1 235w, https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/laurie.jpg?resize=230%2C300&amp;ssl=1 230w\" sizes=\"auto, (max-width: 235px) 100vw, 235px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Ecco il risultato dell&#8217;analisi:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"918\" height=\"310\" data-attachment-id=\"29096\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/riconoscimento-delle-immagini-nel-cloud\/attachment\/picture21\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture21.png?fit=918%2C310&amp;ssl=1\" data-orig-size=\"918,310\" data-comments-opened=\"0\" data-image-title=\"Picture21\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture21.png?fit=918%2C310&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture21.png?resize=918%2C310&#038;ssl=1\" alt=\"\" class=\"wp-image-29096\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture21.png 918w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture21-480x162.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 918px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Basta modificare leggermente la richiesta in maniera tale da provare ad identificare una celebrit\u00e0 nell&#8217;immagine:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"191\" data-attachment-id=\"29099\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/riconoscimento-delle-immagini-nel-cloud\/attachment\/picture22\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture22.png?fit=1080%2C201&amp;ssl=1\" data-orig-size=\"1080,201\" data-comments-opened=\"0\" data-image-title=\"Picture22\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture22.png?fit=1024%2C191&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture22.png?resize=1024%2C191&#038;ssl=1\" alt=\"\" class=\"wp-image-29099\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture22-1024x191.png 1024w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture22-980x182.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture22-480x89.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">La risposta \u00e8 che con un livello di confidenza superiore al 99%, nella foto appare l&#8217;attore Hugh Laurie.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"200\" data-attachment-id=\"29101\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/riconoscimento-delle-immagini-nel-cloud\/attachment\/picture23\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture23.png?fit=1457%2C284&amp;ssl=1\" data-orig-size=\"1457,284\" data-comments-opened=\"0\" data-image-title=\"Picture23\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture23.png?fit=1024%2C200&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture23.png?resize=1024%2C200&#038;ssl=1\" alt=\"\" class=\"wp-image-29101\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture23-980x191.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture23-480x94.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Consideriamo ad esempio la seguente immagine:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1023\" height=\"682\" data-attachment-id=\"29104\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/riconoscimento-delle-immagini-nel-cloud\/attachment\/cena\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/cena.jpg?fit=1023%2C682&amp;ssl=1\" data-orig-size=\"1023,682\" data-comments-opened=\"0\" data-image-title=\"cena\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/cena.jpg?fit=1023%2C682&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/cena.jpg?resize=1023%2C682&#038;ssl=1\" alt=\"\" class=\"wp-image-29104\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/cena.jpg 1023w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/cena-980x653.jpg 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/cena-480x320.jpg 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1023px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">I seguenti parametri di ricerca forniscono in output una descrizione degli elementi nella foto.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"985\" height=\"338\" data-attachment-id=\"29106\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/riconoscimento-delle-immagini-nel-cloud\/attachment\/picture24\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture24.png?fit=985%2C338&amp;ssl=1\" data-orig-size=\"985,338\" data-comments-opened=\"0\" data-image-title=\"Picture24\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture24.png?fit=985%2C338&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture24.png?resize=985%2C338&#038;ssl=1\" alt=\"\" class=\"wp-image-29106\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture24.png 985w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture24-980x336.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture24-480x165.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 985px, 100vw\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"982\" height=\"346\" data-attachment-id=\"29109\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/riconoscimento-delle-immagini-nel-cloud\/attachment\/picture25\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture25.png?fit=982%2C346&amp;ssl=1\" data-orig-size=\"982,346\" data-comments-opened=\"0\" data-image-title=\"Picture25\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture25.png?fit=982%2C346&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture25.png?resize=982%2C346&#038;ssl=1\" alt=\"\" class=\"wp-image-29109\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture25.png 982w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture25-980x345.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture25-480x169.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 982px, 100vw\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"configurazione-ed-utilizzo-di-amazon-rekognition\">Configurazione ed utilizzo di Amazon Rekognition<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Dal portale di Amazon \u00e8 possibile estrarre la&nbsp;<strong>Access Key<\/strong>&nbsp;e la&nbsp;<strong>Secret Access Key<\/strong>&nbsp;che verranno usate per convalidare le chiamate alla libreria Rekognition. La documentazione completa \u00e8 disponibile al seguente&nbsp;<a href=\"https:\/\/docs.aws.amazon.com\/rekognition\/latest\/dg\/rekognition-dg.pdf\" target=\"_blank\" rel=\"noreferrer noopener\">indirizzo<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c8 possibile installare sul proprio computer queste credenziali in un file disponibile globalmente per tutti i nostri progetti, oppure creare nel singolo progetto un file contenente le chiavi. Per quest\u2019articolo useremo quest&#8217;ultima opzione.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"995\" height=\"416\" data-attachment-id=\"29114\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/riconoscimento-delle-immagini-nel-cloud\/attachment\/picture5\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture5.png?fit=995%2C416&amp;ssl=1\" data-orig-size=\"995,416\" data-comments-opened=\"0\" data-image-title=\"Picture5\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture5.png?fit=995%2C416&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture5.png?resize=995%2C416&#038;ssl=1\" alt=\"\" class=\"wp-image-29114\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture5.png 995w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture5-980x410.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture5-480x201.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 995px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Creiamo una classe Typescript (chiamata AWSRekognition) che contenga il codice di autenticazione (attenzione ad indicare l\u2019IdentityPoolID come richiesto dall documentazione di Rekognition) e tutti i metodi per analizzare le immagini.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nimport * as AWS from &quot;aws-sdk&quot;;\n\u00a0\nexport class AWSRekognition {\n\u00a0\n\u00a0\u00a0\u00a0\u00a0private rekognition: AWS.Rekognition;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0constructor() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0AWS.config.region = &quot;eu-west-1&quot;; \/\/ Region\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0AWS.config.credentials = new AWS.CognitoIdentityCredentials({\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0IdentityPoolId: &quot;eu-west-YOURPOOLID&quot;,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0});\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0AWS.config.loadFromPath(&quot;.\/src\/configuration\/credentials.json&quot;);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0this.rekognition = new AWS.Rekognition();\n\u00a0\u00a0\u00a0\u00a0}\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Il primo metodo che aggiungiamo a questa classe analizza un file immagine locale e prova ad estrarre, mediante Rekognition, informazioni sui volti eventualmente contenuti in essa. Anzitutto leggiamo il file e convertiamolo in una stringa in base64. Dopodich\u00e9 convertiamo questa stringa in un Buffer, ossia un array di interi. Rekognition accetta questo formato per le immagini in input. Creiamo una funzione helper che esegue questa conversione.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nimport * as fs from &quot;fs&quot;;\n\u00a0\nexport function readImage(path: string): Buffer {\n\u00a0\u00a0\u00a0const fileData = fs.readFileSync(path).toString(&quot;base64&quot;);\n\u00a0\u00a0\u00a0return new Buffer(fileData, &quot;base64&quot;);\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Il metodo che utilizza Rekognition \u00e8 invece il seguente:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\npublic DetectFacesOnLocalImage(filePath: string):\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Promise&lt;PromiseResult&lt;AWS.Rekognition.DetectFacesResponse, AWS.AWSError&gt;&gt; {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0const buffer = readImage(filePath);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0const params = {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Attributes: &#x5B;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&quot;ALL&quot;,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Image: {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Bytes: buffer,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0};\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return this.rekognition.detectFaces(params).promise();\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Il metodo restituisce una Promise tipizzata che possiamo attendere in index.ts. Le informazioni passate in output sono estremamente dettagliate. L&#8217;et\u00e0 massima stimata \u00e8 uguale a 52 anni.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nimport {AWSRekognition} from &quot;.\/aws-rekognition&quot;;\n\u00a0\nconst helperAWS: AWSRekognition = new AWSRekognition();\nconst response = helperAWS.DetectFacesOnLocalImage(&quot;.\/images\/laurie.jpg&quot;).then(\n\u00a0\u00a0\u00a0\u00a0(data) =&gt; {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0console.log(data.FaceDetails&#x5B;0].AgeRange.High);\n}).catch((err) =&gt; {\n\u00a0\u00a0\u00a0\u00a0console.error(err);\n});\n<\/pre><\/div>\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"537\" data-attachment-id=\"29117\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/riconoscimento-delle-immagini-nel-cloud\/attachment\/picture7\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture7.png?fit=1090%2C572&amp;ssl=1\" data-orig-size=\"1090,572\" data-comments-opened=\"0\" data-image-title=\"Picture7\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture7.png?fit=1024%2C537&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture7.png?resize=1024%2C537&#038;ssl=1\" alt=\"\" class=\"wp-image-29117\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture7-1024x537.png 1024w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture7-980x514.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture7-480x252.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Lo stesso metodo pu\u00f2 essere semplificato se l&#8217;immagine \u00e8 stata caricata in un&nbsp;<strong>bucket S3<\/strong>. L&#8217;immagine mostra nella console web AWS il contenuto di un bucket chiamato immaginisalvatore. Al metodo&nbsp;<strong>detectFaces<\/strong>&nbsp;basta passare il nome del bucket e la chiave dell&#8217;immagine.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"315\" data-attachment-id=\"29119\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/riconoscimento-delle-immagini-nel-cloud\/attachment\/picture8\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture8.png?fit=1676%2C515&amp;ssl=1\" data-orig-size=\"1676,515\" data-comments-opened=\"0\" data-image-title=\"Picture8\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture8.png?fit=1024%2C315&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture8.png?resize=1024%2C315&#038;ssl=1\" alt=\"\" class=\"wp-image-29119\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture8-980x301.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture8-480x147.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><\/figure>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\npublic DetectFacesOnS3Images(bucketName: string, key: string):\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Promise&lt;PromiseResult&lt;AWS.Rekognition.DetectFacesResponse, AWS.AWSError&gt;&gt; {\n\u00a0\u00a0\u00a0\u00a0const params = {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Attributes: &#x5B;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&quot;ALL&quot;,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Image: {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0S3Object: {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Bucket: bucketName,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Name: key,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},\n\u00a0\u00a0\u00a0\u00a0};\n\u00a0\u00a0\u00a0\u00a0return this.rekognition.detectFaces(params).promise();\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Possiamo provare a chiedere a Rekognition se riesce ad associare il volto a una celebrit\u00e0<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\npublic DetectCelebritiesOnS3Image(bucketName: string, key: string) {\n\u00a0\u00a0\u00a0\u00a0const params = {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Image: {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0S3Object: {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Bucket: bucketName,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Name: key,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},\n\u00a0\u00a0\u00a0\u00a0};\n\u00a0\u00a0\u00a0\u00a0return this.rekognition.recognizeCelebrities(params).promise();\n<\/pre><\/div>\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nconst response = helperAWS.DetectCelebritiesOnS3Image(&quot;immaginisalvatore&quot;, &quot;laurie.jpg&quot;).then(\n\u00a0\u00a0\u00a0\u00a0(data) =&gt; {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0console.log(data.CelebrityFaces&#x5B;0].Name + &quot; &quot; + data.CelebrityFaces&#x5B;0].MatchConfidence);\n}).catch((err) =&gt; {\n\u00a0\u00a0\u00a0\u00a0console.error(err);\n});\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">La risposta \u00e8 molto chiara: l&#8217;immagine mostra l&#8217;attore Hugh Laurie con una confidenza del 99,99%.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"335\" data-attachment-id=\"29122\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/riconoscimento-delle-immagini-nel-cloud\/attachment\/picture9\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture9.png?fit=1255%2C410&amp;ssl=1\" data-orig-size=\"1255,410\" data-comments-opened=\"0\" data-image-title=\"Picture9\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture9.png?fit=1024%2C335&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture9.png?resize=1024%2C335&#038;ssl=1\" alt=\"\" class=\"wp-image-29122\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture9-1024x335.png 1024w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture9-980x320.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture9-480x157.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Ecco invece il metodo che possiamo invocare per analizzare l&#8217;immagine della tavola imbandita per cena:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\npublic DetectLabelsOnS3Image(bucketName: string, key: string):\n\u00a0\u00a0\u00a0\u00a0Promise&lt;PromiseResult&lt;AWS.Rekognition.DetectLabelsResponse, AWS.AWSError&gt;&gt; {\n\u00a0\u00a0\u00a0\u00a0const params = {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Image: {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0S3Object: {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Bucket: bucketName,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Name: key,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},\n\u00a0\u00a0\u00a0\u00a0};\n\u00a0\u00a0\u00a0\u00a0return this.rekognition.detectLabels(params).promise();\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Gli elementi identificati sono i seguenti:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nconst response = helperAWS.DetectLabelsOnS3Image(&quot;immaginisalvatore&quot;, &quot;cena.jpg&quot;).then(\n\u00a0\u00a0\u00a0\u00a0(data) =&gt; {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0data.Labels.forEach((label) =&gt; {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0console.log(label.Name + &quot;: &quot; + label.Confidence);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0});\n}).catch((err) =&gt; {\n\u00a0\u00a0\u00a0\u00a0console.error(err);\n});\n<\/pre><\/div>\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"913\" height=\"550\" data-attachment-id=\"29125\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/riconoscimento-delle-immagini-nel-cloud\/attachment\/picture10\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture10.png?fit=913%2C550&amp;ssl=1\" data-orig-size=\"913,550\" data-comments-opened=\"0\" data-image-title=\"Picture10\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture10.png?fit=913%2C550&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture10.png?resize=913%2C550&#038;ssl=1\" alt=\"\" class=\"wp-image-29125\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture10.png 913w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture10-480x289.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 913px, 100vw\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"configurazione-ed-utilizzo-di-google-vision\">Configurazione ed utilizzo di Google Vision<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Le API di Google Vision richiedono:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>la creazione di un progetto Google Cloud;<\/li><li>l&#8217;abilitazione nel progetto delle API di Vision;<\/li><li>la creazione di un file json contenente le chiavi di sicurezza e il&nbsp;<strong>projectId<\/strong>.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Purtroppo, non esistono ancora i file per la definizione dei tipi nell&#8217;SDK che abbiamo installato in fase di setup. La classe che utilizza le API \u00e8 la seguente:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"902\" height=\"813\" data-attachment-id=\"29128\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/riconoscimento-delle-immagini-nel-cloud\/attachment\/picture26-1\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture26-1.png?fit=902%2C813&amp;ssl=1\" data-orig-size=\"902,813\" data-comments-opened=\"0\" data-image-title=\"Picture26-1\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture26-1.png?fit=902%2C813&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture26-1.png?resize=902%2C813&#038;ssl=1\" alt=\"\" class=\"wp-image-29128\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture26-1.png 902w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture26-1-480x433.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 902px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Il codice per analizzare l&#8217;immagine di Hugh Laurie \u00e8 il seguente:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"827\" height=\"178\" data-attachment-id=\"29130\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/riconoscimento-delle-immagini-nel-cloud\/attachment\/picture27\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture27.png?fit=827%2C178&amp;ssl=1\" data-orig-size=\"827,178\" data-comments-opened=\"0\" data-image-title=\"Picture27\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture27.png?fit=827%2C178&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture27.png?resize=827%2C178&#038;ssl=1\" alt=\"\" class=\"wp-image-29130\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture27.png 827w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture27-480x103.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 827px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Il risultato \u00e8 il seguente (compreso il dettaglio sugli elementi del volto):<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"335\" data-attachment-id=\"29133\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/riconoscimento-delle-immagini-nel-cloud\/attachment\/picture28a\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture28a.png?fit=1430%2C468&amp;ssl=1\" data-orig-size=\"1430,468\" data-comments-opened=\"0\" data-image-title=\"Picture28a\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture28a.png?fit=1024%2C335&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture28a.png?resize=1024%2C335&#038;ssl=1\" alt=\"\" class=\"wp-image-29133\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture28a-980x321.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture28a-480x157.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"750\" height=\"483\" data-attachment-id=\"29135\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/riconoscimento-delle-immagini-nel-cloud\/attachment\/picture28b\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture28b.png?fit=750%2C483&amp;ssl=1\" data-orig-size=\"750,483\" data-comments-opened=\"0\" data-image-title=\"Picture28b\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture28b.png?fit=750%2C483&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture28b.png?resize=750%2C483&#038;ssl=1\" alt=\"\" class=\"wp-image-29135\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture28b.png 750w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture28b-480x309.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 750px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">La chiamata per analizzare la tavola per la cena \u00e8:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"928\" height=\"307\" data-attachment-id=\"29140\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/riconoscimento-delle-immagini-nel-cloud\/attachment\/picture30\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture30.png?fit=928%2C307&amp;ssl=1\" data-orig-size=\"928,307\" data-comments-opened=\"0\" data-image-title=\"Picture30\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture30.png?fit=928%2C307&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture30.png?resize=928%2C307&#038;ssl=1\" alt=\"\" class=\"wp-image-29140\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture30.png 928w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture30-480x159.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 928px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">E questo \u00e8 un dettaglio dell&#8217;output.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"710\" height=\"941\" data-attachment-id=\"29142\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/riconoscimento-delle-immagini-nel-cloud\/attachment\/picture31\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture31.png?fit=710%2C941&amp;ssl=1\" data-orig-size=\"710,941\" data-comments-opened=\"0\" data-image-title=\"Picture31\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture31.png?fit=710%2C941&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture31.png?resize=710%2C941&#038;ssl=1\" alt=\"\" class=\"wp-image-29142\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture31.png 710w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/Picture31-480x636.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 710px, 100vw\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"conclusioni\">Conclusioni<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Abbiamo testato codice Typescript su Node.js che utilizza gli SDK Javascript di AI forniti dai principali Cloud provider. La semplicit\u00e0 d&#8217;uso e la ricchezza di metodi e informazioni restituite lo rende uno strumento dalle potenzialit\u00e0 infinite. Ad esempio, in un applicativo client Angular (o React) o in uno scenario serverless, in cui l&#8217;esecuzione di una funzione nel cloud venga triggerata dal caricamento di un&#8217;immagine su uno storage, e tale funzione utilizzi l&#8217;AI per moderare l&#8217;immagine stessa. Ricordiamo, infine, che altrettanto ricca \u00e8 l&#8217;offerta cloud per analizzare testi nelle immagini.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Trovate il codice qui:&nbsp;<a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/sorrentmutie\/image-recognition\" target=\"_blank\">https:\/\/github.com\/sorrentmutie\/image-recognition<\/a><\/p>\n\n\n\n\n","protected":false},"excerpt":{"rendered":"<p>Come utilizzare in Typescript le librerie AI di Azure Cognitive Services, Amazon Rekognition e Google Vision<\/p>\n","protected":false},"author":196716245,"featured_media":29069,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"off","_et_pb_old_content":"","_et_gb_content_width":"","_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","inline_featured_image":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_wpcom_ai_launchpad_first_post":false,"_jetpack_hide_featured_image":false,"_jetpack_featured_image_duplicate_dismissed":0,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"{title}\n\n{excerpt}\n\n{url}","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_wpas_customize_per_network":false,"jetpack_post_was_ever_published":false},"categories":[688637374],"tags":[688637377,688637449,688637412],"class_list":["post-29068","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","tag-azure","tag-cloud","tag-typescript"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Riconoscimento delle immagini nel Cloud - Blexin<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blexin.com\/it\/blog\/riconoscimento-delle-immagini-nel-cloud\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Riconoscimento delle immagini nel Cloud - Blexin\" \/>\n<meta property=\"og:description\" content=\"Come utilizzare in Typescript le librerie AI di Azure Cognitive Services, Amazon Rekognition e Google Vision\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blexin.com\/it\/blog\/riconoscimento-delle-immagini-nel-cloud\/\" \/>\n<meta property=\"og:site_name\" content=\"Blexin\" \/>\n<meta property=\"article:published_time\" content=\"2019-02-04T23:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-01-13T08:40:47+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/c9ceb597-064d-4bfb-b3b1-00bdcf278022.png?fit=1024%2C608&ssl=1\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"608\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Salvatore Sorrentino\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Salvatore Sorrentino\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/riconoscimento-delle-immagini-nel-cloud\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/riconoscimento-delle-immagini-nel-cloud\\\/\"},\"author\":{\"name\":\"Salvatore Sorrentino\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#\\\/schema\\\/person\\\/354db2bc97cac71c2ceeca21a92d5bed\"},\"headline\":\"Riconoscimento delle immagini nel Cloud\",\"datePublished\":\"2019-02-04T23:00:00+00:00\",\"dateModified\":\"2021-01-13T08:40:47+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/riconoscimento-delle-immagini-nel-cloud\\\/\"},\"wordCount\":1432,\"image\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/riconoscimento-delle-immagini-nel-cloud\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/c9ceb597-064d-4bfb-b3b1-00bdcf278022.png?fit=1024%2C608&ssl=1\",\"keywords\":[\"Azure\",\"Cloud\",\"Typescript\"],\"articleSection\":[\"Blog\"],\"inLanguage\":\"it-IT\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/riconoscimento-delle-immagini-nel-cloud\\\/\",\"url\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/riconoscimento-delle-immagini-nel-cloud\\\/\",\"name\":\"Riconoscimento delle immagini nel Cloud - Blexin\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/riconoscimento-delle-immagini-nel-cloud\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/riconoscimento-delle-immagini-nel-cloud\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/c9ceb597-064d-4bfb-b3b1-00bdcf278022.png?fit=1024%2C608&ssl=1\",\"datePublished\":\"2019-02-04T23:00:00+00:00\",\"dateModified\":\"2021-01-13T08:40:47+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#\\\/schema\\\/person\\\/354db2bc97cac71c2ceeca21a92d5bed\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/riconoscimento-delle-immagini-nel-cloud\\\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/riconoscimento-delle-immagini-nel-cloud\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/riconoscimento-delle-immagini-nel-cloud\\\/#primaryimage\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/c9ceb597-064d-4bfb-b3b1-00bdcf278022.png?fit=1024%2C608&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/c9ceb597-064d-4bfb-b3b1-00bdcf278022.png?fit=1024%2C608&ssl=1\",\"width\":1024,\"height\":608},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/riconoscimento-delle-immagini-nel-cloud\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/blexin.com\\\/it\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Riconoscimento delle immagini nel Cloud\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#website\",\"url\":\"https:\\\/\\\/blexin.com\\\/it\\\/\",\"name\":\"Blexin\",\"description\":\"Con noi \u00e8 semplice\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blexin.com\\\/it\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#\\\/schema\\\/person\\\/354db2bc97cac71c2ceeca21a92d5bed\",\"name\":\"Salvatore Sorrentino\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a6ec0dc827d2acaa55df9dbf1007e23f6fcb8c9436df52ab48274bb2221085bf?s=96&d=identicon&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a6ec0dc827d2acaa55df9dbf1007e23f6fcb8c9436df52ab48274bb2221085bf?s=96&d=identicon&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a6ec0dc827d2acaa55df9dbf1007e23f6fcb8c9436df52ab48274bb2221085bf?s=96&d=identicon&r=g\",\"caption\":\"Salvatore Sorrentino\"},\"url\":\"https:\\\/\\\/blexin.com\\\/it\\\/author\\\/salvatore-sorrentinoblexin-com\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Riconoscimento delle immagini nel Cloud - Blexin","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blexin.com\/it\/blog\/riconoscimento-delle-immagini-nel-cloud\/","og_locale":"it_IT","og_type":"article","og_title":"Riconoscimento delle immagini nel Cloud - Blexin","og_description":"Come utilizzare in Typescript le librerie AI di Azure Cognitive Services, Amazon Rekognition e Google Vision","og_url":"https:\/\/blexin.com\/it\/blog\/riconoscimento-delle-immagini-nel-cloud\/","og_site_name":"Blexin","article_published_time":"2019-02-04T23:00:00+00:00","article_modified_time":"2021-01-13T08:40:47+00:00","og_image":[{"width":1024,"height":608,"url":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/c9ceb597-064d-4bfb-b3b1-00bdcf278022.png?fit=1024%2C608&ssl=1","type":"image\/png"}],"author":"Salvatore Sorrentino","twitter_card":"summary_large_image","twitter_misc":{"Scritto da":"Salvatore Sorrentino","Tempo di lettura stimato":"9 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blexin.com\/it\/blog\/riconoscimento-delle-immagini-nel-cloud\/#article","isPartOf":{"@id":"https:\/\/blexin.com\/it\/blog\/riconoscimento-delle-immagini-nel-cloud\/"},"author":{"name":"Salvatore Sorrentino","@id":"https:\/\/blexin.com\/it\/#\/schema\/person\/354db2bc97cac71c2ceeca21a92d5bed"},"headline":"Riconoscimento delle immagini nel Cloud","datePublished":"2019-02-04T23:00:00+00:00","dateModified":"2021-01-13T08:40:47+00:00","mainEntityOfPage":{"@id":"https:\/\/blexin.com\/it\/blog\/riconoscimento-delle-immagini-nel-cloud\/"},"wordCount":1432,"image":{"@id":"https:\/\/blexin.com\/it\/blog\/riconoscimento-delle-immagini-nel-cloud\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/c9ceb597-064d-4bfb-b3b1-00bdcf278022.png?fit=1024%2C608&ssl=1","keywords":["Azure","Cloud","Typescript"],"articleSection":["Blog"],"inLanguage":"it-IT"},{"@type":"WebPage","@id":"https:\/\/blexin.com\/it\/blog\/riconoscimento-delle-immagini-nel-cloud\/","url":"https:\/\/blexin.com\/it\/blog\/riconoscimento-delle-immagini-nel-cloud\/","name":"Riconoscimento delle immagini nel Cloud - Blexin","isPartOf":{"@id":"https:\/\/blexin.com\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blexin.com\/it\/blog\/riconoscimento-delle-immagini-nel-cloud\/#primaryimage"},"image":{"@id":"https:\/\/blexin.com\/it\/blog\/riconoscimento-delle-immagini-nel-cloud\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/c9ceb597-064d-4bfb-b3b1-00bdcf278022.png?fit=1024%2C608&ssl=1","datePublished":"2019-02-04T23:00:00+00:00","dateModified":"2021-01-13T08:40:47+00:00","author":{"@id":"https:\/\/blexin.com\/it\/#\/schema\/person\/354db2bc97cac71c2ceeca21a92d5bed"},"breadcrumb":{"@id":"https:\/\/blexin.com\/it\/blog\/riconoscimento-delle-immagini-nel-cloud\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blexin.com\/it\/blog\/riconoscimento-delle-immagini-nel-cloud\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/blexin.com\/it\/blog\/riconoscimento-delle-immagini-nel-cloud\/#primaryimage","url":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/c9ceb597-064d-4bfb-b3b1-00bdcf278022.png?fit=1024%2C608&ssl=1","contentUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/c9ceb597-064d-4bfb-b3b1-00bdcf278022.png?fit=1024%2C608&ssl=1","width":1024,"height":608},{"@type":"BreadcrumbList","@id":"https:\/\/blexin.com\/it\/blog\/riconoscimento-delle-immagini-nel-cloud\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blexin.com\/it\/"},{"@type":"ListItem","position":2,"name":"Riconoscimento delle immagini nel Cloud"}]},{"@type":"WebSite","@id":"https:\/\/blexin.com\/it\/#website","url":"https:\/\/blexin.com\/it\/","name":"Blexin","description":"Con noi \u00e8 semplice","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blexin.com\/it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Person","@id":"https:\/\/blexin.com\/it\/#\/schema\/person\/354db2bc97cac71c2ceeca21a92d5bed","name":"Salvatore Sorrentino","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/secure.gravatar.com\/avatar\/a6ec0dc827d2acaa55df9dbf1007e23f6fcb8c9436df52ab48274bb2221085bf?s=96&d=identicon&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/a6ec0dc827d2acaa55df9dbf1007e23f6fcb8c9436df52ab48274bb2221085bf?s=96&d=identicon&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a6ec0dc827d2acaa55df9dbf1007e23f6fcb8c9436df52ab48274bb2221085bf?s=96&d=identicon&r=g","caption":"Salvatore Sorrentino"},"url":"https:\/\/blexin.com\/it\/author\/salvatore-sorrentinoblexin-com\/"}]}},"jetpack_publicize_connections":[],"jetpack_likes_enabled":false,"jetpack_shortlink":"https:\/\/wp.me\/pcyUBx-7yQ","jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/c9ceb597-064d-4bfb-b3b1-00bdcf278022.png?fit=1024%2C608&ssl=1","_links":{"self":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts\/29068","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/users\/196716245"}],"replies":[{"embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/comments?post=29068"}],"version-history":[{"count":20,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts\/29068\/revisions"}],"predecessor-version":[{"id":29921,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts\/29068\/revisions\/29921"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/media\/29069"}],"wp:attachment":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/media?parent=29068"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/categories?post=29068"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/tags?post=29068"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}