AWS Türkçe Blog

AWS Panorama ile Uçta Görüntü İşleme

Orijinal makale: Link (Sébastien Stormacq)

Bugün, AWS Panorama Cihazı genel olarak hepinizin kullanımına sunulmuştur. AWS Panorama Cihazı, şirket içi kameralarınız tarafından sağlanan görüntüleri analiz etmek üzere ağınıza dağıtılacak şekilde tasarlanmış bir Görüntü İşleme (Computer Vision – CV) cihazıdır.

Her hafta, Görüntü İşleme için yeni ve yaratıcı kullanım durumlarını okuyorum. Bazı müşteriler depolarda işçi güvenliğini sağlamak için forkliftlerin belirlenen alanlara park edildiğini doğrulamak için CV’yi kullanıyor, bazıları ise alanı ve ürün yerleşimini optimize etmek için perakende mağazalarında müşteri yürüyüş akışlarını analiz ediyor ve bazıları da kedileri ve fareleri tanımak için kullanıyor.

AWS müşterileri depolama ve bilgi işlem kaynaklarına neredeyse sonsuz erişim sayesinde bulutun görüntü işleme modellerini eğitmek için en uygun yer olduğunu kabul ediyor. Bulutta, veri bilimcileri Amazon SageMaker gibi güçlü araçlara ve çok çeşitli işlem kaynaklarına ve çerçevelere erişebilir.

Ancak bir veya birden fazla video akışından gelen görüntüleri analiz etme zamanı geldiğinde, çoğunuz bize bulutun bu tür iş yüklerini çalıştırmak istediğiniz yer olmadığını söylüyorsunuz. Bunun bir takım nedenleri vardır: Bazen görüntülerin yakalandığı tesisler buluta video akışları göndermek için yeterli bant genişliğine sahip değildir, bazı kullanım durumları çok düşük gecikme süresi gerektirir veya bazıları yalnızca görüntülerini yerinde tutmak ve ağlarının dışına analiz için göndermemek ister.

re:Invent 2020’de bu gereksinimleri karşılamak için AWS Panorama Cihazını ve SDK’yı duyurduk.

AWS Panorama yüksek doğruluk ve düşük gecikme süresiyle yerel olarak tahminler yapmak için şirket içi kameralara görüntü işlemeyi getirmenize olanak tanıyan bir makine öğrenimi cihazı ve yazılım geliştirme kitidir (Software Development Kit – SDK). AWS Panorama Cihazı ile potansiyel sorunların görünürlüğünü artırmak için normalde insan denetimi gerektiren görevleri otomatikleştirebilirsiniz. Örneğin, üretim kalitesini değerlendirmek, endüstriyel işlemlerdeki darboğazları belirlemek ve sınırlı internet bağlantısı olmayan ortamlarda bile iş yeri güvenliğini izlemek için AWS Panorama Cihazını kullanabilirsiniz. Yazılım geliştirme kiti, kamera üreticilerinin IP kameralarının içine doğrudan eşdeğer yetenekler getirmelerini sağlar.

Bu yazıda her zaman olduğu gibi AWS Panorama Cihazı için bir görüntü işleme uygulamasının geliştirilmesi ve dağıtımı konusunda sizi yönlendirmek istiyorum. Bu yazıdaki demo uygulaması bir ağ kamerasından video çerçevelerindeki nesneleri tanımak için bir makine öğrenimi modeli kullanıyor. Uygulama AWS Panorama Cihazı üzerine bir model yükler, bir kameradan görüntüler alır ve bu görüntüleri model üzerinden çalıştırır. Uygulama daha sonra sonuçları orijinal videonun üstüne yerleştirir ve bağlı bir ekrana çıkarır. Uygulama, giriş ve çıkış video akışları ve model ile etkileşim kurmak için AWS Panorama tarafından sağlanan kütüphaneleri kullanır, alt düzeyde programlama gerekmez.

Önce birkaç kavram tanımlayalım. AWS Panorama dokümantasyon sayfasından aşağıdaki tanımları ödünç aldım.

Kavramlar
AWS Panorama Cihazı uygulamalarınızı çalıştıran donanımdır. Bir cihazı kaydetmek, yazılımını güncellemek ve uygulama dağıtmak için AWS Panorama konsolunu veya AWS SDK‘larını kullanırsınız. Cihaz üzerinde çalışan yazılım, kamera akışlarını keşfeder ve bunlara bağlanır, uygulamanıza video çerçeveleri gönderir ve isteğe bağlı olarak bağlı bir ekranda video çıkışını görüntüler.

Cihaz bir uç (edge) cihazıdır. Görüntü işleme için AWS Bulut’a göndermek yerine uygulamaları, optimize edilmiş donanımda yerel olarak çalıştırır. Bu, videoyu gerçek zamanlı olarak analiz etmenize ve sonuçları sınırlı bağlantıyla işlemenize olanak tanır. Cihaz yalnızca durumunu bildirmek, günlükleri yüklemek ve yazılım güncelleştirmeleri ve dağıtımları almak için internet bağlantısı gerektirir.

Bir uygulama kameralar, modeller, kod veya genel değişkenleri temsil eden düğümler (nodes) adı verilen birden çok bileşenden oluşur. Düğüm yalnızca yapılandırma (girişler ve çıkışlar) veya yapıtlar (modeller ve kod) içerebilir. Uygulama düğümleri AWS Panorama Cihazının bunlara erişebileceği bir Amazon S3 erişim noktasına yüklediğiniz düğüm paketlerinde toplanır. Uygulama manifesti, düğümler arasındaki bağlantıları tanımlayan bir yapılandırma dosyasıdır.

Görüntü işleme modeli, görüntüleri işlemek için eğitilmiş bir makine öğrenme ağıdır. Görüntü işleme modelleri sınıflandırma, algılama, segmentasyon ve izleme gibi çeşitli görevleri yerine getirebilir. Bir görüntü işleme modeli bir görüntüyü girdi olarak alır ve görüntü veya görüntüdeki nesneler hakkında bilgi verir.

AWS Panorama Apache MXNet, DarkNet, GluonCV, Keras, ONNX, PyTorch, TensorFlow ve TensorFlow Lite ile oluşturulmuş modelleri destekler. Amazon SageMaker ile modeller oluşturabilir ve bunları Amazon Simple Storage Service (Amazon S3) klasöründen içe aktarabilirsiniz.

Şimdi kavramları anladığımıza göre, uygulamaya geçelim.

AWS Panorama Cihazınızı Açma
Servis ekibinin gönderdiği kutuda, cihazın kendisini (sürpriz değil!), bir güç kablosu ve iki ethernet kablosu buldum. Kutuda ayrıca cihazı başlangıçta yapılandırmak için bir USB anahtarı da bulunur. Cihaz endüstriyel ortamlarda çalışmak üzere tasarlanmıştır. Arkadaki güç konektörünün yanında iki ethernet portu vardır. Ön tarafta, sürgülü bir kapının arkasında korunan bir SD kart okuyucu, bir HDMI konektörü ve iki USB bağlantı noktası buldum. Cihazı fabrika durumuna yeniden başlatmak için bir güç düğmesi ve sıfırlama düğmesi de vardır.

AWS Panorama Appliance Front Side AWS Panorama Appliance Back Side AWS Panorama USB key

Cihazınızı Yapılandırma
İlk önce ağım için yapılandırdım (kablo + DHCP, ancak aynı zamanda statik IP yapılandırmasını da destekliyor) ve AWS Hesabıma güvenli bir şekilde bağlanmak için kaydettim. Bunu yapmak için AWS Yönetim Konsolu’na gidip ağ yapılandırma ayrıntılarımı girdim. Bir dizi yapılandırma dosyaları ve sertifika oluşturdu. Sağlanan USB anahtarını kullanarak cihaza kopyaladım. Meslektaşım Martin Beeby bu sürecin ekran görüntülerini paylaştı. Ekip, önizleme sırasında aldıkları geri bildirimlere dayanarak ekranları biraz değiştirdi, ancak adım adım süreci tekrar gözden geçirmeye değeceğini sanmıyorum. Alandan ipucu: Kutuda verilen USB anahtarını kullandığınızdan emin olun, cihaz tarafından doğru şekilde biçimlendirilir ve otomatik olarak tanınır (kendi USB anahtarım düzgün tanınmadı).

Daha sonra Panorama GitHub deposundan örnek bir uygulama indirdim ve bunu GitHub’da da bulunan Panorama için Test Yardımcı Programı ile denedim (test programı simülatör olarak hareket edecek şekilde yapılandırılmış bir EC2 sunucusudur). Panorama için Test Uygulaması, cihaza dağıtmadan önce örnek uygulamaları veya kodunuzu hızlı bir şekilde denemek için Jupyter dizüstü bilgisayarlarını kullanır. Ayrıca uygulamalarınızı programlı olarak cihaza dağıtmanıza olanak tanıyan komutları da listeler.

Panorama Komut Satırı
Panorama komut satırı, bir proje oluşturmak, varlıkları içe aktarmak, paketlemek ve AWS Panorama Cihazına dağıtmak için işlemleri basitleştirir. Panorama komut satırını indirmek ve yüklemek için bu talimatları izleyebilirsiniz.

Örnek uygulama gibi başkası tarafından geliştirilen bir uygulama alırken, tüm uygulama dosyalarında ve dizin adlarındaki AWS hesap kimliklerini değiştirmem gerekir. Bunu tek bir komutla yapıyorum:

panorama-cli import-application

Uygulama Yapısı
Panorama uygulama yapısı aşağıdaki gibi görünür:

├── assets
├── graphs
│   └── example_project
│       └── graph.json
└── packages
    ├── accountXYZ-model-1.0
    │   ├── descriptor.json
    │   └── package.json
    └── accountXYZ-sample-app-1.0
        ├── Dockerfile
        ├── descriptor.json
        ├── package.json
        └── src
            └── app.py

  • graph.json, bu uygulamadaki tüm paketleri ve düğümleri listeler. Düğümler, Panorama’da bir uygulamayı tanımlamanın yoludur.
  • Her package.json paketinde, paket ve kullandığı varlıklarla ilgili ayrıntılar bulunur.
  • model paket modeli, modeli derlemek için gerekli meta verileri içeren bir descriptor.json içerir.
  • Konteyner paketi sample-app, src dizinindeki uygulama kodunu ve konteyneri oluşturmak için bir Dockerfile içerir. descriptor.json, konteyner başlatıldığında hangi komut ve dosyanın kullanılacağı hakkında ayrıntılara sahiptir.
  • assets dizini, paketlenmiş kod ve derlenmiş modeller gibi tüm varlıkların bulunduğu yerdir. Bu dizinde herhangi bir değişiklik yapmamalısınız.

Paket adlarının hesap numaranızla ön ekli olduğunu unutmayın.

Uygulamam hazır olduğunda, konteyneri oluşturuyorum (macOS veya Windows için Docker Desktop kullanmaktan kaçınmak için Docker Engine ve Docker CLI içeren bir Linux makinesi kullanıyorum).

$ panorama-cli build-container                               \
               --container-asset-name {container_asset_name} \ 
               --package-path packages/{account_id}-{package_name}-1.0 
Zsh

Kameralar Hakkında Bir Not
AWS Panorama Cihazı “soyut kameralar (abstract cameras)” kavramına sahiptir. Soyut kamera kaynakları, uygulama dağıtımı sırasında gerçek kamera aygıtlarıyla eşlenebilecek yer tutuculardır. Panorama için Test Uygulaması, kolay ve tekrarlanabilir testler için soyut kameraları video dosyalarıyla eşlemenize olanak tanır.

ML Modeli Ekleme
AWS Panorama Cihazı çoklu ML Model çerçevelerini destekler. Modeller Amazon SageMaker veya seçtiğiniz başka bir çözüm üzerinde eğitilebilir. ML modelimi S3’den indirdim ve projeme aktardım:

panorama-cli add-raw-model                                                 \
    --model-asset-name {asset_name}                                        \
    --model-s3-uri s3://{S3_BUCKET}/{project_name}/{ML_MODEL_FNAME}.tar.gz \
    --descriptor-path {descriptor_path}                                    \
    --packages-path {package_path}
Zsh

ML Modelleri perde arkasında, AWS Panorama Cihazı‘nın Nvidia Accelerated Linux Arm64 mimarisine göre optimize etmek için derlenmiştir.

Uygulamayı Paketleme
Artık bir ML modelim ve uygulama kodum bir konteynerde paketlenmiş olduğundan, uygulama varlıklarımı AWS Panorama Cihazı için paketlemeye hazırım:

panorama-cli package-application

Bu komut tüm uygulama varlıklarımı tüm bildirimlerle birlikte AWS bulut hesabına yükler.

Uygulamayı Dağıtma
Son olarak uygulamayı AWS Panorama Cihazı‘na dağıttım. Dağıtım, uygulamayı ve kamera akışı seçimi gibi yapılandırmasını AWS bulutundan şirket içi AWS Panorama Cihazıma kopyalar. Uygulamamı Python kodunu (ve zaten bildiğiniz Boto3 SDK‘sını) kullanarak programlı olarak dağıtabilirim:


client = boto3.client('panorama')
client.create_application_instance(
    Name="AWS News Blog Sample Application",
    Description="An object detection app",
    ManifestPayload={
       'PayloadData': manifest         # <== this is the graph.json file content 
    },
    RuntimeRoleArn=role,               # <== this is a role that gives my app permissions to use AWS Services such as Cloudwatch
    DefaultRuntimeContextDevice=device # <== this is my device name 
)
Python

Alternatif olarak, AWS Yönetim Konsolu‘nu kullanabilirim:

Deployed applications kısmında, Deploy application seçiyorum.

graphs/<project name>/graph.json içeriğini konsola kopyalayıp yapıştırıyorum ve Next’i seçiyorum.

Uygulamama bir isim ve isteğe bağlı bir açıklama veriyorum. Dağıtmak için Proceed to deploy seçiyorum.

Sonraki adımlar

  • Uygulamama AWS Servisi’ni kullanma izni vermek için bir IAM rolü oluşturuyorum. Minimum izin kümesi CloudWatch‘ta PuMetricData API’sinin çağrılmasına olanak tanır.
  • dağıtmak istediğim AWS Panorama Cihazını seçiyorum
  • descriptors.json uygulamasında tanımlanan soyut kameraları AWS Panorama Cihazı tarafından bilinen fiziksel kameralarla eşliyorum
  • kabul edilebilir eşik değeri, günlük düzeyi vb. gibi uygulamaya özgü girdileri dolduruyorum.

Örnek bir IAM politikası

AWSTemplateFormatVersion: '2010-09-09'
Description: Resources for an AWS Panorama application.
Resources:
  runtimeRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
          -
            Effect: Allow
            Principal:
              Service:
                - panorama.amazonaws.com
            Action:
              - sts:AssumeRole
      Policies:
        - PolicyName: cloudwatch-putmetrics
          PolicyDocument:
            Version: 2012-10-17
            Statement:
              - Effect: Allow
                Action: 'cloudwatch:PutMetricData'
                Resource: '*'
      Path: /service-role/
JSON

Bu altı ekran görüntüsü bu işlemi gösterir:

AWS Panorama - Deploy 2 AWS Panorama - Deploy 1 AWS Panorama - Deploy 3
AWS Panorama - Deploy 4 AWS Panorama - Deploy 5 AWS Panorama - Deploy 5

Dağıtım, kodunuzun boyutuna ve ML modellerinize ve cihazın mevcut bant genişliğine bağlı olarak 15-30 dakika sürer. Sonunda durum “Running” olarak yeşile döner.

Uygulama AWS Panorama Cihazınıza dağıtıldıktan sonra çalışmaya başlar, videoyu sürekli analiz eder ve milisaniye içinde yerel olarak son derece doğru tahminler üretir. Çıkışı izlemek için AWS Panorama Cihazına bir HDMI kablosu bağlıyorum ve görebiliyorum:

Dağıtım sırasında veya uygulamanın ömrü boyunca herhangi bir şey ters giderse, Amazon CloudWatch‘daki günlüklere erişimim var. Oluşturulan iki günlük akışı vardır, biri AWS Panorama Cihazı için, diğeri de uygulama için.

AWS Panorama Appliance log AWS Panorama application log

Fiyatlandırma ve Kullanılabilirlik
AWS Panorama Cihazı, AWS Konsolu’ndaki AWS Elemental sipariş sayfasından satın alınabilir. Amerika Birleşik Devletleri, Kanada, Birleşik Krallık ve Avrupa Birliği’nden sipariş verebilirsiniz. Cihazın kendisi için bir kerelik 4.000 dolar ücret vardır.

$8,33 / ay / kamera beslemesi kullanım ücreti vardır.

AWS Panorama, AWS Panorama Cihazına (ML modelleri ve iş mantığı dahil) dağıtılan tüm varlıkların sürüm halinde kopyalarını bulutta saklar. Bu depolama alanı için GB başına aylık $0,10 ücretlendirilirsiniz.

AWS Panorama Cihazınıza dağıtılan iş mantığı diğer AWS servislerini kullanıyorsa ek ücrete tabi olabilirsiniz. Örneğin, iş mantığınız ML tahminlerini çevrimdışı analiz için Amazon S3’ye yüklerse, karşılaşılan depolama ücretleri için S3 tarafından ayrı olarak faturalandırılırsınız.

AWS Panorama Cihazı her yere monte edilebilir. Cihaz, aşağıdaki AWS Bölgesinden birinde AWS bulutundaki AWS Panorama hizmetine geri bağlanır: ABD Doğu (North Virginia), ABD Batı (Oregon), Kanada (Orta) veya Avrupa (Ireland).

Hadi bugün ilk görüntü işleme modelini yap.