1. Giriş
Günümüz veri temelli uygulamalar çağında gelişmiş makine öğrenimi ve bilgisayar görüşü gibi yapay zeka hizmetlerinden yararlanmak giderek daha önemli hale geldi. Bu hizmetlerden biri, güçlü görüntü analizi özellikleri sunan Vision API'dir. Bu codelab'de, Spring Boot ve Java'yı kullanarak Bilgisayar Görüşü uygulaması oluşturmayı öğreneceksiniz. Bu sayede projelerinizde görüntü tanıma ve analiz olanaklarından yararlanabilirsiniz. Uygulamanın kullanıcı arayüzü, yazılı veya basılı metin içeren görsellerin herkese açık URL'lerini ve metinleri ayıklar, dili algılar ve desteklenen dillerden biriyse söz konusu metnin İngilizce çevirisini oluşturur.
Neler oluşturacaksınız?
Veri feed'inizi
- Vision API ve Google Cloud Translation API'yi kullanan bir Java Spring Boot uygulaması
- Cloud Run'da dağıtıldı
2. Şartlar
Şu ön koşullar şunlardır:
Projenizi oluşturun
- Bir projenin oluşturulduğu ve faturalandırmanın etkinleştirildiği bir Google Cloud hesabı
- Vision API, Translation, Cloud Run ve Artifact Registry API'leri etkin
- Cloud Shell etkinleştirildi
- Cloud Storage API, oluşturulan bir paket ve desteklenen yerel dillerdeki metin veya el yazısı içeren görüntüler yüklenmiş olarak etkinleştirilir (veya bu blogda sağlanan örnek resim bağlantılarını kullanabilirsiniz)
Google Cloud API'lerini etkinleştirme adımları için belgeleri inceleyin.
Cloud Shell'i etkinleştirme
- Google Cloud'da çalışan ve bq ile önceden yüklenmiş olarak gelen bir komut satırı ortamı olan Cloud Shell'i kullanacaksınız:
Cloud Console'da sağ üst köşedeki Cloud Shell'i Etkinleştir'i tıklayın.
- Cloud Shell'e bağlandıktan sonra kimliğinizin doğrulandığını ve projenin proje kimliğinize ayarlandığını görürsünüz. Kimlik doğrulamanızın tamamlandığını onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud auth list
- gcloud komutunun projenizi bildiğini onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın
gcloud config list project
- Projeniz ayarlanmadıysa ayarlamak için aşağıdaki komutu kullanın:
gcloud config set project <PROJECT_ID>
gcloud komutları ve kullanımı için belgelere bakın.
3. Spring Boot Projesini Önyükleme
Başlamak için, tercih ettiğiniz IDE veya Spring Initializr'ı kullanarak yeni bir Spring Boot projesi oluşturun. Spring Web, Spring Cloud GCP ve Vision AI gibi gerekli bağımlılıkları projenizin yapılandırmasına dahil edin. Alternatif olarak, Spring Boot uygulamanızı kolayca önyüklemek için aşağıdaki adımları uygulayarak Cloud Shell'den Spring Initializr'ı da kullanabilirsiniz.
Spring Boot projenizi oluşturmak için aşağıdaki komutu çalıştırın:
curl https://start.spring.io/starter.tgz -d packaging=jar -d dependencies=cloud-gcp,web,lombok -d baseDir=spring-vision -d type=maven-project -d bootVersion=3.0.1.RELEASE | tar -xzvf -
bahar vizyonu, projenizin adıdır. Bu vizyonu ihtiyaçlarınıza göre değiştirin.
bootVersion, Spring Boot'un sürümüdür. Uygulamanız sırasında gerekiyorsa bu sürümü güncellediğinizden emin olun.
type, proje derleme aracı türünün sürümüdür. Tercih ederseniz bunu gradle olarak değiştirebilirsiniz.
Bu, "bahar vizyonu" altında bir proje yapısı oluşturur. aşağıdaki gibidir:
pom.xml, projeye ait tüm bağımlılıkları içerir (bu komutu kullanarak yapılandırdığınız bağımlılıklar pom.xml dosyanıza zaten eklenmiştir).
src/main/java/com/example/demo, .java dosyaları kaynak sınıflarını içerir.
kaynaklar; görüntüler, XML, metin dosyaları ve projenin kullandığı ve bağımsız olarak korunan statik içeriği barındırır.
application.properties, uygulamanın profile özgü özelliklerini tanımlayan yönetici özelliklerini yönetmenizi sağlar.
4. Vision API'yi yapılandırma
Vision API'yi etkinleştirdikten sonra uygulamanızda API kimlik bilgilerini yapılandırma seçeneğine sahip olursunuz. İsteğe bağlı olarak, kimlik doğrulamasını ayarlamak için Uygulama Varsayılan Kimlik Bilgileri'ni kullanabilirsiniz. Ancak bu demo uygulamasında kimlik bilgileri kullanımını uygulamadım.
Vizyon ve çeviri hizmetlerini uygulama
Vision API ile etkileşime geçen bir hizmet sınıfı oluşturun. Gerekli bağımlılıkları ekleyin ve görüntü analizi istekleri göndermek için Vision API istemcisini kullanın. Uygulamanızın gereksinimlerine göre görüntü etiketleme, yüz algılama ve tanıma gibi görevleri gerçekleştirmek için yöntemler uygulayabilirsiniz. Bu demoda el yazısı çıkarma ve çeviri yöntemlerini kullanacağız.
Bunun için, aşağıdaki bağımlılıkları pom.xml dosyasına eklediğinizden emin olun.
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-starter-vision</artifactId>
</dependency>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-translate</artifactId>
</dependency>
Depodan aşağıdaki dosyaları klonlayın / değiştirin ve proje yapısındaki ilgili klasörlere / yola ekleyin:
- Application.java (/src/main/java/com/example/demo)
- TranslateText.java (/src/main/java/com/example/demo)
- VisionController.java (/src/main/java/com/example/demo)
- index.html (/src/main/resources/static)
- result.html (/src/main/resources/templates)
- pom.xml
org.springframework.cloud.gcp.vision.CloudVisionTemplate
hizmetindeki extractTextFromImage
yöntemi, resim girişinizden metin çıkarmanızı sağlar. com.google.cloud.translate.v3
hizmetindeki getTranslatedText
yöntemi, görselinizden çıkarılan metni ileterek istenen hedef dilde çevrilmiş metni yanıt olarak almanızı sağlar (kaynak, desteklenen diller listesinden birindeyse).
REST API'yi oluşturma
Vision API işlevlerini ortaya çıkaracak REST uç noktalarını tasarlayıp uygulayın. Gelen istekleri işleyen ve görüntüleri işleyip analiz sonuçlarını döndürmek için Vision API hizmetini kullanan denetleyiciler oluşturun. Bu demoda VisionController
sınıfımız uç noktayı uygular, gelen isteği işler, Vision API ile Cloud Translation hizmetlerini çağırır ve sonucu görünüm katmanına döndürür. REST uç noktası için GET yöntemi şu şekilde uygulanır:
@GetMapping("/extractText")
public String extractText(String imageUrl) throws IOException {
String textFromImage =
this.cloudVisionTemplate.extractTextFromImage(this.resourceLoader.getResource(imageUrl));
TranslateText translateText = new TranslateText();
String result = translateText.translateText(textFromImage);
return "Text from image translated: " + result;
}
Yukarıdaki uygulamada yer alan TranslateText
sınıfı, Cloud Translation hizmetini çağıran yönteme sahiptir:
String targetLanguage = "en";
TranslateTextRequest request =
TranslateTextRequest.newBuilder()
.setParent(parent.toString())
.setMimeType("text/plain")
.setTargetLanguageCode(targetLanguage)
.addContents(text)
.build();
TranslateTextResponse response = client.translateText(request);
// Display the translation for each input text provided
for (Translation translation : response.getTranslationsList()) {
res = res + " ::: " + translation.getTranslatedText();
System.out.printf("Translated text : %s\n", res);
}
VisionController
sınıfıyla birlikte REST için GET yöntemi uyguladık.
Thymeleaf'i ön uç geliştirme için entegre etme
Spring Boot ile uygulama derlerken ön uç geliştirme için en sık tercih edilen seçenek Thymeleaf'in gücünden yararlanmaktır. Thymeleaf, dinamik içeriği HTML sayfalarınıza sorunsuz bir şekilde entegre etmenize olanak tanıyan sunucu tarafı bir Java şablon motorudur. Thymeleaf, yerleştirilmiş sunucu tarafı ifadelere sahip HTML şablonları oluşturmanıza olanak tanıyarak sorunsuz bir geliştirme deneyimi sunar. Bu ifadeler, Spring Boot arka ucunuzdan verileri dinamik olarak oluşturmak için kullanılabilir. Böylece Vision API hizmeti tarafından gerçekleştirilen görüntü analizinin sonuçlarını görüntüleyebilirsiniz.
Başlamak için Spring Boot projenizde Thymeleaf için gerekli bağımlılıkların bulunduğundan emin olun. Thymeleaf Starter bağımlılığını pom.xml dosyanıza ekleyebilirsiniz:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
Denetleyici yönteminizde, analiz sonucunu Vision API hizmetinden alın ve modele ekleyin. Model, Thymeleaf tarafından HTML şablonunu oluşturmak için kullanılacak verileri gösterir. Model doldurulduğunda, oluşturmak istediğiniz Thymeleaf şablonunun adını döndürün. Thymeleaf, şablonun işlenmesini, sunucu tarafı ifadeleri gerçek verilerle değiştirerek ve istemcinin tarayıcısına gönderilecek nihai HTML'yi oluşturur.
VisionController
öğesindeki extractText
yöntemi söz konusu olduğunda, sonucu modele eklenmemiş olarak String
olarak döndürdük. Ancak sayfa gönderiminde index.html
için GET yöntemini extractText
çağırdık. Thymeleaf ile kullanıcıların görüntü yükleyebileceği, Vision API analizlerini tetikleyebileceği ve sonuçları gerçek zamanlı olarak görebileceği sorunsuz bir kullanıcı deneyimi oluşturabilirsiniz. Ön uç geliştirme için Thymeleaf'in gücünden yararlanarak Vision AI uygulamanızın tam potansiyelini ortaya çıkarın.
<form action="/extractText">
Web URL of image to analyze:
<input type="text"
name="imageUrl"
value=""
<input type="submit" value="Read and Translate" />
</form>
5. Bilgisayar görüşü uygulamanızı Cloud Run'da dağıtma
/src/test/java/com/example
klasörü altında doğru işlevselliği sağlamak amacıyla hizmet ve denetleyici sınıflarınıza yönelik birim testleri yazın. Kararlılıktan emin olduktan sonra bu dosyayı JAR dosyası gibi dağıtılabilir bir yapıda paketleyin ve Google Cloud'da sunucusuz bir bilgi işlem platformu olan Cloud Run'a dağıtın. Bu adımda, container mimarisine alınmış Spring Boot uygulamanızı Cloud Run'ı kullanarak dağıtmaya odaklanacağız.
- Cloud Shell'de aşağıdaki adımları çalıştırarak uygulamanızı paketleyin(terminalin proje kök klasöründe istem gönderdiğinden emin olun)
Oluştur:
./mvnw package
Derleme başarılı olduktan sonra aşağıdaki testler için yerel olarak çalıştırın:
./mvnw spring-boot:run
- Spring Boot Uygulamanızı Jib ile container mimarisine alın:
Manuel olarak bir Dockerfile
oluşturmak ve container görüntüsünü derlemek yerine, container mimarisine alma sürecini basitleştirmek için Jib yardımcı programını kullanabilirsiniz. Jib, doğrudan derleme aracınızla (Maven veya Gradle gibi) entegre olan bir eklentidir ve Dockerfile
yazmadan optimize edilmiş container görüntüleri oluşturmanıza olanak tanır. Devam etmeden önce Artifact Registry API'yi etkinleştirmeniz gerekir (Container Registry'nin yerine Artifact Registry kullanmanız önerilir). Ardından Docker görüntüsü derlemek ve Kayıt Defteri'nde yayınlamak için Jib'i çalıştırın:
$ ./mvnw com.google.cloud.tools:jib-maven-plugin:3.1.1:build -Dimage=gcr.io/$GOOGLE_CLOUD_PROJECT/vision-jib
Not: Bu denemede, pom.xml dosyasında Jib Maven eklentisini yapılandırmadık ancak gelişmiş kullanım için eklentiyi daha fazla yapılandırma seçeneğiyle pom.xml dosyasına eklemek mümkündür.
- Önceki adımda Artifact Registry'ye aktardığımız container'ı Cloud Run'a dağıtın. Bu da yine tek komutluk bir adımdır:
gcloud run deploy vision-app --image gcr.io/$GOOGLE_CLOUD_PROJECT/vision-jib --platform managed --region us-central1 --allow-unauthenticated --update-env-vars
Bu işlemi alternatif olarak kullanıcı arayüzünden de yapabilirsiniz. Google Cloud Console'a gidin ve Cloud Run hizmetini bulun. "Hizmet Oluştur"u tıklayın. seçeneğini tıklayın ve ekrandaki talimatları uygulayın. Daha önce kayıt defterine aktardığınız container görüntüsünü belirtin, istenen dağıtım ayarlarını (CPU ayırma ve otomatik ölçeklendirme gibi) yapılandırın ve dağıtım için uygun bölgeyi seçin. Uygulamanıza özgü ortam değişkenlerini ayarlayabilirsiniz. Bu değişkenler arasında kimlik doğrulama kimlik bilgileri (API anahtarları vb.), veritabanı bağlantı dizeleri veya Vision AI uygulamanızın doğru şekilde çalışması için gereken diğer yapılandırmalar yer alabilir. Dağıtım başarıyla tamamlandığında uygulamanız için bir uç nokta alırsınız.
Vision AI uygulamanızla oynama
Demo amacıyla, uygulamanızın okuyup çevirmesi için aşağıdaki resim URL'sini kullanabilirsiniz: https://storage.googleapis.com/img_public_test/tamilwriting1.jfif
6. Temizleme
Bu yayında kullanılan kaynaklar için Google Cloud hesabınızın ücretlendirilmesini istemiyorsanız şu adımları uygulayın:
- Google Cloud Console'da "Kaynakları yönetin" sayfasına gidin
- Proje listesinden, silmek istediğiniz projeyi seçin ve Sil'i tıklayın.
- İletişim kutusuna proje kimliğini yazın ve projeyi silmek için Kapat'ı tıklayın
7. Tebrikler
Tebrikler! Spring Boot ve Java'yı kullanarak Vision AI uygulamasını başarıyla oluşturdunuz. Vision AI'ın gücüyle uygulamanız artık etiketleme ve yüz algılama gibi karmaşık görüntü analizleri yapabilir. Spring Boot'un entegrasyonu, ölçeklenebilir ve sağlam Google Cloud'da Yerel uygulamaları oluşturmak için sağlam bir temel sağlar. Uygulamanızı ek özellikler ve işlevlerle geliştirmek için Vision AI, Cloud Run, Cloud Translation ve daha fazlasının kapsamlı özelliklerini keşfetmeye devam edin. Daha fazla bilgi edinmek için Vision API, Cloud Translation ve GCP Spring belgelerine göz atın. Aynı denemeyi İlkbahar Yerel seçeneğiyle de deneyin! Ayrıca, üretken yapay zeka dünyasına giriş yapmak için bu API'nin Model Garden'da nasıl göründüğüne göz atın.