Öğretici: Görsel durumları raporlamak için IoT cihazıyla Özel Görüntü İşleme kullanma

Bu örnek uygulama, görsel durumları algılamak üzere bir cihazı kamerayla eğitmek için Özel Görüntü İşleme nasıl kullanılacağını gösterir. Dışarı aktarılan bir ONNX modelini kullanarak bu algılama senaryosunu bir IoT cihazında çalıştırabilirsiniz.

Görsel durum, bir görüntünün içeriğini açıklar: boş bir oda veya kişiler içeren bir oda, boş bir sürücü veya kamyonlu bir yol vb. Aşağıdaki görüntüde, uygulamanın kameranın önüne bir muz veya elma yerleştirildiğinde algıladiğini görebilirsiniz.

Animation of a UI labeling fruit in front of the camera

Bu öğreticide şunları nasıl yapacağınızı gösterilecek:

  • Örnek uygulamayı kendi Özel Görüntü İşleme ve IoT Hub kaynaklarınızı kullanacak şekilde yapılandırın.
  • Özel Görüntü İşleme projenizi eğitmek için uygulamayı kullanın.
  • Uygulamayı kullanarak yeni görüntüleri gerçek zamanlı olarak puanlayın ve sonuçları Azure'a gönderin.

Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.

Önkoşullar

  • Özel Görüntü İşleme Hizmeti'ni kullanmak için Azure'da Özel Görüntü İşleme Eğitim ve Tahmin kaynakları oluşturmanız gerekir. Bunu Azure portal yapmak için, Özel Görüntü İşleme Oluştur sayfasındaki iletişim kutusunu doldurarak hem Eğitim hem de Tahmin kaynağı oluşturun.

    Önemli

    Modeli daha sonra ONNX'e aktaracağımızdan, bu projenin Sıkıştırılmış görüntü sınıflandırma projesi olması gerekir.

  • Ayrıca Azure'da bir IoT Hub kaynağı oluşturmanız gerekir.
  • Visual Studio 2015 veya üzeri
  • İsteğe bağlı olarak, Windows 10 IoT Core sürüm 17763 veya üzerini çalıştıran bir IoT cihazı. Uygulamayı doğrudan bilgisayarınızdan da çalıştırabilirsiniz.
    • Raspberry Pi 2 ve 3 için Windows 10 doğrudan IoT Panosu uygulamasından ayarlayabilirsiniz. DrangonBoard gibi diğer cihazlar için eMMC yöntemini kullanarak yanıp sönmesi gerekir. Yeni cihaz ayarlama konusunda yardıma ihtiyacınız varsa Windows IoT belgelerinde Cihazınızı ayarlama bölümüne bakın.

Görsel Uyarılar uygulaması hakkında

IoT Görsel Uyarıları uygulaması, dört farklı durum arasında uygun şekilde geçiş yaparak sürekli bir döngüde çalışır:

  • Model Yok: İşlem yapılmaz durumu. Uygulama bir saniye boyunca sürekli uyuyacak ve kamerayı kontrol edecektir.
  • Eğitim Görüntülerini Yakalama: Bu durumda, uygulama bir resim yakalar ve bunu hedef Özel Görüntü İşleme projesine eğitim görüntüsü olarak yükler. Daha sonra uygulama 500 ms uyku modundadır ve ayarlanan hedef görüntü sayısı yakalanana kadar işlemi yineler. Ardından Özel Görüntü İşleme modelinin eğitimini tetikler.
  • Eğitilen Model Bekleniyor: Bu durumda uygulama, hedef projenin eğitilmiş bir yineleme içerip içermediğini denetlemek için saniyede bir Özel Görüntü İşleme API'sini çağırır. Bir tane bulduğunda, ilgili ONNX modelini yerel bir dosyaya indirir ve Puanlama durumuna geçer.
  • Puanlama: Bu durumda uygulama, yerel ONNX modeline karşı kameradan tek bir kareyi değerlendirmek için Windows ML kullanır. Sonuçta elde edilen görüntü sınıflandırması ekranda görüntülenir ve IoT Hub ileti olarak gönderilir. Uygulama daha sonra yeni bir görüntü puanlamadan önce bir saniye uyku moduna girer.

Kod yapısını inceleme

Aşağıdaki dosyalar uygulamanın ana işlevselliğini işler.

Dosya Description
MainPage.xaml Bu dosya XAML kullanıcı arabirimini tanımlar. Web kamerası denetimini barındırıyor ve durum güncelleştirmeleri için kullanılan etiketleri içeriyor.
MainPage.xaml.cs Bu kod, XAML kullanıcı arabiriminin davranışını denetler. Durum makine işleme kodunu içerir.
CustomVision\CustomVisionServiceWrapper.cs Bu sınıf, Özel Görüntü İşleme Hizmeti ile tümleştirmeyi işleyen bir sarmalayıcıdır.
CustomVision\CustomVisionONNXModel.cs Bu sınıf, ONNX modelini yüklemek ve görüntüleri ona göre puanlama amacıyla Windows ML ile tümleştirmeyi işleyen bir sarmalayıcıdır.
IoTHub\IotHubWrapper.cs Bu sınıf, puanlama sonuçlarını Azure'a yüklemek için IoT Hub tümleştirmesini işleyen bir sarmalayıcıdır.

Görsel Uyarılar uygulamasını ayarlama

IoT Görsel Uyarıları uygulamasını bilgisayarınızda veya IoT cihazınızda çalıştırmak için bu adımları izleyin.

  1. ioTVisualAlerts örneğini GitHub kopyalayın veya indirin.
  2. IoTVisualAlerts.sln çözümünü Visual Studio'de açın
  3. Özel Görüntü İşleme projenizi tümleştirin:
    1. CustomVision\CustomVisionServiceWrapper.cs betiğinde ApiKey değişkeni eğitim anahtarınızla güncelleştirin.
    2. Ardından değişkeni anahtarınızla ilişkilendirilmiş uç nokta URL'si ile güncelleştirin Endpoint .
    3. DeğişkeninitargetCVSProjectGuid, kullanmak istediğiniz Özel Görüntü İşleme projesinin karşılık gelen kimliğiyle güncelleştirin.
  4. IoT Hub kaynağını ayarlayın:
    1. IoTHub\IotHubWrapper.cs betiğinde s_connectionString değişkeni cihazınız için uygun bağlantı dizesiyle güncelleştirin.
    2. Azure portal, IoT Hub örneğinizi yükleyin, Explorers altında IoT cihazlarına tıklayın, hedef cihazınızda seçin (veya gerekirse bir tane oluşturun) ve Birincil Bağlantı Dizesi altında bağlantı dizesini bulun. Dize IoT Hub adınızı, cihaz kimliğinizi ve paylaşılan erişim anahtarınızı içerir; şu biçime sahiptir: {your iot hub name}.azure-devices.net;DeviceId={your device id};SharedAccessKey={your access key}.

Uygulamayı çalıştırma

Uygulamayı bilgisayarınızda çalıştırıyorsanız Visual Studio hedef cihaz için Yerel Makine'yi ve hedef platform için x64 veya x86'yı seçin. Ardından programı çalıştırmak için F5 tuşuna basın. Uygulama başlatılıp kameradan canlı akışı ve bir durum iletisini görüntülemelidir.

ARM işlemcisi olan bir IoT cihazına dağıtıyorsanız hedef platform olarak ARM'yi ve hedef cihaz olarak Uzak Makine'yi seçmeniz gerekir. İstendiğinde cihazınızın IP adresini belirtin (bilgisayarınızla aynı ağda olmalıdır). Ip Adresini, cihazı önyükleyip ağa bağladıktan sonra Windows IoT varsayılan uygulamasından alabilirsiniz. Programı çalıştırmak için F5 tuşuna basın.

Uygulamayı ilk kez çalıştırdığınızda görsel durumları hakkında hiçbir bilgi sahibi olmaz. Model olmadığını belirten bir durum iletisi görüntüler.

Eğitim görüntülerini yakalama

Model ayarlamak için uygulamayı Eğitim Görüntülerini Yakalama durumuna yerleştirmeniz gerekir. Aşağıdaki adımlardan birini uygulayın:

  • Uygulamayı bilgisayarda çalıştırıyorsanız kullanıcı arabiriminin sağ üst köşesindeki düğmeyi kullanın.
  • Uygulamayı bir IoT cihazında çalıştırıyorsanız IoT Hub aracılığıyla cihazda yöntemini çağırınEnterLearningMode. Bunu, Azure portal IoT Hub menüsündeki cihaz girişi aracılığıyla veya IoT Hub Cihaz Gezgini gibi bir araçla çağırabilirsiniz.

Uygulama Eğitim Görüntülerini Yakalama durumuna girdiğinde, hedef görüntü sayısına ulaşana kadar saniyede yaklaşık iki görüntü yakalar. Varsayılan olarak, hedef 30 görüntüdür, ancak istenen sayıyı IoT Hub yöntemine bağımsız değişken olarak geçirerek bu parametreyi EnterLearningMode ayarlayabilirsiniz.

Uygulama görüntüleri yakalarken, kamerayı algılamak istediğiniz görsel durum türlerine (örneğin, boş bir oda, insanlarla dolu bir oda, boş bir masa, oyuncak kamyonlu bir masa vb.) maruz bırakmanız gerekir.

Özel Görüntü İşleme modelini eğitin

Uygulama görüntüleri yakalamayı tamamladıktan sonra bunları karşıya yükler ve Eğitilen Model Bekleniyor durumuna geçer. Bu noktada, Özel Görüntü İşleme web sitesine gitmeniz ve yeni eğitim görüntülerini temel alan bir model oluşturmanız gerekir. Aşağıdaki animasyonda bu işlemin bir örneği gösterilmektedir.

Animation: tagging multiple images of bananas

Bu işlemi kendi senaryonuzla yinelemek için:

  1. Özel Görüntü İşleme web sitesinde oturum açın.
  2. Artık uygulamanın karşıya yüklediği tüm eğitim görüntülerini içeren hedef projenizi bulun.
  3. Tanımlamak istediğiniz her görsel durumu için uygun görüntüleri seçin ve etiketi el ile uygulayın.
    • Örneğin, amacınız boş bir oda ile içindeki kişilerle bir oda arasında ayrım yapmaksa, beş veya daha fazla görüntüyü yeni sınıf olarak kişilerle etiketlemenizi( Kişiler) ve Beş veya daha fazla görüntüyü Negatif etiketi olmadan etiketlemenizi öneririz. Bu, modelin iki durum arasında ayrım gerçekleştirmesine yardımcı olur.
    • Başka bir örnek olarak, hedefiniz rafın ne kadar dolu olduğunu tahmin etmekse EmptyShelf, PartiallyFullShelf ve FullShelf gibi etiketleri kullanabilirsiniz.
  4. İşiniz bittiğinde Eğit düğmesini seçin.
  5. Eğitim tamamlandıktan sonra uygulama, eğitilmiş bir yinelemenin kullanılabilir olduğunu algılar. Eğitilen modeli ONNX'e dışarı aktarma ve cihaza indirme işlemini başlatır.

Eğitilen modeli kullanma

Uygulama eğitilen modeli indirdikten sonra Puanlama durumuna geçer ve sürekli döngüde kameradan görüntüleri puanlamaya başlar.

Yakalanan her resim için uygulama, ekranda en üstteki etiketi görüntüler. Görsel durumunu tanımıyorsa Eşleşme Yok seçeneğini görüntüler. Uygulama ayrıca bu iletileri IoT Hub gönderir ve algılanan bir sınıf varsa, ileti etiketi, güvenilirlik puanı ve özelliklere göre hızlı ileti yönlendirmesi yapmak isteyen IoT Hub istemciler tarafından kullanılabilecek adlı detectedClassAlertbir özelliği içerir.

Ayrıca örnek, Sense HAT birimine sahip Raspberry Pi'de ne zaman çalıştığını algılamak için Sense HAT kitaplığını kullanır, böylece sınıfı algıladığında tüm ekran ışıklarını kırmızıya, hiçbir şey algılamadığında boş olarak ayarlayarak bunu çıkış ekranı olarak kullanabilir.

Uygulamayı yeniden kullanma

Uygulamayı özgün durumuna geri döndürmek isterseniz, bunu yapmak için kullanıcı arabiriminin sağ üst köşesindeki düğmeye tıklayabilir veya IoT Hub aracılığıyla yöntemini DeleteCurrentModel çağırabilirsiniz.

Herhangi bir noktada, sağ üst kullanıcı arabirimi düğmesine tıklayarak veya yöntemi yeniden çağırarak eğitim görüntülerini karşıya yükleme adımını EnterLearningMode yineleyebilirsiniz.

Uygulamayı bir cihazda çalıştırıyorsanız ve IP adresini yeniden almanız gerekiyorsa (örneğin, Windows IoT Uzak İstemcisi aracılığıyla uzak bağlantı kurmak için) yöntemini IoT Hub aracılığıyla çağırabilirsinizGetIpAddress.

Kaynakları temizleme

Artık bakımını yapmak istemiyorsanız Özel Görüntü İşleme projenizi silin. Özel Görüntü İşleme web sitesindeProjeler'e gidin ve yeni projenizin altındaki çöp kutusunu seçin.

Screenshot of a panel labeled My New Project with a trash can icon

Sonraki adımlar

Bu öğreticide, ioT cihazındaki görsel durum bilgilerini algılayan ve sonuçları IoT Hub gönderen bir uygulama ayarlayıp çalıştıracaksınız. Ardından kaynak kodu daha fazla inceleyin veya aşağıdaki önerilen değişikliklerden birini yapın.

  • Uygulamayı doğrudan Eğitilen Model Bekleniyor durumuna geçmek için bir IoT Hub yöntemi ekleyin. Bu şekilde, modeli cihazın kendisi tarafından yakalanmamış görüntülerle eğitebilir ve ardından yeni modeli komutuyla cihaza gönderebilirsiniz.
  • Örnek tarafından gönderilen IoT Hub uyarılarını görselleştirmek üzere bir Power BI Panosu oluşturmak için Gerçek zamanlı algılayıcı verilerini görselleştirme öğreticisini izleyin.
  • Görsel durumlar algılandığında IoT Hub uyarılarına yanıt veren bir Mantıksal Uygulama oluşturmak için IoT uzaktan izleme öğreticisini izleyin.