Share via


Oktatóanyag: Kép metaadatainak létrehozása az Azure Storage-ban az Azure AI Vision használatával

Ebben az oktatóanyagban megtudhatja, hogyan integrálhatja az Azure AI Vision szolgáltatást egy webalkalmazásba a feltöltött képek metaadatainak létrehozásához. Ez olyan digitális eszközkezelési (DAM-) forgatókönyvek esetén hasznos, mint például ha egy vállalat gyorsan szeretne leíró képaláírás vagy kereshető kulcsszavakat létrehozni az összes képéhez.

A Visual Studio használatával olyan MVC-webalkalmazást fog írni, amely elfogadja a felhasználók által feltöltött képeket, és a rendszerképeket az Azure Blob Storage-ban tárolja. Megtudhatja, hogyan olvashat és írhat blobokat c# nyelven, és hogyan csatolhat további információkat a létrehozott blobokhoz blob metaadataival. Ezután elküldi a felhasználó által feltöltött összes képet az Azure AI Vision API-nak, hogy létrehoz egy képaláírás és keressen metaadatokat a képhez. Végül üzembe helyezheti az alkalmazást a felhőben a Visual Studióval.

Ez az oktatóanyag a következőket mutatja be:

  • Tárfiók és tárolók létrehozása az Azure Portal használatával
  • Webalkalmazás létrehozása a Visual Studióban és üzembe helyezése az Azure-ban
  • Információk kinyerése képekből az Azure AI Vision API használatával
  • Metaadatok csatolása Azure Storage-rendszerképekhez
  • Kép metaadatainak ellenőrzése az Azure Storage Explorerrel

Tipp.

A metaadatok létrehozása az Azure AI Vision használatával című szakasz a képelemzés szempontjából a legrelevánsabb. Ugorjon oda, ha csak azt szeretné megtudni, hogyan integrálható a képelemzés egy már létrehozott alkalmazásba.

Ha még nincs Azure-előfizetése, kezdés előtt hozzon létre egy ingyenes fiókot.

Előfeltételek

Tárfiók létrehozása

Ebben a szakaszban az Azure Portal használatával fog létrehozni egy tárfiókot. Ezután létrehoz egy tárolópárot: az egyiket a felhasználó által feltöltött képek tárolására, a másikat pedig a feltöltött képekből létrehozott képminiatűrök tárolására.

  1. Jelentkezzen be az Azure Portalra a böngészőben. Ha a rendszer arra kéri, hogy jelentkezzen be, tegye ezt a Microsoft-fiókjával.

  2. Tárfiók létrehozásához válassza a + Erőforrás létrehozása lehetőséget a bal oldali menüszalagon. Ezután válassza a Storage, majd a Storage-fiók lehetőséget.

    Creating a storage account

  3. Adja meg a tárfiók egyedi nevét a Név mezőben, és győződjön meg arról, hogy zöld pipa jelenik meg mellette. A név azért fontos, mert annak az URL-címnek az egyik részét képezi, amelyen keresztül a fiókban létrehozott blobok elérhetők. Helyezze a tárfiókot egy "IntellipixResources" nevű új erőforráscsoportba, és válassza ki az Önhöz legközelebbi régiót. Fejezze be az új tárfiók létrehozásához a képernyő alján található Véleményezés + létrehozás gombot.

    Feljegyzés

    A tárfiókok neve 3–24 karakter hosszúságú lehet, és csak számokat és kisbetűket tartalmazhat. Emellett a megadott névnek egyedinek kell lennie az Azure-ban. Ha valaki más is ugyanazt a nevet választotta, a név nem érhető el piros felkiáltójellel a Név mezőben.

    Specifying parameters for a new storage account

  4. Válassza ki az Erőforráscsoportok lehetőséget a menüszalag bal oldalán. Ezután válassza ki az "IntellipixResources" erőforráscsoportot.

    Opening the resource group

  5. Az erőforráscsoport számára megnyíló lapon válassza ki a létrehozott tárfiókot. Ha a tárfiók még nem található, a lap tetején a Frissítés lehetőséget választva megjelenítheti.

    Opening the new storage account

  6. A tárfiók fülén válassza a Blobok lehetőséget a fiókhoz társított tárolók listájának megtekintéséhez.

    Viewing blobs button

  7. A tárfiók jelenleg nem rendelkezik tárolókkal. Mielőtt létrehozhat egy blobot, létre kell hoznia egy tárolót, amelyben tárolhatja. Új tároló létrehozásához válassza a + Tároló lehetőséget. Írja be photos a Név mezőt, és válassza a Blob lehetőséget nyilvános hozzáférési szintként. Ezután az OK gombra kattintva hozzon létre egy "photos" nevű tárolót.

    Alapértelmezés szerint a tárolók és a tartalmuk privátak. A Blob hozzáférési szintként való kiválasztása nyilvánosan elérhetővé teszi a "fényképek" tárolóban lévő blobokat, de magát a tárolót nem teszi nyilvánossá. Ezt szeretné, mert a "fényképek" tárolóban tárolt képek egy webalkalmazásból lesznek összekapcsolva.

    Creating a

  8. Ismételje meg az előző lépést egy "miniatűrök" nevű tároló létrehozásához, hogy a tároló nyilvános hozzáférési szintje blobra legyen állítva.

  9. Ellenőrizze, hogy mindkét tároló megjelenik-e a tárfiók tárolóinak listájában, és hogy a nevek helyesen vannak-e beírva.

    The new containers

  10. Zárja be a "Blob szolgáltatás" képernyőt. A tárfiók képernyő bal oldalán található menüben válassza a Hozzáférési kulcsok lehetőséget, majd kattintson a Kulcs1 billentyű melletti Másolás gombra. Illessze be ezt a hozzáférési kulcsot a kedvenc szövegszerkesztőbe későbbi használatra.

    Copying the access key

Létrehozott egy tárfiókot, amelyben tárolhatja a létrehozni kívánt alkalmazásba feltöltött képeket, valamint tárolókat a képek tárolásához.

Az Azure Storage Explorer futtatása

Az Azure Storage Explorer egy ingyenes eszköz, amely grafikus felületet biztosít az Azure Storage használatához Windows, macOS és Linux rendszerű számítógépeken. Az Azure Portallal azonos funkciókat biztosít, és más funkciókat is kínál, például a blob metaadatainak megtekintését. Ebben a szakaszban a Microsoft Azure Storage Explorer használatával tekintheti meg az előző szakaszban létrehozott tárolókat.

  1. Ha még nem telepítette a Storage Explorert, vagy meg szeretné győződni arról, hogy a legújabb verziót futtatja, nyissa meg http://storageexplorer.com/ és töltse le és telepítse.

  2. Indítsa el a Storage Explorert. Ha a rendszer arra kéri, hogy jelentkezzen be, ezt a Microsoft-fiókjával teheti meg – ugyanazzal, amelyet az Azure Portalra való bejelentkezéshez használt. Ha nem látja a tárfiókot a Storage Explorer bal oldali ablaktábláján, válassza az alábbiakban kiemelt Fiókok kezelése gombot, és győződjön meg arról, hogy a Microsoft-fiókja és a tárfiók létrehozásához használt előfizetés is hozzá lett adva a Storage Explorerhez.

    Managing accounts in Storage Explorer

  3. A tárfiók melletti kis nyílra kattintva megjelenítheti a tárfiók tartalmát, majd a Blob-tárolók melletti nyílra kattintva. Győződjön meg arról, hogy a létrehozott tárolók megjelennek a listában.

    Viewing blob containers

A tárolók jelenleg üresek, de ez az alkalmazás üzembe helyezése és a fényképek feltöltése után megváltozik. Ha telepítve van a Storage Explorer, könnyen láthatja, hogy az alkalmazás mit ír a Blob Storage-ba.

Új webalkalmazás létrehozása a Visual Studióban

Ebben a szakaszban létrehoz egy új webalkalmazást a Visual Studióban, és kódot ad hozzá a képek feltöltéséhez, blobtárolóba való írásához és weblapon való megjelenítéséhez szükséges alapvető funkciók implementálásához.

  1. Indítsa el a Visual Studiót, és használja a Fájl –> Új –> Projekt parancsot egy új Visual C# ASP.NET "Intellipix" nevű webalkalmazás-projekt létrehozásához (az intelligens képek rövidítéséhez).

    Creating a new Web Application project

  2. Az "Új ASP.NET webalkalmazás" párbeszédpanelen győződjön meg arról, hogy az MVC be van jelölve. Ezután válassza az OK gombra.

    Creating a new ASP.NET MVC project

  3. Szánjon egy kis időt a Megoldáskezelő projektstruktúrájának áttekintésére. Többek között van egy Vezérlők nevű mappa, amely tartalmazza a projekt MVC-vezérlőit, valamint egy Nézetek nevű mappát, amely a projekt nézeteit tartalmazza. Az alkalmazás implementálása során ezekben a mappákban és más mappákban lévő eszközökkel fog dolgozni.

    The project shown in Solution Explorer

  4. Használja a Visual Studio Hibakeresése –> Hibakeresés nélkül parancsot (vagy nyomja le a Ctrl+F5 billentyűkombinációt) az alkalmazás böngészőben való elindításához. Az alkalmazás jelenlegi állapota a következő:

    The initial application

  5. Zárja be a böngészőt, és térjen vissza a Visual Studióba. A Megoldáskezelő kattintson a jobb gombbal az Intellipix projektre, és válassza a NuGet-csomagok kezelése... lehetőséget. Válassza a Tallózás lehetőséget. Ezután írja be imageresizer a keresőmezőbe, és válassza ki az ImageResizer nevű NuGet-csomagot. Végül válassza a Telepítés lehetőséget a csomag legújabb stabil verziójának telepítéséhez. Az ImageResizer olyan API-kat tartalmaz, amelyekkel képminiatűröket hozhat létre az alkalmazásba feltöltött képekből. OK bármilyen módosítást, és fogadja el az Ön számára bemutatott licenceket.

    Installing ImageResizer

  6. Ismételje meg ezt a folyamatot a WindowsAzure.Storage nevű NuGet-csomag projekthez való hozzáadásához. Ez a csomag API-kat tartalmaz az Azure Storage .NET-alkalmazásokból való eléréséhez. OK bármilyen módosítást, és fogadja el az Ön számára bemutatott licenceket.

    Installing WindowsAzure.Storage

  7. Nyissa meg a Web.config fájlt, és adja hozzá a következő utasítást a <appSettings> szakaszhoz, cserélje le a ACCOUNT_NAME az első szakaszban létrehozott tárfiók nevére, és ACCOUNT_KEY a mentett hozzáférési kulccsal.

    <add key="StorageConnectionString" value="DefaultEndpointsProtocol=https;AccountName=ACCOUNT_NAME;AccountKey=ACCOUNT_KEY" />
    

    Fontos

    A Web.config fájl olyan bizalmas információkat tárol, mint az előfizetési kulcsok, és a .config kiterjesztésű fájlra irányuló HTTP-kéréseket a ASP.NET motor kezeli, amely egy "Ez a laptípus nem kézbesítve" üzenetet ad vissza. Ha azonban egy támadó talál egy másik biztonsági rést, amely lehetővé teszi számukra a Web.config tartalmainak megtekintését, akkor közzétehetik ezeket az információkat. A Web.config-adatok további védelméhez további lépéseket a Csatlakozás ion-sztringek és egyéb konfigurációs információk védelme című témakörben talál.

  8. Nyissa meg a _Layout.cshtml nevű fájlt a projekt Nézetek/Megosztott mappájában. A 19. sorban módosítsa az "Alkalmazás neve" értéket "Intellipix" értékre. A sornak így kell kinéznie:

    @Html.ActionLink("Intellipix", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" })
    

    Feljegyzés

    Egy ASP.NET MVC-projektben a _Layout.cshtml egy speciális nézet, amely sablonként szolgál más nézetekhez. Általában olyan élőfej- és élőláb-tartalmat határoz meg, amely a fájl összes nézetében gyakori.

  9. Kattintson a jobb gombbal a projekt Modellek mappájára, és a Hozzáadás –> Osztály... paranccsal adjon hozzá egy BlobInfo.cs nevű osztályfájlt a mappához. Ezután cserélje le az üres BlobInfo osztályt a következő osztálydefinícióra:

    public class BlobInfo
    {
        public string ImageUri { get; set; }
        public string ThumbnailUri { get; set; }
        public string Caption { get; set; }
    }
    
  10. Nyissa meg HomeController.cs a projekt Vezérlők mappájából, és adja hozzá a következő using utasításokat a fájl elejéhez:

    using ImageResizer;
    using Intellipix.Models;
    using Microsoft.WindowsAzure.Storage;
    using Microsoft.WindowsAzure.Storage.Blob;
    using System.Configuration;
    using System.Threading.Tasks;
    using System.IO;
    
  11. Cserélje le az Index metódust HomeController.cs a következő implementációra:

    public ActionResult Index()
    {
        // Pass a list of blob URIs in ViewBag
        CloudStorageAccount account = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["StorageConnectionString"]);
        CloudBlobClient client = account.CreateCloudBlobClient();
        CloudBlobContainer container = client.GetContainerReference("photos");
        List<BlobInfo> blobs = new List<BlobInfo>();
    
        foreach (IListBlobItem item in container.ListBlobs())
        {
            var blob = item as CloudBlockBlob;
    
            if (blob != null)
            {
                blobs.Add(new BlobInfo()
                {
                    ImageUri = blob.Uri.ToString(),
                    ThumbnailUri = blob.Uri.ToString().Replace("/photos/", "/thumbnails/")
                });
            }
        }
    
        ViewBag.Blobs = blobs.ToArray();
        return View();
    }
    

    Az új Index metódus számba helyezi a "photos" tárolóban lévő blobokat, és a blobokat képviselő BlobInfo-objektumok tömbjét továbbítja a nézetbe ASP.NET MVC ViewBag tulajdonságán keresztül. Később módosítja a nézetet az objektumok számbavételéhez és a fénykép miniatűrjeinek gyűjteményének megjelenítéséhez. A tárfiók eléréséhez és a blobok (CloudStorageAccount, CloudBlobClient és CloudBlobContainer) számbavételéhez használt osztályok a NuGeten keresztül telepített WindowsAzure.Storage csomagból származnak.

  12. Adja hozzá a következő metódust a HomeController osztályhoz a HomeController.cs:

    [HttpPost]
    public async Task<ActionResult> Upload(HttpPostedFileBase file)
    {
        if (file != null && file.ContentLength > 0)
        {
            // Make sure the user selected an image file
            if (!file.ContentType.StartsWith("image"))
            {
                TempData["Message"] = "Only image files may be uploaded";
            }
            else
            {
                try
                {
                    // Save the original image in the "photos" container
                    CloudStorageAccount account = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["StorageConnectionString"]);
                    CloudBlobClient client = account.CreateCloudBlobClient();
                    CloudBlobContainer container = client.GetContainerReference("photos");
                    CloudBlockBlob photo = container.GetBlockBlobReference(Path.GetFileName(file.FileName));
                    await photo.UploadFromStreamAsync(file.InputStream);
    
                    // Generate a thumbnail and save it in the "thumbnails" container
                    using (var outputStream = new MemoryStream())
                    {
                        file.InputStream.Seek(0L, SeekOrigin.Begin);
                        var settings = new ResizeSettings { MaxWidth = 192 };
                        ImageBuilder.Current.Build(file.InputStream, outputStream, settings);
                        outputStream.Seek(0L, SeekOrigin.Begin);
                        container = client.GetContainerReference("thumbnails");
                        CloudBlockBlob thumbnail = container.GetBlockBlobReference(Path.GetFileName(file.FileName));
                        await thumbnail.UploadFromStreamAsync(outputStream);
                    }
                }
                catch (Exception ex)
                {
                    // In case something goes wrong
                    TempData["Message"] = ex.Message;
                }
            }
        }
    
        return RedirectToAction("Index");
    }
    

    Ez az a metódus, amelyet a rendszer a fénykép feltöltésekor hív meg. Az egyes feltöltött képeket blobként tárolja a "photos" tárolóban, miniatűrképet hoz létre az eredeti képből a ImageResizer csomag használatával, és blobként tárolja a miniatűrképet a "thumbnails" tárolóban.

  13. Nyissa meg az Index.cshmtl fájlt a projekt Nézetek/Kezdőlap mappájában, és cserélje le a tartalmát a következő kódra és korrektúrára:

    @{
        ViewBag.Title = "Intellipix Home Page";
    }
    
    @using Intellipix.Models
    
    <div class="container" style="padding-top: 24px">
        <div class="row">
            <div class="col-sm-8">
                @using (Html.BeginForm("Upload", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
                {
                    <input type="file" name="file" id="upload" style="display: none" onchange="$('#submit').click();" />
                    <input type="button" value="Upload a Photo" class="btn btn-primary btn-lg" onclick="$('#upload').click();" />
                    <input type="submit" id="submit" style="display: none" />
                }
            </div>
            <div class="col-sm-4 pull-right">
            </div>
        </div>
    
        <hr />
    
        <div class="row">
            <div class="col-sm-12">
                @foreach (BlobInfo blob in ViewBag.Blobs)
                {
                    <img src="@blob.ThumbnailUri" width="192" title="@blob.Caption" style="padding-right: 16px; padding-bottom: 16px" />
                }
            </div>
        </div>
    </div>
    
    @section scripts
    {
        <script type="text/javascript" language="javascript">
            if ("@TempData["Message"]" !== "") {
                alert("@TempData["Message"]");
            }
        </script>
    }
    

    Az itt használt nyelv a Razor, amellyel végrehajtható kódot ágyazhat be HTML-korrektúrákba. A @foreach fájl közepén lévő utasítás számba adja a ViewBag vezérlőtől kapott BlobInfo-objektumokat, és HTML-elemeket <img> hoz létre belőlük. Az src egyes elemek tulajdonsága inicializálva van a kép miniatűrt tartalmazó blob URI-jával.

  14. Töltse le és bontsa ki a photos.zip fájlt a GitHub-mintaadattárból. Ez az alkalmazás teszteléséhez használható különböző fényképek választéka.

  15. Mentse a módosításokat, és nyomja le a Ctrl+F5 billentyűkombinációt az alkalmazás böngészőben való elindításához. Ezután válassza a Fénykép feltöltése lehetőséget, és töltse fel a letöltött képek egyikét. Ellenőrizze, hogy megjelenik-e a fénykép miniatűr verziója a lapon.

    Intellipix with one photo uploaded

  16. Töltsön fel még néhány képet a fényképek mappájából. Győződjön meg arról, hogy az oldalon is megjelennek:

    Intellipix with three photos uploaded

  17. Kattintson a jobb gombbal a böngészőben, és válassza a Lapforrás megtekintése lehetőséget a lap forráskódjának megtekintéséhez. Keresse meg a <img> kép miniatűrjeit képviselő elemeket. Figyelje meg, hogy a képekhez rendelt URL-címek közvetlenül blobokra hivatkoznak a Blob Storage-ban. Ennek az az oka, hogy a tárolók nyilvános hozzáférési szintjét blobra állítja, ami nyilvánosan akadálymentessé teszi a blobokat.

  18. Térjen vissza az Azure Storage Explorerbe (vagy indítsa újra, ha nem hagyta futni), és válassza ki a tárolót a "photos" tárfiókja alatt. A tárolóban lévő blobok számának meg kell egyezik a feltöltött fényképek számával. Kattintson duplán az egyik blobra a letöltéshez, és tekintse meg a blobban tárolt képet.

    Contents of the

  19. Nyissa meg a tárolót a "thumbnails" Storage Explorerben. Nyissa meg az egyik blobot a képfeltöltésekből létrehozott miniatűrképek megtekintéséhez.

Az alkalmazás még nem kínál módot a feltöltött eredeti képek megtekintésére. Ideális esetben a kép miniatűrjének kiválasztásakor meg kell jelennie az eredeti képnek. Ezt a funkciót a következő lépésben fogja hozzáadni.

Fénymező hozzáadása fényképek megtekintéséhez

Ebben a szakaszban egy ingyenes, nyílt forráskódú JavaScript-kódtárat fog használni egy olyan lightbox-megjelenítő hozzáadásához, amely lehetővé teszi a felhasználók számára, hogy lássák az eredeti képeket, amelyeket feltöltöttek (nem csak a kép miniatűrjei). A fájlok az Ön számára vannak megadva. Mindössze annyit kell tennie, hogy integrálja őket a projektbe, és kisebb módosítást végez az Index.cshtml-ben.

  1. Töltse le a lightbox.css és lightbox.js fájlokat a GitHub kódtárából.

  2. A Megoldáskezelő kattintson a jobb gombbal a projekt Szkriptek mappájára, és az Add -> New Item... paranccsal hozzon létre egy lightbox.js fájlt. Illessze be a GitHub-kódtárban található példafájl tartalmát.

  3. Kattintson a jobb gombbal a projekt "Tartalom" mappájára, és a Hozzáadás –> Új elem... paranccsal hozzon létre egy lightbox.css fájlt. Illessze be a GitHub-kódtárban található példafájl tartalmát.

  4. Töltse le és bontsa ki a buttons.zip fájlt a GitHub-adatfájlok adattárából: https://github.com/Azure-Samples/cognitive-services-sample-data-files/tree/master/ComputerVision/storage-lab-tutorial. Négy gombos képnek kell lennie.

  5. Kattintson a jobb gombbal az Intellipix-projektre a Megoldáskezelő, és az Add –> New Folder paranccsal vegyen fel egy "Images" nevű mappát a projekthez.

  6. Kattintson a jobb gombbal a Képek mappára, és a Hozzáadás –> Meglévő elem... paranccsal importálja a letöltött négy képet.

  7. Nyissa meg BundleConfig.cs a projekt "App_Start" mappájában. Adja hozzá a következő utasítást a metódushoz a RegisterBundlesBundleConfig.cs:

    bundles.Add(new ScriptBundle("~/bundles/lightbox").Include(
              "~/Scripts/lightbox.js"));
    
  8. Ugyanebben a metódusban keresse meg azt az utasítást, amely létrehoz egy StyleBundle "~/Content/css" fájlt, és adja hozzá a lightbox.css a csomag stíluslapjainak listájához. Itt található a módosított utasítás:

    bundles.Add(new StyleBundle("~/Content/css").Include(
              "~/Content/bootstrap.css",
              "~/Content/site.css",
              "~/Content/lightbox.css"));
    
  9. Nyissa meg a _Layout.cshtml fájlt a projekt Nézetek/Megosztott mappájában, és adja hozzá a következő utasítást a @RenderSection lenti utasítás előtt:

    @Scripts.Render("~/bundles/lightbox")
    
  10. Az utolsó feladat a lightbox megjelenítő beépítése a kezdőlapra. Ehhez nyissa meg az Index.cshtml fájlt (ez a projekt Nézetek/Kezdőlap mappájában található), és cserélje le a hurkot a @foreach következőre:

    @foreach (BlobInfo blob in ViewBag.Blobs)
    {
        <a href="@blob.ImageUri" rel="lightbox" title="@blob.Caption">
            <img src="@blob.ThumbnailUri" width="192" title="@blob.Caption" style="padding-right: 16px; padding-bottom: 16px" />
        </a>
    }
    
  11. Mentse a módosításokat, és nyomja le a Ctrl+F5 billentyűkombinációt az alkalmazás böngészőben való elindításához. Ezután válassza ki a korábban feltöltött képek egyikét. Győződjön meg arról, hogy megjelenik egy fénymező, és megjelenik a kép kibővített nézete.

    An enlarged image

  12. A fénymező jobb alsó sarkában lévő X elemet választva zárja be.

Most már megtekintheti a feltöltött képeket. A következő lépés az, hogy többet tegyenek ezekkel a képekkel.

Metaadatok létrehozása az Azure AI Vision használatával

Vision-erőforrás létrehozása

Létre kell hoznia egy Computer Vision-erőforrást az Azure-fiókjához; Ez az erőforrás kezeli az Azure Azure AI Vision szolgáltatáshoz való hozzáférését.

  1. Kövesse az Azure AI-szolgáltatások erőforrásának létrehozásához szükséges utasításokat egy többszolgáltatásos vagy Vision-erőforrás létrehozásához.

  2. Ezután nyissa meg az erőforráscsoport menüjét, és válassza ki a létrehozott Vision-erőforrást. Másolja a Végpont alatti URL-címet egy olyan helyre, ahová egy pillanat alatt egyszerűen lekérheti. Ezután válassza a Hozzáférési kulcsok megjelenítése lehetőséget.

    Azure portal page with the endpoint URL and access keys link outlined

    Feljegyzés

    A 2019. július 1. után létrehozott új erőforrások egyéni altartományneveket fognak használni. További információkért és a regionális végpontok teljes listájáért tekintse meg az Azure AI-szolgáltatások egyéni altartományneveit.

  3. A következő ablakban másolja az 1. kulcs értékét a vágólapra.

    Manage keys dialog, with the copy button outlined

Azure AI Vision-hitelesítő adatok hozzáadása

Ezután hozzáadja a szükséges hitelesítő adatokat az alkalmazáshoz, hogy hozzáférhessen a Vision-erőforrásokhoz.

Lépjen a web.config fájlra a projekt gyökerénél. Adja hozzá a következő utasításokat a <appSettings> fájl szakaszához, lecserélve VISION_KEY az előző lépésben másolt kulccsal és VISION_ENDPOINT az előző lépésben mentett URL-címmel.

<add key="SubscriptionKey" value="VISION_KEY" />
<add key="VisionEndpoint" value="VISION_ENDPOINT" />

A Megoldáskezelő. kattintson a jobb gombbal a projektmegoldásra, és válassza a NuGet-csomagok kezelése lehetőséget. A megnyíló csomagkezelőben válassza a Tallózás lehetőséget, jelölje be az Előzetes verzió belefoglalása lehetőséget, és keressen rá az Azure.AI.Vision.ImageAnalysis kifejezésre. Válassza a Telepítés lehetőséget.

Metaadat-létrehozási kód hozzáadása

Ezután hozzáadja azt a kódot, amely valójában az Azure AI Vision szolgáltatást használja a képek metaadatainak létrehozásához.

  1. Nyissa meg a HomeController.cs fájlt a projekt Vezérlők mappájában, és adja hozzá a következő using utasításokat a fájl tetején:

    using Azure;
    using Azure.AI.Vision.ImageAnalysis;
    using System;
    
  2. Ezután lépjen a Feltöltés metódusra. Ez a metódus konvertálja és feltölti a képeket blobtárolóba. Adja hozzá a következő kódot közvetlenül a blokk után, amely a kép-blob-létrehozási folyamat végén kezdődik // Generate a thumbnail . Ez a kód a lemezképet (photo) tartalmazó blobot használja, és az Azure AI Vision használatával készít leírást a rendszerképhez. Az Azure AI Vision API a rendszerképre vonatkozó kulcsszavak listáját is létrehozza. A létrehozott leírás és kulcsszavak a blob metaadataiban vannak tárolva, hogy később lekérhetők legyenek.

    // create a new ImageAnalysisClient
    ImageAnalysisClient client = new ImageAnalysisClient(
            new Uri(Environment.GetEnvironmentVariable(ConfigurationManager.AppSettings["VisionEndpoint"])),
            new AzureKeyCredential(ConfigurationManager.AppSettings["SubscriptionKey"]));
    
    VisualFeatures = visualFeatures = VisualFeatures.Caption | VisualFeatures.Tags;
    
    ImageAnalysisOptions analysisOptions = new ImageAnalysisOptions()
    {
        GenderNeutralCaption = true,
        Language = "en",
    };
    
    Uri imageURL = new Uri(photo.Uri.ToString());
    
    ImageAnalysisResult  result = client.Analyze(imageURL,visualFeatures,analysisOptions);
    
    // Record the image description and tags in blob metadata
    photo.Metadata.Add("Caption", result.Caption.Text);
    
    for (int i = 0; i < result.Tags.Values.Count; i++)
    {
        string key = String.Format("Tag{0}", i);
        photo.Metadata.Add(key, result.Tags.Values[i]);
    }
    
    await photo.SetMetadataAsync();
    
  3. Ezután nyissa meg az Index metódust ugyanabban a fájlban. Ez a metódus számba adja a tárolt képblobokat a célzott blobtárolóban (IListBlobItem-példányokként), és átadja őket az alkalmazásnézetnek. Cserélje le a foreach metódus blokkját a következő kódra. Ez a kód meghívja a CloudBlockBlob.FetchAttributes-t az egyes blobok csatolt metaadatainak lekéréséhez. Kinyeri a számítógép által létrehozott leírást (caption) a metaadatokból, és hozzáadja a BlobInfo objektumhoz, amelyet a rendszer átad a nézetnek.

    foreach (IListBlobItem item in container.ListBlobs())
    {
        var blob = item as CloudBlockBlob;
    
        if (blob != null)
        {
            blob.FetchAttributes(); // Get blob metadata
            var caption = blob.Metadata.ContainsKey("Caption") ? blob.Metadata["Caption"] : blob.Name;
    
            blobs.Add(new BlobInfo()
            {
                ImageUri = blob.Uri.ToString(),
                ThumbnailUri = blob.Uri.ToString().Replace("/photos/", "/thumbnails/"),
                Caption = caption
            });
        }
    }
    

Az alkalmazás tesztelése

Mentse a módosításokat a Visual Studióban, és nyomja le a Ctrl+F5 billentyűkombinációt az alkalmazás böngészőben való elindításához. Az alkalmazással további képeket tölthet fel a letöltött fényképkészletből vagy a saját mappájából. Amikor a kurzort az egyik új kép fölé viszi a nézetben, megjelenik egy elemleírás ablak, amely megjeleníti a számítógép által létrehozott képaláírás a képhez.

The computer-generated caption

Az összes csatolt metaadat megtekintéséhez használja az Azure Storage Explorert a lemezképekhez használt tároló megtekintéséhez. Kattintson a jobb gombbal a tárolóban lévő blobokra, és válassza a Tulajdonságok lehetőséget. A párbeszédpanelen megjelenik a kulcs-érték párok listája. A számítógép által létrehozott képleírást az elem Captiontárolja, a keresési kulcsszavakat pedig a rendszer tároljaTag0Tag1, és így tovább. Ha végzett, a Mégse gombra kattintva zárja be a párbeszédpanelt.

Image properties dialog window, with metadata tags listed

Keresés hozzáadása az alkalmazáshoz

Ebben a szakaszban egy keresőmezőt fog hozzáadni a kezdőlaphoz, amellyel a felhasználók kulcsszókereséseket hajthatnak végre a feltöltött képeken. A kulcsszavak az Azure AI Vision API által generált és blob metaadatokban tárolt kulcsszavak.

  1. Nyissa meg az Index.cshtml fájlt a projekt Nézetek/Kezdőlap mappájában, és adja hozzá az alábbi utasításokat az üres <div> elemhez az class="col-sm-4 pull-right" attribútummal:

    @using (Html.BeginForm("Search", "Home", FormMethod.Post, new { enctype = "multipart/form-data", @class = "navbar-form" }))
    {
        <div class="input-group">
            <input type="text" class="form-control" placeholder="Search photos" name="term" value="@ViewBag.Search" style="max-width: 800px">
            <span class="input-group-btn">
                <button class="btn btn-primary" type="submit">
                    <i class="glyphicon glyphicon-search"></i>
                </button>
            </span>
        </div>
    }
    

    Ez a kód és korrektúra hozzáad egy keresőmezőt és egy Keresés gombot a kezdőlaphoz.

  2. Nyissa meg a HomeController.cs a projekt Vezérlők mappájában, és adja hozzá a következő metódust a HomeController osztályhoz:

    [HttpPost]
    public ActionResult Search(string term)
    {
        return RedirectToAction("Index", new { id = term });
    }
    

    Ezt a metódust hívja meg a rendszer, amikor a felhasználó kiválasztja az előző lépésben hozzáadott Keresés gombot. Frissíti a lapot, és tartalmaz egy keresési paramétert az URL-címben.

  3. Cserélje le az Index metódust a következő implementációra:

    public ActionResult Index(string id)
    {
        // Pass a list of blob URIs and captions in ViewBag
        CloudStorageAccount account = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["StorageConnectionString"]);
        CloudBlobClient client = account.CreateCloudBlobClient();
        CloudBlobContainer container = client.GetContainerReference("photos");
        List<BlobInfo> blobs = new List<BlobInfo>();
    
        foreach (IListBlobItem item in container.ListBlobs())
        {
            var blob = item as CloudBlockBlob;
    
            if (blob != null)
            {
                blob.FetchAttributes(); // Get blob metadata
    
                if (String.IsNullOrEmpty(id) || HasMatchingMetadata(blob, id))
                {
                    var caption = blob.Metadata.ContainsKey("Caption") ? blob.Metadata["Caption"] : blob.Name;
    
                    blobs.Add(new BlobInfo()
                    {
                        ImageUri = blob.Uri.ToString(),
                        ThumbnailUri = blob.Uri.ToString().Replace("/photos/", "/thumbnails/"),
                        Caption = caption
                    });
                }
            }
        }
    
        ViewBag.Blobs = blobs.ToArray();
        ViewBag.Search = id; // Prevent search box from losing its content
        return View();
    }
    

    Figyelje meg, hogy az Index metódus most már elfogad egy paramétert id , amely tartalmazza a felhasználó által a keresőmezőbe beírt értéket. Egy üres vagy hiányzó id paraméter azt jelzi, hogy az összes fényképet meg kell jeleníteni.

  4. Adja hozzá a következő segédmetódust a HomeController osztályhoz:

    private bool HasMatchingMetadata(CloudBlockBlob blob, string term)
    {
        foreach (var item in blob.Metadata)
        {
            if (item.Key.StartsWith("Tag") && item.Value.Equals(term, StringComparison.InvariantCultureIgnoreCase))
                return true;
        }
    
        return false;
    }
    

    Ezt a metódust az Index metódus hívja meg annak megállapításához, hogy az adott képblobhoz csatolt metaadat-kulcsszavak tartalmazzák-e a felhasználó által megadott keresési kifejezést.

  5. Indítsa el újra az alkalmazást, és töltsön fel több fényképet. Nyugodtan használhatja saját fényképeit, nem csak az oktatóanyagban megadottakat.

  6. Írjon be egy kulcsszót, például a "river" szót a keresőmezőbe. Ezután válassza a Keresés gombot.

    Performing a search

  7. A keresési eredmények a beírt adatoktól és a feltöltött képektől függően változnak. Az eredménynek azonban olyan képek szűrt listájának kell lennie, amelyek metaadat-kulcsszavak tartalmazzák a beírt kulcsszó egészét vagy egy részét.

    Search results

  8. Kattintson a böngésző vissza gombjára az összes kép ismételt megjelenítéséhez.

Már majdnem elkészült. Ideje üzembe helyezni az alkalmazást a felhőben.

Az alkalmazás üzembe helyezése az Azure-ban

Ebben a szakaszban üzembe helyezi az alkalmazást az Azure-ban a Visual Studióból. Lehetővé teszi, hogy a Visual Studio létrehozzon önnek egy Azure-webalkalmazást, így nem kell külön-külön bemennie az Azure Portalra, és létre kell hoznia.

  1. Kattintson a jobb gombbal a projektre Megoldáskezelő, és válassza a Helyi menü Közzététel parancsát. Győződjön meg arról, hogy a Microsoft Azure-alkalmazás Szolgáltatás és az Új létrehozása lehetőség van kiválasztva, majd válassza a Közzététel gombot.

    Publishing the app

  2. A következő párbeszédpanelen válassza az "IntellipixResources" erőforráscsoportot az Erőforráscsoport csoportban. Válassza az Új... gombot az "App Service-csomag" mellett, és hozzon létre egy új App Service-csomagot ugyanazon a helyen, ahol a tárfiókhoz kiválasztotta a tárfiókot, elfogadva az alapértelmezett értékeket mindenhol. Fejezze be a Létrehozás gombot.

    Creating an Azure Web App

  3. Néhány pillanat múlva az alkalmazás megjelenik egy böngészőablakban. Jegyezze fel az URL-címet a címsorban. Az alkalmazás már nem helyileg fut; a weben, ahol nyilvánosan elérhető.

    The finished product!

Ha módosítja az alkalmazást, és le szeretné küldeni a módosításokat a webe, folytassa újra a közzétételi folyamatot. A webes közzététel előtt továbbra is tesztelheti a módosításokat helyben.

Az erőforrások eltávolítása

Ha továbbra is dolgozni szeretne a webalkalmazáson, tekintse meg a Következő lépések szakaszt . Ha nem tervezi folytatni az alkalmazás használatát, törölje az összes alkalmazásspecifikus erőforrást. Az erőforrások törléséhez törölheti az Azure Storage-előfizetést és a Vision-erőforrást tartalmazó erőforráscsoportot. Ezzel eltávolítja a tárfiókot, a hozzá feltöltött blobokat és a ASP.NET webalkalmazáshoz való csatlakozáshoz szükséges App Service-erőforrást.

Az erőforráscsoport törléséhez nyissa meg az Erőforráscsoportok lapot a portálon, keresse meg a projekthez használt erőforráscsoportot, és válassza az Erőforráscsoport törlése lehetőséget a nézet tetején. A rendszer kérni fogja, hogy írja be az erőforráscsoport nevét, hogy megerősítse a törlést. A törlés után az erőforráscsoport nem állítható helyre.

Következő lépések

Az Azure-t sokkal többre használhatja, és még tovább fejlesztheti Intellipix-alkalmazását. Hozzáadhat például támogatást a felhasználók hitelesítéséhez és a fényképek törléséhez, és ahelyett, hogy arra kényszerítené a felhasználót, hogy várja meg, amíg az Azure AI-szolgáltatások feldolgoznak egy fényképet egy feltöltést követően, az Azure Functions használatával aszinkron módon hívhatja meg az Azure AI Vision API-t minden alkalommal, amikor képet adnak hozzá a Blob Storage-hoz. Az áttekintésben ismertetett számos más képelemzési műveletet is elvégezhet a képen.