1. परिचय
डेटा पर आधारित ऐप्लिकेशन के आज के दौर में, कंप्यूटर विज़न जैसी बेहतर मशीन लर्निंग और आर्टिफ़िशियल इंटेलिजेंस की सेवाओं का फ़ायदा लेना ज़्यादा ज़रूरी हो गया है. ऐसी ही एक सेवा है Vision API, जो इमेज का विश्लेषण करने की बेहतर सुविधाएं देती है. इस कोडलैब में, आपको Spring बूट और Java का इस्तेमाल करके कंप्यूटर विज़न ऐप्लिकेशन बनाने का तरीका बताया जाएगा. इससे आपको अपने प्रोजेक्ट में इमेज पहचानने और विश्लेषण करने की क्षमता का फ़ायदा पाने में मदद मिलेगी. ऐप्लिकेशन यूज़र इंटरफ़ेस (यूआई), इनपुट के रूप में स्वीकार किया जाएगा, लिखी गई या प्रिंट की गई इमेज वाली इमेज के सार्वजनिक यूआरएल, लेख को एक्सट्रैक्ट करेगा, भाषा की पहचान करेगा और अगर यह समर्थित भाषाओं में से एक है, तो यह उस लेख का अंग्रेज़ी अनुवाद जनरेट करेगा.
आपको क्या बनाना होगा
आपको
- Vision API और Google Cloud Translation API का इस्तेमाल करने के लिए Java स्प्रिंग बूट ऐप्लिकेशन
- Cloud Run पर डिप्लॉय किया गया
2. ज़रूरी शर्तें
- Chrome या Firefox जैसा ब्राउज़र
- आपके पास ऐसा Google Cloud प्रोजेक्ट होना चाहिए जिसमें बिलिंग की सुविधा चालू हो
नीचे कुछ ज़रूरी शर्तें दी गई हैं:
अपना प्रोजेक्ट बनाएं
- आपके पास Google Cloud खाता हो, जिसमें प्रोजेक्ट बनाया गया हो और बिलिंग चालू हो
- Vision API, Translation, Cloud Run, और Artifact Registry के एपीआई चालू किए गए हैं
- Cloud Shell चालू है
- Cloud Storage API चालू है, जिसमें एक बकेट बनाई गई है और अपलोड की गई स्थानीय भाषाओं में टेक्स्ट या हैंडराइटिंग वाली इमेज हैं (या आप इस ब्लॉग में दिए गए सैंपल इमेज के लिंक का इस्तेमाल कर सकते हैं)
Google Cloud API को चालू करने का तरीका जानने के लिए, दस्तावेज़ देखें.
Cloud Shell को चालू करना
- आपको Cloud Shell का इस्तेमाल करना होगा. यह Google Cloud में चलने वाला एक कमांड-लाइन एनवायरमेंट है, जो bq के साथ पहले से लोड होता है:
Cloud Console में, सबसे ऊपर दाएं कोने में 'Cloud Shell को चालू करें' पर क्लिक करें
- Cloud Shell से कनेक्ट करने के बाद, आपको दिखेगा कि आपकी पुष्टि पहले ही हो चुकी है. साथ ही, यह प्रोजेक्ट पहले से ही आपके प्रोजेक्ट आईडी पर सेट है. यह पुष्टि करने के लिए Cloud Shell में नीचे दिया गया कमांड चलाएं कि आपकी पुष्टि हो गई है:
gcloud auth list
- Cloud Shell में यह कमांड चलाएं, ताकि यह पुष्टि की जा सके कि gcloud कमांड को आपके प्रोजेक्ट के बारे में जानकारी है
gcloud config list project
- अगर आपका प्रोजेक्ट सेट नहीं है, तो इसे सेट करने के लिए नीचे दिया गया कमांड इस्तेमाल करें:
gcloud config set project <PROJECT_ID>
gcloud के लिए कमांड और इसके इस्तेमाल के बारे में जानने के लिए, दस्तावेज़ देखें.
3. स्प्रिंग बूट प्रोजेक्ट को बूटस्ट्रैप करना
शुरू करने के लिए, अपने पसंदीदा IDE या Spring Initializr का इस्तेमाल करके नया Spring बूट प्रोजेक्ट बनाएं. अपने प्रोजेक्ट के कॉन्फ़िगरेशन में ज़रूरी डिपेंडेंसी शामिल करें. जैसे, Spring Web, Spring Cloud GCP, और Vision AI. इसके अलावा, Spring बूट ऐप्लिकेशन को आसानी से बूटस्ट्रैप करने के लिए, Cloud Shell से Spring खान-पान की सुविधा इस्तेमाल की जा सकती है. इसके लिए, नीचे दिया गया तरीका अपनाएं.
अपना Spring बूट प्रोजेक्ट बनाने के लिए नीचे दिया गया निर्देश चलाएं:
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 आपके प्रोजेक्ट का नाम है, इसे अपनी ज़रूरत के हिसाब से बदलें.
bootVersion, Spring बूट का वर्शन है. अगर लागू करते समय ज़रूरी हो, तो इसे अपडेट करना न भूलें.
type, प्रोजेक्ट बिल्ड टूल टाइप का वर्शन है. ज़रूरत पड़ने पर, इसे Gradle में बदला जा सकता है.
इससे "स्प्रिंग-विज़न" के तहत एक प्रोजेक्ट स्ट्रक्चर बनता है जैसा कि नीचे बताया गया है:
pom.xml में प्रोजेक्ट के लिए सभी डिपेंडेंसी शामिल होती हैं (इस निर्देश का इस्तेमाल करके कॉन्फ़िगर की गई डिपेंडेंसी, पहले ही आपके pom.xml में जोड़ी जाती हैं).
src/main/java/com/example/demo में सोर्स क्लास .java फ़ाइलें हैं.
रिसॉर्स में इमेज, एक्सएमएल, टेक्स्ट फ़ाइलें, और प्रोजेक्ट में इस्तेमाल होने वाली स्टैटिक कॉन्टेंट शामिल होता है. इनका रखरखाव, अलग-अलग किया जाता है.
application.properties की मदद से आप ऐप्लिकेशन की प्रोफ़ाइल से जुड़ी खास प्रॉपर्टी को तय करने के लिए, एडमिन की सुविधाओं को बनाए रख सकते हैं.
4. Vision API को कॉन्फ़िगर करना
Vision API चालू होने के बाद, आपके पास अपने ऐप्लिकेशन में एपीआई क्रेडेंशियल कॉन्फ़िगर करने का विकल्प होता है. पुष्टि करने की सुविधा सेट अप करने के लिए, आपके पास ऐप्लिकेशन के डिफ़ॉल्ट क्रेडेंशियल का इस्तेमाल करने का विकल्प भी होता है. हालांकि, इस डेमो में मैंने क्रेडेंशियल के इस्तेमाल को लागू नहीं किया है.
विज़न और अनुवाद की सेवाओं को लागू करना
Vision API के साथ इंटरैक्ट करने वाली सेवा की क्लास बनाएं. ज़रूरी डिपेंडेंसी इंजेक्ट करें और इमेज के विश्लेषण के अनुरोध भेजने के लिए, Vision API क्लाइंट का इस्तेमाल करें. अपने ऐप्लिकेशन की ज़रूरी शर्तों के हिसाब से, इमेज लेबल करने, चेहरे की पहचान करने, और पहचान करने जैसे काम करने के तरीके लागू किए जा सकते हैं. इस डेमो में, हम हैंडराइटिंग एक्सट्रैक्ट करने और अनुवाद करने के तरीकों का इस्तेमाल करेंगे.
इसके लिए, पक्का करें कि pom.xml में इन डिपेंडेंसी शामिल की गई हों.
<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>
इन फ़ाइलों को रेपो से क्लोन करें / बदलें और उन्हें प्रोजेक्ट स्ट्रक्चर में संबंधित फ़ोल्डर / पाथ में जोड़ें:
- 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/स्टैटिक)
- रिज़ल्ट.html (/src/main/resources/templates)
- pom.xml
org.springframework.cloud.gcp.vision.CloudVisionTemplate
सेवा में extractTextFromImage
तरीके से, इमेज के इनपुट से टेक्स्ट निकाला जा सकता है. com.google.cloud.translate.v3
सेवा में getTranslatedText
तरीके से, आपको अपनी इमेज से निकाले गए टेक्स्ट को पास करने और अनुवाद किए गए टेक्स्ट को अपनी पसंद की टारगेट भाषा में पाने का विकल्प मिलता है. ऐसा तब होता है, जब सोर्स इस्तेमाल की जा सकने वाली भाषाओं की सूची में शामिल हो.
REST API बनाना
REST एंडपॉइंट को डिज़ाइन और लागू करें, जिससे Vision API की सुविधाओं के बारे में पता चल सके. ऐसे कंट्रोलर बनाएं जो आने वाले अनुरोधों को हैंडल करें. साथ ही, इमेज को प्रोसेस करने और विश्लेषण के नतीजे देने के लिए Vision API सेवा का इस्तेमाल करें. इस डेमो में, हमारी VisionController
क्लास एंडपॉइंट को लागू करती है, आने वाले अनुरोध को हैंडल करती है, Vision API और Cloud Translation सेवाओं को शुरू करती है, और व्यू लेयर में नतीजे दिखाती है. REST एंडपॉइंट के लिए जीईटी तरीके को इस तरह लागू किया जाता है:
@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;
}
ऊपर बताए गए तरीके में TranslateText
क्लास का इस्तेमाल किया गया है. यह क्लाउड ट्रांसलेशन सेवा शुरू करता है:
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
क्लास के साथ, हमने REST के लिए जीईटी तरीका लागू किया है.
फ़्रंटएंड डेवलपमेंट के लिए थाइमलीफ़ को इंटिग्रेट करना
Spring बूट के साथ ऐप्लिकेशन बनाते समय, फ़्रंटएंड डेवलपमेंट के लिए सबसे ज़्यादा इस्तेमाल किया जाने वाला विकल्प Thymeleaf की सुविधा का इस्तेमाल करना है. Thymeleaf एक सर्वर-साइड Java टेंप्लेट इंजन है. इससे आपको अपने एचटीएमएल पेजों में, डाइनैमिक कॉन्टेंट को आसानी से इंटिग्रेट करने की सुविधा मिलती है. Thymeलीफ़ आपको बेहतर डेवलपमेंट का अनुभव देता है. इससे आपको एम्बेड किए गए सर्वर-साइड एक्सप्रेशन वाले एचटीएमएल टेंप्लेट बनाने में मदद मिलती है. इन एक्सप्रेशन का इस्तेमाल, आपके Spring बूट बैकएंड से डेटा को डायनैमिक तौर पर रेंडर करने के लिए किया जा सकता है. इससे Vision API सेवा की ओर से किए गए इमेज विश्लेषण के नतीजे आसानी से दिखाए जा सकते हैं.
शुरू करने के लिए, पक्का करें कि आपके पास Spring बूट प्रोजेक्ट में Thymeleaf के लिए ज़रूरी डिपेंडेंसी हैं. अपने pom.xml में, Thymeleaf Starter की डिपेंडेंसी शामिल की जा सकती है:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
अपने कंट्रोलर वाले तरीके में, Vision API सेवा से विश्लेषण का नतीजा पाएं और उसे मॉडल में जोड़ें. यह मॉडल उस डेटा को दिखाता है जिसका इस्तेमाल, Thymeleaf HTML टेंप्लेट को रेंडर करने के लिए करेगा. मॉडल में जानकारी भरने के बाद, उस Thymeleaf टेंप्लेट का नाम दें जिसे आपको रेंडर करना है. Thymeleaf, टेंप्लेट को प्रोसेस करने का काम करेगा. इसमें सर्वर साइड एक्सप्रेशन को असल डेटा से बदलें और क्लाइंट के ब्राउज़र पर भेजा जाने वाला फ़ाइनल एचटीएमएल जनरेट करें.
VisionController
में extractText
तरीके के मामले में, हमने नतीजे के तौर पर String
को लौटाया है और मॉडल में नहीं जोड़ा है. हालांकि, हमने पेज सबमिट करने पर index.html
पर, जीईटी तरीके से extractText
तरीका शुरू किया है. Thymelee की मदद से, उपयोगकर्ताओं को बेहतरीन अनुभव दिया जा सकता है. यहां वे इमेज अपलोड कर सकते हैं, Vision API का विश्लेषण ट्रिगर कर सकते हैं, और रीयल-टाइम में नतीजे देख सकते हैं. अपने Vision AI ऐप्लिकेशन की पूरी क्षमता के साथ काम करें और फ़्रंटएंड डेवलपमेंट के लिए Thymeleaf का इस्तेमाल करें.
<form action="/extractText">
Web URL of image to analyze:
<input type="text"
name="imageUrl"
value=""
<input type="submit" value="Read and Translate" />
</form>
5. Cloud Run पर अपने कंप्यूटर विज़न ऐप्लिकेशन को डिप्लॉय करना
/src/test/java/com/example
फ़ोल्डर के तहत सही काम करने के लिए, अपनी सेवा और कंट्रोलर क्लास के लिए यूनिट टेस्ट लिखें. अगर आपको भरोसा हो कि इसकी स्थिरता कैसी है, तो उसे JAR फ़ाइल जैसे डिप्लॉय किए जा सकने वाले आर्टफ़ैक्ट में पैकेज के तौर पर जोड़ें. इसके बाद, उसे Cloud Run पर डिप्लॉय करें. Cloud Run एक ऐसा कंप्यूट प्लैटफ़ॉर्म है जो Google Cloud पर मौजूद है, बिना सर्वर वाला कंप्यूट प्लैटफ़ॉर्म. इस चरण में, हम Cloud Run का इस्तेमाल करके आपके कंटेनर वाले Spring बूट ऐप्लिकेशन को डिप्लॉय करने पर फ़ोकस करेंगे.
- Cloud Shell से यह तरीका अपनाकर अपने ऐप्लिकेशन को पैकेज करें. पक्का करें कि टर्मिनल, प्रोजेक्ट रूट फ़ोल्डर पर प्रॉम्प्ट भेज रहा हो
बिल्ड:
./mvnw package
बिल्ड सफल होने के बाद, टेस्ट करने के लिए स्थानीय तौर पर चलाएं:
./mvnw spring-boot:run
- अपने स्प्रिंग बूट ऐप्लिकेशन को Jib के साथ कंटेनर में जोड़ें:
मैन्युअल तरीके से Dockerfile
बनाने और कंटेनर इमेज बनाने के बजाय, कंटेनर बनाने की प्रोसेस को आसान बनाने के लिए Jib टूल का इस्तेमाल किया जा सकता है. Jib एक ऐसा प्लगिन है जो आपके बिल्ड टूल (जैसे कि Maven या Gradle) के साथ सीधे तौर पर इंटिग्रेट होता है. साथ ही, इसकी मदद से, Dockerfile
लिखे बिना, ऑप्टिमाइज़ की गई कंटेनर इमेज बनाई जा सकती हैं. आगे बढ़ने से पहले, आपको Artifact Registry API को चालू करना होगा (कंटेनर रजिस्ट्री के बजाय, Artifact Registry का इस्तेमाल किया जा सकता है). इसके बाद, Docker इमेज बनाने और रजिस्ट्री में पब्लिश करने के लिए, Jib को चलाएं:
$ ./mvnw com.google.cloud.tools:jib-maven-plugin:3.1.1:build -Dimage=gcr.io/$GOOGLE_CLOUD_PROJECT/vision-jib
ध्यान दें: इस एक्सपेरिमेंट में, हमने pom.xml में Jib Maven प्लगिन को कॉन्फ़िगर नहीं किया है. हालांकि, बेहतर इस्तेमाल के लिए इसे pom.xml में कॉन्फ़िगरेशन के ज़्यादा विकल्पों के साथ कॉन्फ़िगर किया जा सकता है
- उस कंटेनर (जिसे हमने पिछले चरण में Artifact Registry में भेजा गया था) को Cloud Run में डिप्लॉय करें. इसके लिए, एक निर्देश से दोबारा अनुरोध किया जा सकता है:
gcloud run deploy vision-app --image gcr.io/$GOOGLE_CLOUD_PROJECT/vision-jib --platform managed --region us-central1 --allow-unauthenticated --update-env-vars
इसके अलावा, यूज़र इंटरफ़ेस (यूआई) का भी इस्तेमाल किया जा सकता है. Google Cloud Console पर जाएं और Cloud Run सेवा का पता लगाएं. "सेवा बनाएं" पर क्लिक करें और स्क्रीन पर दिए गए निर्देशों का पालन करें. कंटेनर की वह इमेज डालें जिसे आपने पहले रजिस्ट्री में पुश किया था. ज़रूरत के मुताबिक डिप्लॉयमेंट सेटिंग (जैसे, सीपीयू का बंटवारा और ऑटो स्केलिंग) कॉन्फ़िगर करें और डिप्लॉयमेंट के लिए सही जगह चुनें. अपने ऐप्लिकेशन के हिसाब से, अलग-अलग तरह के एनवायरमेंट वैरिएबल सेट किए जा सकते हैं. इन वैरिएबल में पुष्टि करने वाले क्रेडेंशियल (एपीआई पासकोड वगैरह), डेटाबेस कनेक्शन स्ट्रिंग या आपके Vision AI ऐप्लिकेशन के सही तरीके से काम करने के लिए ज़रूरी कॉन्फ़िगरेशन शामिल हो सकते हैं. डिप्लॉयमेंट पूरा होने के बाद, आपको अपने ऐप्लिकेशन का एंडपॉइंट मिलना चाहिए.
अपने Vision AI ऐप्लिकेशन की मदद से खेलना
डेमो के लिए, नीचे दिए गए इमेज के यूआरएल का इस्तेमाल करें, ताकि आपका ऐप्लिकेशन इस इमेज को पढ़ सके और उसका अनुवाद कर सके: https://storage.googleapis.com/img_public_test/tamilwriting1.jfif
6. व्यवस्थित करें
इस पोस्ट में इस्तेमाल किए गए संसाधनों के लिए, आपके Google Cloud खाते पर शुल्क न लगे, इसके लिए यह तरीका अपनाएं:
- Google Cloud Console में, 'संसाधन मैनेज करें' पेज पर जाएं
- प्रोजेक्ट की सूची में, वह प्रोजेक्ट चुनें जिसे आपको मिटाना है. इसके बाद, 'मिटाएं' पर क्लिक करें
- डायलॉग बॉक्स में, प्रोजेक्ट आईडी टाइप करें. इसके बाद, प्रोजेक्ट मिटाने के लिए 'शट डाउन करें' पर क्लिक करें
7. बधाई हो
बधाई हो! आपने Spring बूट और Java का इस्तेमाल करके, Vision AI ऐप्लिकेशन बना लिया है. Vision AI की मदद से, आपका ऐप्लिकेशन अब इमेज का बेहतर तरीके से विश्लेषण कर सकता है. इसमें इमेज को लेबल करना, चेहरे की पहचान करना वगैरह शामिल हैं. Spring बूट का इंटिग्रेशन, बढ़ाने लायक और मज़बूत Google Cloud नेटिव ऐप्लिकेशन बनाने के लिए एक मज़बूत बुनियाद देता है. अन्य सुविधाओं और फ़ंक्शन से अपने ऐप्लिकेशन को और बेहतर बनाने के लिए, Vision AI, Cloud Run, Cloud Translation वगैरह की सुविधाओं को लगातार एक्सप्लोर करते रहें. ज़्यादा जानने के लिए, Vision API, Cloud Translation, और GCP Spring के दस्तावेज़ देखें. इसी तरह के प्रयोग को वसंत के मौसम के हिसाब से विकल्प के साथ आज़माएं!! साथ ही, जनरेटिव एआई की दुनिया को करीब से जानने के लिए, देखें कि मॉडल गार्डन में यह एपीआई कैसा दिखता है.