1. Genel Bakış
Bu laboratuvarda, etkinlik işlemeyi tetiklemek için Cloud Storage paket etkinliklerini ve Eventarc'ı nasıl kullanacağınızı öğreneceksiniz. Verileri analiz etmek ve görüntüleri işlemek için Cloud Functions'ı (2. nesil) kullanacaksınız. İşlev, Google'ın Vision API'sini kullanır ve ortaya çıkan görüntüyü tekrar Cloud Storage paketine kaydeder.
Öğrenecekleriniz
Görüntü işleme ardışık düzeni derleme
- Storage paketlerini yapılandırma
- Cloud Storage'da nesneleri okumak ve yazmak için Cloud Functions işlevi oluşturma
- Yemek resimlerini algılamak için Vision API'yi entegre edin
- Cloud Functions işlevi dağıtma
- Eventarc tetikleyicisi dağıtma
- Uçtan uca çözümü test edin ve doğrulayın
Ön koşullar
- Bu laboratuvarda Cloud Console ve kabuk ortamları hakkında bilgi sahibi olmanız gerekir.
- Önceki Cloud Storage, Cloud Functions veya Vision API deneyimi faydalı olmakla birlikte zorunlu değildir.
2. Kurulum ve Gereksinimler
Cloud projesi kurulumu
- Google Cloud Console'da oturum açıp yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Gmail veya Google Workspace hesabınız yoksa hesap oluşturmanız gerekir.
- Proje adı, bu projenin katılımcıları için görünen addır. Google API'leri tarafından kullanılmayan bir karakter dizesidir. İstediğiniz zaman güncelleyebilirsiniz.
- Proje Kimliği, tüm Google Cloud projelerinde benzersizdir ve değiştirilemez (belirlendikten sonra değiştirilemez). Cloud Console, otomatik olarak benzersiz bir dize oluşturur. bunun ne olduğunu umursamıyorsunuz. Çoğu codelab'de proje kimliğini (genellikle
PROJECT_ID
olarak tanımlanır) referans almanız gerekir. Oluşturulan kimliği beğenmezseniz rastgele bir kimlik daha oluşturabilirsiniz. Alternatif olarak, kendi ölçümünüzü deneyip mevcut olup olmadığına bakabilirsiniz. Bu adımdan sonra değiştirilemez ve proje süresince kalır. - Bilginiz için bazı API'lerin kullandığı üçüncü bir değer, yani Proje Numarası daha vardır. Bu değerlerin üçü hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
- Sonraki adımda, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i çalıştırmanın maliyeti, yüksek değildir. Bu eğitim dışında faturalandırma yapılmaması için kaynakları kapatmak isterseniz oluşturduğunuz kaynakları silebilir veya projenin tamamını silebilirsiniz. Yeni Google Cloud kullanıcıları, 300 ABD doları değerindeki ücretsiz denemeden yararlanabilir.
Cloud Shell'i etkinleştirme
Arama çubuğunun sağındaki simgeyi tıklayarak Cloud Shell'i etkinleştirin.
Ortam Kurulumu
- Cloud Shell terminalinde aşağıdaki komutları çalıştırarak proje ve kaynakla ilgili ortam değişkenleri oluşturun.
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NAME=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export REGION=us-east1
export UPLOAD_BUCKET=gs://menu-item-uploads-$PROJECT_ID
export BUCKET_THUMBNAILS=gs://menu-item-thumbnails-$PROJECT_ID
export MENU_SERVICE_NAME=menu-service
export USER_EMAIL=$(gcloud config list account --format "value(core.account)")
- Laboratuvar için gerekli API'leri etkinleştirin
gcloud services enable \
vision.googleapis.com \
cloudfunctions.googleapis.com \
pubsub.googleapis.com \
cloudbuild.googleapis.com \
logging.googleapis.com \
eventarc.googleapis.com \
artifactregistry.googleapis.com \
run.googleapis.com \
--quiet
- Laboratuvar için gerekli API'leri etkinleştirin. (Qwiklabs'e özel adım)
gcloud services disable cloudfunctions.googleapis.com
gcloud services enable cloudfunctions.googleapis.com
- Depoyu klonlama
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/cloud-functions
3. Cloud Storage paketlerini yapılandırma
Depolama Paketleri Oluşturma
Görüntü işleme ardışık düzeniniz için yükleme ve küçük resim içeren Cloud Storage paketleri oluşturma
İki paket oluşturmak için gsutil mb komutunu ve benzersiz bir ad kullanın:
- Resimlerin önce yükleneceği yükleme paketi
- Oluşturulan küçük resimleri depolamak için küçük resim grubu
Yeni görüntüler yüklemek için paket oluşturun:
gsutil mb -p $PROJECT_ID -l $REGION $UPLOAD_BUCKET
Örnek çıkış:
Creating gs://menu-item-uploads-cymbal-eats-8399-3119/...
Oluşturulan küçük resimleri depolamak için bir paket oluşturun:
gsutil mb -p $PROJECT_ID -l $REGION $BUCKET_THUMBNAILS
Örnek çıkış:
Creating gs://menu-item-thumbnails-cymbal-eats-8399-3119/...
Paket izinlerini güncelleme
Depolama paketi izinlerini kullanıcılara okuma izinleri verecek şekilde güncelleyin.
Paketinizdeki nesneleri okuma ve yazma izni vermek için gsutil iam ch komutunu kullanın:
gsutil iam ch allUsers:objectViewer $UPLOAD_BUCKET
gsutil iam ch allUsers:objectViewer $BUCKET_THUMBNAILS
Örnek çıkış
Updated IAM policy for project [cymbal-eats-8399-3119]. [...]
4. Hizmet hesaplarını yapılandır
Küçük resimleri işlemek için Cloud Functions işlevinin özel bir hizmet hesabı oluşturun:
export CF_SERVICE_ACCOUNT=thumbnail-service-sa
gcloud iam service-accounts create ${CF_SERVICE_ACCOUNT}
Artifact Registry'den okuma işlemlerine izin vermek için artifactregistry.reader
rolünü verin:
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member "serviceAccount:${CF_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role "roles/artifactregistry.reader"
Oluşturulan resimlerin küçük resim paketinde depolanmasına izin vermek için storage.objectCreator
rolünü verin:
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member "serviceAccount:${CF_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role "roles/storage.objectCreator"
Cloud Run hizmet çağrısına izin vermek için run.invoker
rolünü verin:
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member "serviceAccount:${CF_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role "roles/run.invoker"
Sağlayıcılardan etkinlik almaya izin vermek için eventarc.eventReceiver
rolünü verin:
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member "serviceAccount:${CF_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role "roles/eventarc.eventReceiver"
Cloud Storage hizmet hesabına pubsub.publisher
rolünü verin. Böylece, görüntüler pakete yüklendiğinde hizmet hesabı etkinlikleri yayınlayabilir.
GCS_SERVICE_ACCOUNT=$(gsutil kms serviceaccount -p $PROJECT_NUMBER)
gcloud projects add-iam-policy-binding $PROJECT_NUMBER \
--member "serviceAccount:$GCS_SERVICE_ACCOUNT" \
--role "roles/pubsub.publisher"
5. Resim İşleme İşlevine Genel Bakış
Cloud Storage'dan görüntü indirmek için bir işlev oluşturun, resmin boyutunu değiştirin ve resmi Cloud Storage'a geri yükleyin. İşlev, görüntüye bir açıklama etiketi atamak için Vision API'yi çağırır. İşlev, açıklama etiketini kontrol eder. Etiket, resmi "Yiyecek" olarak tanımlarsa menü seçeneğinin resmini ve küçük resmini güncellemek için menü hizmetine bir etkinlik gönderilir.
Bir İşlevi Tetikleme
Cloud Storage işlevleri, Cloud Storage'dan gelen Pub/Sub bildirimlerine dayanır ve benzer etkinlik türlerini destekler:
Bu laboratuvarda, Cloud Storage'da bir nesne son haline geldiğinde bir işlevi dağıtacak ve tetikleyeceksiniz.
Nesne Sonlandırma
"Yazma" işlemi yapıldığında nesne sonlandırma etkinlikleri tetiklenir Cloud Storage Nesnesi'nin son hali başarıyla tamamlanır. Özellikle bu, yeni bir nesne oluşturma veya mevcut bir nesnenin üzerine yazmanın bu etkinliği tetikleyeceği anlamına gelir. Bu tetikleyici, arşiv ve meta veri güncelleme işlemlerini yok sayar.
6. Cloud Storage'ı entegre etme
Cloud Storage, nesnelerinizi Google Cloud'da depolamaya yönelik bir hizmettir. Nesne, herhangi bir biçimdeki bir dosyadan oluşan sabit bir veri parçasıdır. Nesneleri, paket adı verilen container'larda depolarsınız. Tüm paketler bir projeyle ilişkilendirilir ve projelerinizi bir kuruluş altında gruplandırabilirsiniz. İstemci kitaplıkları ve API'ler , Cloud Storage ile entegrasyon sağlar.
Bu laboratuvarda, nesneleri okumak ve Cloud Storage'a yazmak için istemci kitaplığını kullanacaksınız.
İstemci kitaplığını yükleme
Cloud istemci kitaplıkları, birçok popüler programlama dilinde mevcuttur. Kitaplıkları kullanmaya başlamak için istemci kitaplığını yüklemeniz gerekir.
İstemci kitaplığını kullanma
Uygulama ayrıntıları büyük ölçüde programlama diline bağlıdır. İstemci kitaplığını uygulamanızda kullanmak için ilk adım, Cloud Storage bağımlılıklarını içe aktarmaktır. Örneğin, Node.js projesinde, içe aktarma işlemleri package.json dosyasına eklenir. Aşağıdaki snippet'te bu laboratuvarın package.json dosyası bildirimi gösterilmektedir.
package.json
{ "name": "thumbnail-service", "version": "0.1.0", "dependencies": { "@google-cloud/functions-framework": "^3.0.0", "@google-cloud/storage": "^5.18.2", "@google-cloud/vision": "^2.4.2", ... } }
CloudEvent geri çağırması kaydedin
Pakete yeni bir resim yüklendiğinde Cloud Storage tarafından tetiklenecek Functions Framework ile bir CloudEvent geri çağırması kaydedin.
index.js
functions.cloudEvent('process-thumbnails', async (cloudEvent) => { console.log(`Event ID: ${cloudEvent.id}`); console.log(`Event Type: ${cloudEvent.type}`); ...
Depolama alanı referans nesnesi oluşturma
İstemci kitaplıkları içe aktarıldıktan sonra, uygulamanızın etkileşimde bulunacağı yeni bir depolama alanı istemcisi ve paketler oluşturmanız gerekir.
index.js
const storage = new Storage(); const bucket = storage.bucket(file.bucket); const thumbBucket = storage.bucket(process.env.BUCKET_THUMBNAILS);
Cloud Storage nesnelerini indirme
index.js
await bucket.file(file.name).download({ destination: originalFile });
Cloud Storage'a nesne yükleme
Cloud Storage'a yükleme isteklerini tekli istek, devam ettirilebilir veya çok parçalı XML API'si üzerinden üç şekilde gönderebilirsiniz. Daha büyük yüklemeler veya canlı yayın yüklemeleri için devam ettirilebilir yüklemeleri kullanın. XML API ile dosyalar parçalar halinde yüklenir ve tek bir nesne olarak birleştirilir. Daha küçük nesneler için tekli istek yüklemelerini kullanın.
Aşağıdaki kod, tek istekli yükleme işlemini kullanarak bir görüntüyü bulut depolama alanına yükler.
index.js
const thumbnailImage = await thumbBucket.upload(thumbFile);
7. Vision API'yi entegre edin
Cloud Vision, geliştiricilerin görüntü etiketleme, yüz ve önemli nokta algılama, optik karakter tanıma (OCR) ve uygunsuz içeriği etiketleme gibi görme algılama özelliklerini uygulamalara kolayca entegre etmesine olanak tanır.
İstemci kitaplığını yükleme
Cloud istemci kitaplıkları, birçok popüler programlama dilinde mevcuttur. Kitaplıkları kullanmaya başlamak için istemci kitaplığını yüklemeniz gerekir.
Resim Annotator İstemcisi Oluşturma
Resmi istemci SDK'larını kullanarak Google API'lerine erişmek için, SDK'nın API'sini açıklayan API'nin keşif dokümanını temel alan bir hizmet nesnesi oluşturursunuz. Kimlik bilgilerinizi kullanarak bu kimliği Vision API'nin keşif hizmetinden getirmeniz gerekir.
index.js
const client = new vision.ImageAnnotatorClient();
Vision API isteği oluşturma
Vision API, görüntü dosyasının içeriğini isteğinizin gövdesine base64 kodlamalı bir dize olarak göndererek görüntü dosyasında özellik algılaması gerçekleştirebilir.
Resim kaynağını kullanarak resminize açıklama eklemek üzere bir istek oluşturmak için. Bu API'ye yapılan istek, istek listesi olan bir nesne biçimini alır. Bu listedeki her öğe iki bit bilgi içerir:
- base64 kodlu görüntü verileri
- Söz konusu resim hakkında ek açıklama eklemek istediğiniz özelliklerin listesi.
index.js
const client = new vision.ImageAnnotatorClient(); const visionRequest = { image: { source: { imageUri: `gs://${file.bucket}/${file.name}` } }, features: [ { type: 'LABEL_DETECTION' }, ] }; const visionPromise = client.annotateImage(visionRequest);
8. Cloud Functions İşlevi Dağıtma
Bu resim yeniden boyutlandırma hizmeti, daha büyük Cymbal Eats sisteminin bir parçasıdır. Bu bölümde yalnızca görüntü işleme özelliğiyle ilgili bileşenleri dağıtacaksınız. Tam yükleme işlemi, resmi yüklemek için bir kullanıcı arayüzü ve sonuç olarak ortaya çıkan meta verileri depolamak için bir aşağı akış isteği içerir. Bu özellikler bu laboratuvar kapsamında yüklenmez.
İşlev dağıtımı sırasında aşağıdaki bileşenler oluşturulur:
- Cloud Functions işlevi
- Cloud Run hizmeti
- Eventarc tetikleyicisi
- Pub/Sub Konusu ve Aboneliği
Cloud Shell terminalinde, menu-item-uploads-$PROJECT_ID
üzerinde bir tetikleyici paketiyle Cloud Functions işlevini dağıtmak için aşağıdaki komutu çalıştırın:
gcloud functions deploy process-thumbnails \
--gen2 \
--runtime=nodejs16 \
--source=thumbnail \
--region=$REGION \
--project=$PROJECT_ID \
--entry-point=process-thumbnails \
--trigger-bucket=$UPLOAD_BUCKET \
--service-account="${CF_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
--set-env-vars=BUCKET_THUMBNAILS=$BUCKET_THUMBNAILS,MENU_SERVICE_URL=$MENU_SERVICE_URL \
--max-instances=1 \
--quiet
Dağıtım, yükleme depolama paketindeki bir izin sorunu nedeniyle başarısız olursa lütfen önceki adımdaki IAM değişikliklerinin yayılmasını bekleyin. Genellikle 1-2 dakika sürer ve ardından dağıtımı tekrar gerçekleştirmeyi deneyin.
Örnek çıkış
Deploying function (may take a while - up to 2 minutes)...done. [...]
Cloud konsolunda oluşturulan Cloud Functions işlevini inceleyin:
Cloud konsolunda işlev için oluşturulan Cloud Run hizmetini inceleyin:
Cloud Console'da, işlev için oluşturulan Eventarc tetikleyicisini inceleyin:
Cloud Console'da Eventarc tetikleyicisi için oluşturulan Pub/Sub Konusunu ve Abonelik'i inceleyin:
9. Uçtan uca çözümü test edin ve doğrulayın
Cloud Storage'a yeni bir fotoğraf yükleyin ve görüntüler analiz edilirken ardışık düzenin ilerlemesini izleyin. Cloud Functions günlüklerini izleyerek uçtan uca çözümü test edeceksiniz.
Uygun bir resim yükleme
- Bu görüntüyü yerel makinenize kaydedin
- Dosyayı 1.jpg olarak yeniden adlandırın.
- Cloud Storage konsolunu açın
- menu-item-uploads-... grubunu tıklayın
- DOSYALARI YÜKLE'yi tıklayın.
- Depolama paketine 1.jpg dosyasını yükleme
- Cloud Console'da Cloud Functions'a gidin.
- İşleme-küçük resimleri'ni tıklayın
- GÜNLÜKLER sekmesini tıklayın.
- menu-item-thumbnails-$PROJECT_ID Cloud Storage paketine gidin
- Küçük resim paketinde küçük resim oluşturulduğunu doğrulayın
Gıda olmayan resim yükleme
İşlevin düzgün çalıştığını doğrulamak için, "Yiyecek" olarak sınıflandırılacak bir nesne içermeyen bir resim yükleyin. öğe.
- Bu görüntüyü yerel makinenize kaydedin
- Dosyayı 2.jpg olarak yeniden adlandırın.
- Cloud Storage konsolunu açın
- menu-item-uploads-... grubunu tıklayın
- DOSYALARI YÜKLE'yi tıklayın.
- Depolama paketine 2.jpg dosyasını yükleme
- Cloud Console'da Cloud Functions'a gidin.
- İşleme-küçük resimleri'ni tıklayın
- GÜNLÜKLER sekmesini tıklayın.
10. Tebrikler!
Tebrikler, laboratuvarı tamamladınız.
Sıradaki adım:
Diğer Cymbal Eats codelab'lerini keşfedin:
- Eventarc ile Cloud Workflows'u tetikleme
- Cloud Run'dan Private CloudSQL'e bağlanma
- Cloud Run'dan Tümüyle Yönetilen Veritabanlarına Bağlanma
- Identity Aware Proxy (IAP) ile Güvenli Sunucusuz Uygulama
- Cloud Scheduler ile Cloud Run İşlerini Tetikleme
- Cloud Run'a Güvenli Şekilde Dağıtma
- Cloud Run Giriş Trafiğinin Güvenliğini Sağlama
- GKE Autopilot'tan özel AlloyDB'ye bağlanma
Temizleme
Bu eğiticide kullanılan kaynaklar için Google Cloud hesabınızın ücretlendirilmesini istemiyorsanız kaynakları içeren projeyi silin veya projeyi tutup tek tek kaynakları silin.
Projeyi silme
Faturalandırmayı ortadan kaldırmanın en kolay yolu, eğitim için oluşturduğunuz projeyi silmektir.