1. ভূমিকা
ডেটা-চালিত অ্যাপ্লিকেশনের আজকের যুগে, কম্পিউটার ভিশনের মতো উন্নত মেশিন লার্নিং এবং কৃত্রিম বুদ্ধিমত্তা পরিষেবাগুলিকে কাজে লাগানো ক্রমশ গুরুত্বপূর্ণ হয়ে উঠেছে। এরকম একটি পরিষেবা হল Vision API , যা শক্তিশালী ইমেজ বিশ্লেষণ ক্ষমতা প্রদান করে। এই কোডল্যাবে, আপনি স্প্রিং বুট এবং জাভা ব্যবহার করে একটি কম্পিউটার ভিশন অ্যাপ্লিকেশন তৈরি করতে শিখবেন, যা আপনাকে আপনার প্রকল্পগুলিতে চিত্র স্বীকৃতি এবং বিশ্লেষণের সম্ভাবনা আনলক করতে সক্ষম করে। অ্যাপ্লিকেশন UI ইনপুট হিসাবে গ্রহণ করবে, এমন চিত্রগুলির সর্বজনীন URL যা লিখিত বা মুদ্রিত পাঠ্য ধারণ করবে, পাঠ্যটি বের করবে, ভাষা সনাক্ত করবে এবং যদি এটি সমর্থিত ভাষার মধ্যে একটি হয় তবে এটি সেই পাঠ্যের ইংরেজি অনুবাদ তৈরি করবে।
আপনি কি নির্মাণ করবেন
আপনি একটি তৈরি করবেন
- ভিশন API এবং Google ক্লাউড অনুবাদ API ব্যবহার করার জন্য একটি জাভা স্প্রিং বুট অ্যাপ্লিকেশন
- ক্লাউড রানে স্থাপন করা হয়েছে
2. প্রয়োজনীয়তা
- একটি ব্রাউজার, যেমন ক্রোম বা ফায়ারফক্স
- বিলিং সক্ষম সহ একটি Google ক্লাউড প্রকল্প৷
নীচে পূর্বশর্ত রয়েছে:
আপনার প্রকল্প তৈরি করুন
- একটি Google ক্লাউড অ্যাকাউন্ট তৈরি করা এবং বিলিং সক্ষম করা প্রকল্প সহ
- ভিশন API, অনুবাদ, ক্লাউড রান, এবং আর্টিফ্যাক্ট রেজিস্ট্রি API গুলি সক্ষম৷
- ক্লাউড শেল সক্রিয় করা হয়েছে
- ক্লাউড স্টোরেজ API সক্রিয় করা হয়েছে একটি বালতি তৈরি করা হয়েছে এবং স্থানীয় সমর্থিত ভাষায় পাঠ্য বা হাতের লেখা সহ ছবি আপলোড করা হয়েছে (বা আপনি এই ব্লগে দেওয়া নমুনা চিত্র লিঙ্কগুলি ব্যবহার করতে পারেন)
কিভাবে Google ক্লাউড এপিআই সক্ষম করতে হয় তার পদক্ষেপের জন্য ডকুমেন্টেশন পড়ুন।
ক্লাউড শেল সক্রিয় করুন
- আপনি ক্লাউড শেল ব্যবহার করবেন, Google ক্লাউডে চলমান একটি কমান্ড-লাইন পরিবেশ যা bq এর সাথে প্রি-লোড করা হয়:
ক্লাউড কনসোল থেকে, উপরের ডানদিকে কোণায় ক্লাউড শেল সক্রিয় করুন ক্লিক করুন
- একবার ক্লাউড শেলের সাথে সংযুক্ত হয়ে গেলে, আপনি দেখতে পাবেন যে আপনি ইতিমধ্যেই প্রমাণীকরণ করেছেন এবং প্রকল্পটি ইতিমধ্যে আপনার প্রকল্প আইডিতে সেট করা আছে। আপনি প্রমাণীকৃত কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud auth list
- gcloud কমান্ড আপনার প্রকল্প সম্পর্কে জানে তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান
gcloud config list project
- যদি আপনার প্রজেক্ট সেট করা না থাকে, তাহলে এটি সেট করতে নিম্নলিখিত কমান্ডটি ব্যবহার করুন:
gcloud config set project <PROJECT_ID>
জিক্লাউড কমান্ড এবং ব্যবহারের জন্য ডকুমেন্টেশন পড়ুন।
3. একটি স্প্রিং বুট প্রকল্প বুটস্ট্র্যাপিং
শুরু করতে, আপনার পছন্দের IDE বা Spring Initializr ব্যবহার করে একটি নতুন স্প্রিং বুট প্রকল্প তৈরি করুন। আপনার প্রজেক্টের কনফিগারেশনে প্রয়োজনীয় নির্ভরতা অন্তর্ভুক্ত করুন, যেমন স্প্রিং ওয়েব, স্প্রিং ক্লাউড জিসিপি এবং ভিশন এআই। বিকল্পভাবে, আপনি আপনার স্প্রিং বুট অ্যাপ্লিকেশনটিকে সহজেই বুটস্ট্র্যাপ করতে নীচের পদক্ষেপগুলি ব্যবহার করে ক্লাউড শেল থেকে স্প্রিং ইনিশিয়ালাইজার ব্যবহার করতে পারেন।
আপনার স্প্রিং বুট প্রকল্প তৈরি করতে নিম্নলিখিত কমান্ডটি চালান:
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 -
স্প্রিং-ভিশন আপনার প্রকল্পের নাম, আপনার প্রয়োজন অনুযায়ী এটি পরিবর্তন করুন।
bootVersion হল স্প্রিং বুটের সংস্করণ, আপনার বাস্তবায়নের সময় প্রয়োজন হলে এটি আপডেট করতে ভুলবেন না।
টাইপ হল প্রজেক্ট বিল্ড টুল টাইপের ভার্সন, আপনি পছন্দ করলে গ্রেডলে পরিবর্তন করতে পারেন।
এটি নীচের মত "বসন্ত-দর্শন" এর অধীনে একটি প্রকল্প কাঠামো তৈরি করে:
pom.xml প্রকল্পের জন্য সমস্ত নির্ভরতা ধারণ করে (এই কমান্ডটি ব্যবহার করে আপনি যে নির্ভরতাগুলি কনফিগার করেছেন তা ইতিমধ্যেই আপনার pom.xml-এ যোগ করা হয়েছে)।
src/main/java/com/example/demo-এর সোর্স ক্লাস .java ফাইল রয়েছে।
রিসোর্সে ছবি, XML, টেক্সট ফাইল এবং প্রজেক্ট ব্যবহার করা স্ট্যাটিক কন্টেন্ট থাকে যা স্বাধীনভাবে রক্ষণাবেক্ষণ করা হয়।
application.properties আপনাকে প্রশাসক বৈশিষ্ট্যগুলি বজায় রাখতে সক্ষম করে যাতে অ্যাপ্লিকেশনটির প্রোফাইল নির্দিষ্ট বৈশিষ্ট্যগুলি সংজ্ঞায়িত করা যায়।
4. ভিশন API কনফিগার করা
একবার আপনার ভিশন API সক্ষম হয়ে গেলে, আপনার অ্যাপ্লিকেশনে API শংসাপত্রগুলি কনফিগার করার বিকল্প রয়েছে৷ প্রমাণীকরণ সেট আপ করার জন্য আপনি ঐচ্ছিকভাবে অ্যাপ্লিকেশন ডিফল্ট শংসাপত্র ব্যবহার করতে পারেন। এই ডেমো বাস্তবায়নে আমি শংসাপত্রের ব্যবহার বাস্তবায়ন করিনি।
দৃষ্টি এবং অনুবাদ পরিষেবাগুলি বাস্তবায়ন করা
ভিশন API এর সাথে ইন্টারঅ্যাক্ট করে এমন একটি পরিষেবা ক্লাস তৈরি করুন। প্রয়োজনীয় নির্ভরতা ইনজেক্ট করুন এবং চিত্র বিশ্লেষণের অনুরোধ পাঠাতে ভিশন 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/static)
- result.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
ক্লাস এন্ডপয়েন্ট প্রয়োগ করে, ইনকামিং রিকোয়েস্ট পরিচালনা করে, ভিশন এপিআই এবং ক্লাউড ট্রান্সলেশন পরিষেবাগুলিকে আহ্বান করে এবং ফলাফলটি ভিউ লেয়ারে ফিরিয়ে দেয়। REST শেষ পয়েন্টের জন্য GET পদ্ধতির বাস্তবায়ন নিম্নরূপ:
@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 প্রয়োগের জন্য GET পদ্ধতি রয়েছে।
ফ্রন্টএন্ড উন্নয়নের জন্য Thymeleaf সংহত করা
স্প্রিং বুট দিয়ে একটি অ্যাপ্লিকেশন তৈরি করার সময়, ফ্রন্টএন্ড ডেভেলপমেন্টের জন্য একটি জনপ্রিয় পছন্দ হল থাইমেলিফের শক্তি ব্যবহার করা। Thymeleaf হল একটি সার্ভার-সাইড জাভা টেমপ্লেট ইঞ্জিন যা আপনাকে আপনার HTML পৃষ্ঠাগুলিতে গতিশীল বিষয়বস্তুকে নির্বিঘ্নে সংহত করতে দেয়। Thymeleaf আপনাকে এমবেডেড সার্ভার-সাইড এক্সপ্রেশন সহ HTML টেমপ্লেট তৈরি করার অনুমতি দিয়ে একটি মসৃণ বিকাশের অভিজ্ঞতা প্রদান করে। এই অভিব্যক্তিগুলি আপনার স্প্রিং বুট ব্যাকএন্ড থেকে গতিশীলভাবে ডেটা রেন্ডার করতে ব্যবহার করা যেতে পারে, যা ভিশন API পরিষেবা দ্বারা সম্পাদিত চিত্র বিশ্লেষণের ফলাফলগুলি প্রদর্শন করা সহজ করে তোলে।
শুরু করার জন্য, আপনার স্প্রিং বুট প্রকল্পে Thymeleaf এর জন্য প্রয়োজনীয় নির্ভরতা রয়েছে তা নিশ্চিত করুন। আপনি আপনার pom.xml-এ Thymeleaf Starter নির্ভরতা অন্তর্ভুক্ত করতে পারেন:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
আপনার নিয়ামক পদ্ধতিতে, Vision API পরিষেবা থেকে বিশ্লেষণের ফলাফল পুনরুদ্ধার করুন এবং এটি মডেলে যোগ করুন। মডেলটি সেই ডেটা উপস্থাপন করে যা Thymeleaf দ্বারা HTML টেমপ্লেট রেন্ডার করতে ব্যবহার করা হবে। মডেলটি পপুলেট হয়ে গেলে, আপনি যে থাইমেলিফ টেমপ্লেটটি রেন্ডার করতে চান তার নামটি ফেরত দিন। Thymeleaf টেমপ্লেট প্রক্রিয়াকরণ, প্রকৃত ডেটার সাথে সার্ভার-সাইড এক্সপ্রেশন প্রতিস্থাপন এবং ক্লায়েন্টের ব্রাউজারে পাঠানো চূড়ান্ত HTML তৈরি করার যত্ন নেবে।
VisionController
এ extractText
পদ্ধতির ক্ষেত্রে, আমরা ফলাফলটিকে String
হিসেবে ফিরিয়ে দিয়েছি এবং মডেলে যোগ করা হয়নি। কিন্তু আমরা সাবমিট পৃষ্ঠায় index.html
এ GET পদ্ধতি extractText
পদ্ধতি ব্যবহার করেছি। Thymeleaf-এর সাহায্যে, আপনি একটি নিরবচ্ছিন্ন ব্যবহারকারীর অভিজ্ঞতা তৈরি করতে পারেন, যেখানে ব্যবহারকারীরা ছবি আপলোড করতে পারে, ভিশন API বিশ্লেষণগুলি ট্রিগার করতে পারে এবং রিয়েল-টাইমে ফলাফল দেখতে পারে। ফ্রন্টএন্ড ডেভেলপমেন্টের জন্য Thymeleaf এর শক্তি ব্যবহার করে আপনার Vision AI অ্যাপ্লিকেশনের পূর্ণ সম্ভাবনা আনলক করুন।
<form action="/extractText">
Web URL of image to analyze:
<input type="text"
name="imageUrl"
value=""
<input type="submit" value="Read and Translate" />
</form>
5. ক্লাউড রানে আপনার কম্পিউটার ভিশন অ্যাপ স্থাপন করা হচ্ছে
/src/test/java/com/example
ফোল্ডারের অধীনে সঠিক কার্যকারিতা নিশ্চিত করতে আপনার পরিষেবা এবং নিয়ামক ক্লাসের জন্য ইউনিট পরীক্ষা লিখুন। একবার আপনি এটির স্থায়িত্বের বিষয়ে আত্মবিশ্বাসী হয়ে গেলে, এটিকে একটি JAR ফাইলের মতো একটি স্থাপনযোগ্য আর্টিফ্যাক্টে প্যাকেজ করুন এবং এটিকে Google ক্লাউডে একটি সার্ভারহীন গণনা প্ল্যাটফর্ম ক্লাউড রানে স্থাপন করুন৷ এই ধাপে, আমরা ক্লাউড রান ব্যবহার করে আপনার কন্টেইনারাইজড স্প্রিং বুট অ্যাপ্লিকেশন স্থাপনের উপর ফোকাস করব।
- ক্লাউড শেল থেকে নিম্নলিখিত পদক্ষেপগুলি সম্পাদন করে আপনার অ্যাপ্লিকেশনটি প্যাকেজ করুন (প্রজেক্ট রুট ফোল্ডারে টার্মিনালটি প্রম্পট করছে তা নিশ্চিত করুন)
নির্মাণ:
./mvnw package
একবার বিল্ড সফল হলে, পরীক্ষা করতে স্থানীয়ভাবে চালান:
./mvnw spring-boot:run
- জিবের সাথে আপনার স্প্রিং বুট অ্যাপ্লিকেশন কন্টেইনারাইজ করুন:
ম্যানুয়ালি একটি Dockerfile
তৈরি এবং কন্টেইনার ইমেজ তৈরি করার পরিবর্তে, আপনি কন্টেইনারাইজেশন প্রক্রিয়াটিকে সহজ করতে জিব ইউটিলিটি ব্যবহার করতে পারেন। জিব হল একটি প্লাগইন যা সরাসরি আপনার বিল্ড টুলের (যেমন Maven বা Gradle) সাথে সংহত করে এবং আপনাকে Dockerfile
না লিখেই অপ্টিমাইজ করা কন্টেইনার ইমেজ তৈরি করতে দেয়। এগিয়ে যাওয়ার আগে, আপনাকে আর্টিফ্যাক্ট রেজিস্ট্রি এপিআই সক্ষম করতে হবে (কন্টেইনার রেজিস্ট্রির উপর আর্টিফ্যাক্ট রেজিস্ট্রির ব্যবহার উৎসাহিত করা হয়)। তারপরে একটি ডকার ইমেজ তৈরি করতে জিব চালান এবং রেজিস্ট্রিতে প্রকাশ করুন:
$ ./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-এ যোগ করা সম্ভব।
- ক্লাউড রানে কন্টেইনার (যেটি আমরা পূর্ববর্তী ধাপে আর্টিফ্যাক্ট রেজিস্ট্রিতে ঠেলে দিয়েছিলাম) স্থাপন করুন। এটি আবার একটি এক-কমান্ড পদক্ষেপ:
gcloud run deploy vision-app --image gcr.io/$GOOGLE_CLOUD_PROJECT/vision-jib --platform managed --region us-central1 --allow-unauthenticated --update-env-vars
আপনি বিকল্পভাবে UI থেকেও এটি করতে পারেন। Google ক্লাউড কনসোলে নেভিগেট করুন এবং ক্লাউড রান পরিষেবাটি সনাক্ত করুন৷ "পরিষেবা তৈরি করুন" এ ক্লিক করুন এবং অন-স্ক্রীন নির্দেশাবলী অনুসরণ করুন। আপনি যে কন্টেইনার ইমেজটি আগে রেজিস্ট্রিতে পুশ করেছিলেন তা নির্দিষ্ট করুন, কাঙ্খিত স্থাপনার সেটিংস কনফিগার করুন (যেমন CPU বরাদ্দকরণ এবং অটোস্কেলিং), এবং স্থাপনার জন্য উপযুক্ত অঞ্চল বেছে নিন। আপনি আপনার অ্যাপ্লিকেশনের জন্য নির্দিষ্ট পরিবেশ ভেরিয়েবল সেট করতে পারেন। এই ভেরিয়েবলগুলিতে প্রমাণীকরণ শংসাপত্র (এপিআই কী ইত্যাদি), ডাটাবেস সংযোগ স্ট্রিং, বা আপনার ভিশন এআই অ্যাপ্লিকেশন সঠিকভাবে কাজ করার জন্য প্রয়োজনীয় অন্য কোনও কনফিগারেশন অন্তর্ভুক্ত থাকতে পারে। স্থাপনা সফলভাবে সম্পন্ন হলে, আপনার আবেদনের একটি শেষ পয়েন্ট পাওয়া উচিত।
আপনার ভিশন এআই অ্যাপের সাথে খেলা
ডেমোর উদ্দেশ্যে, আপনি আপনার অ্যাপটি পড়তে এবং অনুবাদ করার জন্য নীচের ছবির URL ব্যবহার করতে পারেন: https://storage.googleapis.com/img_public_test/tamilwriting1.jfif
6. পরিষ্কার করুন
এই পোস্টে ব্যবহৃত সংস্থানগুলির জন্য আপনার Google ক্লাউড অ্যাকাউন্টে চার্জ এড়াতে, এই পদক্ষেপগুলি অনুসরণ করুন:
- Google ক্লাউড কনসোলে, সম্পদ পরিচালনা পৃষ্ঠাতে যান
- প্রকল্প তালিকায়, আপনি যে প্রকল্পটি মুছতে চান সেটি নির্বাচন করুন এবং তারপরে মুছুন ক্লিক করুন
- ডায়ালগে, প্রজেক্ট আইডি টাইপ করুন এবং তারপরে প্রোজেক্ট মুছে ফেলতে শাট ডাউন ক্লিক করুন
7. অভিনন্দন
অভিনন্দন! আপনি স্প্রিং বুট এবং জাভা ব্যবহার করে সফলভাবে একটি ভিশন এআই অ্যাপ্লিকেশন তৈরি করেছেন। Vision AI এর শক্তির সাহায্যে, আপনার অ্যাপ্লিকেশন এখন লেবেলিং, মুখ সনাক্তকরণ এবং আরও অনেক কিছু সহ অত্যাধুনিক চিত্র বিশ্লেষণ করতে পারে। স্প্রিং বুটের ইন্টিগ্রেশন স্কেলযোগ্য এবং শক্তিশালী Google ক্লাউড নেটিভ অ্যাপ্লিকেশন তৈরির জন্য একটি শক্ত ভিত্তি প্রদান করে। অতিরিক্ত বৈশিষ্ট্য এবং কার্যকারিতা সহ আপনার অ্যাপ্লিকেশন উন্নত করতে Vision AI, ক্লাউড রান, ক্লাউড ট্রান্সলেশন এবং আরও অনেক কিছুর বিশাল ক্ষমতা অন্বেষণ চালিয়ে যান। আরও জানতে, ভিশন API , ক্লাউড অনুবাদ , এবং GCP স্প্রিং ডক্স দেখুন৷ স্প্রিং নেটিভ বিকল্পের সাথে একই পরীক্ষা করে দেখুন!! এছাড়াও Gen-AI বিশ্বে একটি স্নিক-পিক হিসাবে, মডেল গার্ডেনে এই APIটি কীভাবে দেখায় তা পরীক্ষা করে দেখুন।