Bilgisayar Görüşü Artık Daha Kolay: Spring Boot ve Java'da Vision AI

1. Giriş

Veriye dayalı uygulamaların yaygınlaştığı günümüzde, bilgisayarla görme gibi gelişmiş makine öğrenimi ve yapay zeka hizmetlerinden yararlanmak giderek daha önemli hale geldi. Bu hizmetlerden biri, güçlü görüntü analizi özellikleri sağlayan Vision API'dir. Bu codelab'de, Spring Boot ve Java kullanarak bir Computer Vision uygulaması oluşturmayı öğrenecek, böylece projelerinizde görüntü tanıma ve analizinin potansiyelini ortaya çıkarabileceksiniz. Uygulama kullanıcı arayüzü, yazılı veya basılı metin içeren resimlerin herkese açık URL'lerini giriş olarak kabul eder, metni ayıklar, dili algılar ve desteklenen dillerden biri ise bu metnin İngilizce çevirisini oluşturur.

Ne oluşturacaksınız?

Aşağıdakileri oluşturacaksınız:

  • Vision API ve Google Cloud Translation API'yi kullanmak için Java Spring Boot uygulaması
  • Cloud Run'da dağıtılanlar

2. Şartlar

  • Chrome veya Firefox gibi bir tarayıcı
  • Faturalandırmanın etkin olduğu bir Google Cloud projesi

Ön koşullar aşağıda verilmiştir:

Projenizi oluşturma

  1. Proje oluşturulmuş ve faturalandırma etkinleştirilmiş bir Google Cloud hesabı
  2. Vision API, Translation, Cloud Run ve Artifact Registry API'leri etkinleştirilmiş olmalıdır.
  3. Cloud Shell etkinleştirildi
  4. Cloud Storage API'nin etkinleştirilmesi, paket oluşturulması ve yerel olarak desteklenen dillerde metin veya el yazısı içeren resimlerin yüklenmesi (alternatif olarak bu blogda sağlanan örnek resim bağlantılarını kullanabilirsiniz)

Google Cloud API'lerini etkinleştirme adımları için belgelere bakın.

Cloud Shell'i etkinleştirme

  1. bq önceden yüklenmiş olarak gelen, Google Cloud'da çalışan 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.

51622c00acec2fa.png

  1. Cloud Shell'e bağlandıktan sonra kimliğinizin doğrulandığını ve projenin, proje kimliğinize ayarlandığını görürsünüz. Kimliğinizin doğrulandığını onaylamak için Cloud Shell'de şu komutu çalıştırın:
gcloud auth list
  1. gcloud komutunun projeniz hakkında bilgi sahibi olduğunu onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın.
gcloud config list project
  1. Projeniz ayarlanmamışsa 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 başlatma

Başlamak için tercih ettiğiniz IDE'yi veya Spring Initializr'ı kullanarak yeni bir Spring Boot projesi oluşturun. Projenizin yapılandırmasına Spring Web, Spring Cloud GCP ve Vision AI gibi gerekli bağımlılıkları ekleyin. Alternatif olarak, Spring Boot uygulamanızı kolayca başlatmak için aşağıdaki adımları uygulayarak Cloud Shell'den Spring Initializr'ı 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 -

spring-vision, projenizin adıdır. İhtiyacınıza göre değiştirebilirsiniz.

bootVersion, Spring Boot'un sürümüdür. Uygulamanız sırasında gerekirse 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.

37813d3982ce2e42.png

Bu işlem, "spring-vision" altında aşağıdaki gibi bir proje yapısı oluşturur:

3e70d45d88ac6935.png

pom.xml, projenin tüm bağımlılıklarını 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, kaynak sınıfları .java dosyalarını içerir.

resources, projenin kullandığı ve bağımsız olarak korunan resimleri, XML'yi, metin dosyalarını ve statik içeriği içerir.

application.properties, uygulamanın profile özgü özelliklerini tanımlamak için yönetici özelliklerini korumanıza olanak tanır.

4. Vision API'yi yapılandırma

Vision API'yi etkinleştirdikten sonra uygulamanızda API kimlik bilgilerini yapılandırabilirsiniz. Kimlik doğrulamayı ayarlamak için isteğe bağlı olarak Uygulama Varsayılan Kimlik Bilgileri'ni kullanabilirsiniz. Ancak bu demo uygulamasında kimlik bilgilerinin kullanımı uygulanmamıştır.

Görsel ve çeviri hizmetlerini uygulama

Vision API ile etkileşimde bulunan 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ı ayıklama ve çeviri yöntemlerini kullanacağız.

Bunun için pom.xml dosyasına aşağıdaki bağımlılıkları 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>

Depodaki aşağıdaki dosyaları klonlayın / değiştirin ve proje yapısındaki ilgili klasörlere / yola ekleyin:

  1. Application.java (/src/main/java/com/example/demo)
  2. TranslateText.java (/src/main/java/com/example/demo)
  3. VisionController.java (/src/main/java/com/example/demo)
  4. index.html (/src/main/resources/static)
  5. result.html (/src/main/resources/templates)
  6. pom.xml

org.springframework.cloud.gcp.vision.CloudVisionTemplate hizmetindeki extractTextFromImage yöntemi, resim girişinizden metin ayıklamanıza olanak tanır. com.google.cloud.translate.v3 hizmetindeki getTranslatedText yöntemi, resminizden çıkarılan metni iletmenize ve kaynak desteklenen diller listesinde yer alıyorsa istenen hedef dilde çevrilmiş metni yanıt olarak almanıza olanak tanır.

REST API'yi oluşturma

Vision API işlevlerini kullanıma sunacak REST uç noktalarını tasarlayın ve uygulayın. Gelen istekleri işleyen ve görüntüleri işlemek ve 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 ve Cloud Translation hizmetlerini çağırır ve sonucu görünüm katmanına döndürür. REST uç noktası için alma yönteminin uygulanması şu şekildedir:

@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 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, REST için alma yöntemini uyguladık.

Ön uç geliştirme için Thymeleaf'i entegre etme

Spring Boot ile uygulama geliştirirken ön uç geliştirme için popüler bir 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 taraflı bir Java şablon motorudur. Thymeleaf, sunucu tarafı ifadeleri yerleştirilmiş HTML şablonları oluşturmanıza olanak tanıyarak sorunsuz bir geliştirme deneyimi sunar. Bu ifadeler, Spring Boot arka uçunuzdaki 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ülemek kolaylaşır.

Başlamak için Spring Boot projenizde Thymeleaf için gerekli bağımlılıkların olduğundan emin olun. pom.xml dosyanıza Thymeleaf Starter bağımlılığını 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 temsil eder. Model doldurulduktan sonra oluşturmak istediğiniz Thymeleaf şablonunun adını döndürün. Thymeleaf, şablonun işlenmesi, sunucu tarafı ifadelerin gerçek verilerle değiştirilmesi ve istemcinin tarayıcısına gönderilecek nihai HTML'nin oluşturulmasıyla ilgilenir.

VisionController içindeki extractText yöntemi söz konusu olduğunda sonucu String olarak döndürdük ve modele eklemedik. Ancak sayfa gönderiminde index.html üzerinde GET yöntemini extractText yöntemini çağırdık. Thymeleaf ile kullanıcıların resim yükleyebileceği, Vision API analizlerini tetikleyebileceği ve sonuçları anlık olarak görüntüleyebileceğ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 tüm 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'a dağıtma

/src/test/java/com/example klasöründe uygun işlevselliği sağlamak için hizmet ve denetleyici sınıflarınızla ilgili birim testleri yazın. Kararlılığından emin olduğunuzda, JAR dosyası gibi dağıtılabilir bir yapıya paketleyin ve Google Cloud'daki sunucusuz işlem platformu Cloud Run'a dağıtın. Bu adımda, Cloud Run'ı kullanarak container'a alınmış Spring Boot uygulamanızı dağıtmaya odaklanacağız.

  1. Cloud Shell'de aşağıdaki adımları uygulayarak uygulamanızı paketleyin(terminalin proje kök klasöründe istem oluşturduğundan emin olun).

Oluştur:

./mvnw package

Derleme başarılı olduğunda, test etmek için yerel olarak çalıştırın:

./mvnw spring-boot:run
  1. Jib ile Spring Boot uygulamanızı kapsayıcıya alın:

Dockerfile dosyasını manuel olarak oluşturup 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 (ör. Maven veya Gradle) entegre olan bir eklentidir ve Dockerfile yazmadan optimize edilmiş kapsayıcı resimler oluşturmanıza olanak tanır. Devam etmeden önce Artifact Registry API'yi etkinleştirmeniz gerekir (Container Registry yerine Artifact Registry'nin kullanılması önerilir). Ardından, Docker görüntüsü oluşturmak ve Registry'de 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, Jib Maven eklentisini pom.xml'de yapılandırmadık ancak gelişmiş kullanım için daha fazla yapılandırma seçeneğiyle pom.xml'e eklemek mümkündür.

  1. Container'ı (önceki adımda Artifact Registry'ye aktardığımız) Cloud Run'a dağıtın. Bu da 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

Alternatif olarak, bu işlemi kullanıcı arayüzünden de yapabilirsiniz. Google Cloud Console'a gidin ve Cloud Run hizmetini bulun. "Hizmet oluştur"u tıklayın ve ekrandaki talimatları uygulayın. Daha önce kayıt defterine gönderdiğiniz kapsayıcı görüntüsünü belirtin, istediğiniz dağıtım ayarlarını (ör. CPU ayırma ve otomatik ölçeklendirme) yapılandırın ve dağıtım için uygun bölgeyi seçin. Uygulamanıza özel ortam değişkenleri 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 düzgün çalışması için gereken diğer yapılandırmalar yer alabilir. Dağıtım başarıyla tamamlandığında uygulamanızın uç noktasını 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

654c1b0de0db482.gif

6. Temizleme

Bu yayında kullanılan kaynaklar için Google Cloud hesabınızın ücretlendirilmesini istemiyorsanız şu adımları uygulayın:

  1. Google Cloud Console'da Kaynakları yönetin sayfasına gidin.
  2. Proje listesinde silmek istediğiniz projeyi seçin ve Sil'i tıklayın.
  3. İletişim kutusunda proje kimliğini yazın ve projeyi silmek için Kapat'ı tıklayın.

7. Tebrikler

Tebrikler! Spring Boot ve Java 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 gelişmiş görüntü analizleri yapabilir. Spring Boot'un entegrasyonu, ölçeklenebilir ve sağlam Google Cloud Native 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 diğer hizmetlerin geniş kapsamlı özelliklerini keşfetmeye devam edin. Daha fazla bilgi edinmek için Vision API, Cloud Translation ve GCP Spring dokümanlarını inceleyin. Aynı denemeyi Spring Native seçeneğiyle deneyin. Üretken yapay zeka dünyasına göz atmak için bu API'nin Model Garden'da nasıl göründüğüne de bakabilirsiniz.