1. परिचय
इस कोडलैब में, हम BigQuery में योग की मुद्राओं की इमेज सेव करने और उनका विश्लेषण करने के इस्तेमाल के उदाहरण के बारे में चर्चा करेंगे. साथ ही, सिर्फ़ एसक्यूएल कंस्ट्रक्ट का इस्तेमाल करके और किसी अन्य तरह का कोड इस्तेमाल किए बिना, मुद्राओं को लेबल करने के लिए, BigQuery ML की मदद से क्लासिफ़िकेशन मॉडल लागू करने के बारे में भी चर्चा करेंगे.
BigQuery और BQML
BigQuery, बिना सर्वर वाला मल्टी-क्लाउड डेटा वेयरहाउस है. इसे बाइट से लेकर पेटाबाइट तक बढ़ाया जा सकता है. इसके लिए, किसी भी तरह के ऑपरेशनल ओवरहेड की ज़रूरत नहीं होती. इसलिए, यह मशीन लर्निंग के ट्रेनिंग डेटा को सेव करने के लिए एक बेहतरीन विकल्प है. इसके अलावा, इसमें मौजूद BigQuery Machine Learning ( BQML) और विश्लेषण की सुविधाओं की मदद से, सिर्फ़ एसक्यूएल क्वेरी का इस्तेमाल करके, बिना कोड लिखे अनुमान लगाए जा सकते हैं. साथ ही, फ़ेडरेटेड क्वेरी की मदद से, बाहरी सोर्स से डेटा ऐक्सेस किया जा सकता है. इससे, जटिल ईटीएल पाइपलाइन की ज़रूरत नहीं पड़ती. BigQuery में उपलब्ध सभी सुविधाओं के बारे में ज़्यादा जानने के लिए, BigQuery पेज पर जाएं.
अब तक, हम BigQuery को पूरी तरह से मैनेज किए जाने वाले क्लाउड डेटा वेयरहाउस के तौर पर जानते हैं. इसकी मदद से, उपयोगकर्ता स्ट्रक्चर्ड और सेमी-स्ट्रक्चर्ड डेटा का विश्लेषण कर सकते हैं. हालांकि,
- BigQuery को अब अनस्ट्रक्चर्ड डेटा पर भी सभी तरह के विश्लेषण और मशीन लर्निंग के लिए इस्तेमाल किया जा सकता है
- हम एसक्यूएल क्वेरी का इस्तेमाल करके, इमेज, वीडियो, ऑडियो वगैरह का बड़े पैमाने पर अहम जानकारी पाने के लिए विश्लेषण, डेटा विश्लेषण, और मशीन लर्निंग कर सकते हैं. इसके लिए, हमें कोई अतिरिक्त कोड लिखने की ज़रूरत नहीं होती
- हमारे पास स्ट्रक्चर्ड और अनस्ट्रक्चर्ड डेटा को एक साथ मिलाकर इस्तेमाल करने की सुविधा है. इससे ऐसा लगता है कि दोनों तरह का डेटा, एक ही टेबल में मौजूद है
हम योग की मुद्राओं के क्लासिफ़िकेशन के इस्तेमाल के उदाहरण में इन सुविधाओं के बारे में चर्चा करेंगे. यह उदाहरण, अगले सेक्शन में शामिल है.
BigQuery ML की मदद से, इमेज के डेटा का क्लासिफ़िकेशन
स्ट्रक्चर्ड क्वेरी का इस्तेमाल करके, इमेज को प्रोसेस और उनका विश्लेषण करना, अपने-आप में एक नई सुविधा है. इससे ऐसा लगता है कि इमेज, स्ट्रक्चर्ड डेटा हैं. अब हम BigQuery ML का इस्तेमाल करके, मशीन लर्निंग के क्लासिफ़िकेशन मॉडल की मदद से नतीजों का अनुमान भी लगा सकते हैं. मैंने इसे आसानी से समझने के लिए, इसमें शामिल चरणों को पांच चरणों में बांटा है:

अगर हम ऊपर दिए गए चरणों को सिर्फ़ लेबल के तौर पर देखें, तो ये जटिल हो सकते हैं. इनमें शामिल हर कॉम्पोनेंट की जानकारी, जैसे कि BigQuery डेटासेट, Apache Iceberg कनेक्शन के लिए Lakehouse, Cloud Storage बकेट (कंटेनर), ऑब्जेक्ट टेबल (बाहरी डेटा सोर्स), BQML वगैरह, लागू करने के सेक्शन में दी गई है. इसलिए, अगर आपको इन शब्दों के बारे में अब तक जानकारी नहीं है, तो परेशान न हों.
आप क्या बनाएंगे
आप BQML की मदद से, इमेज के डेटा के क्लासिफ़िकेशन का मॉडल बनाएंगे. इसमें ये चीज़ें शामिल होंगी:
- टेबल और मॉडल कॉम्पोनेंट शामिल करने के लिए, एक BigQuery डेटासेट
- मॉडल के लिए योग की इमेज सेव करने के लिए, Google Cloud Storage (GCS) बकेट
- Cloud Storage में मौजूद इमेज ऐक्सेस करने के लिए, एक बाहरी टेबल
- जीसीएस में मौजूद इमेज ऐक्सेस करने के लिए, बाहरी टेबल के लिए एक Lakehouse कनेक्शन
- BigQuery ML में ResNet मॉडल
- बनाए गए मॉडल का इस्तेमाल करके अनुमान लगाना
- इमेज के डेटा का विश्लेषण करने के लिए, BigQuery SQL
- स्ट्रक्चर्ड और अनस्ट्रक्चर्ड डेटा की एक साथ क्वेरी करने के लिए, BigQuery SQL
आपको क्या सीखने को मिलेगा
- Cloud Storage बकेट बनाने और उसमें इमेज सेव करने का तरीका
- BigQuery डेटासेट, टेबल, और कनेक्शन बनाने का तरीका
- BQML का इस्तेमाल करके, इमेज के डेटा के क्लासिफ़िकेशन का मॉडल बनाने का तरीका
- BigQuery ML का इस्तेमाल करके, बनाए गए मॉडल से अनुमान लगाने का तरीका
- BigQuery SQL का इस्तेमाल करके, इमेज की क्वेरी करने और उन्हें स्ट्रक्चर्ड डेटा के साथ मिलाने का तरीका
2. ज़रूरी शर्तें
- Firefox
- बिलिंग की सुविधा चालू वाला Google Cloud प्रोजेक्ट. इसमें BigQuery, Cloud Storage, और Lakehouse Connection की सेवाएं शामिल हों
- अगले सेक्शन में, इमेज के डेटा के क्लासिफ़िकेशन का ऐप्लिकेशन बनाने के चरणों की सूची दी गई है
3. डेटासेट और Lakehouse कनेक्शन बनाना
योग की पांच मुद्राओं की इमेज का पता लगाने के इस्तेमाल के उदाहरण के लिए, मैंने सार्वजनिक तौर पर उपलब्ध डेटासेट का इस्तेमाल किया है. इस डेटासेट को इस रेपो से ऐक्सेस किया जा सकता है. हम योग की सिर्फ़ इन मुद्राओं की पहचान कर रहे हैं: डाउनडॉग, गॉडेस, प्लैंक, ट्री, और वॉरियर2. BigQuery डेटासेट बनाना शुरू करने से पहले, पक्का करें कि आपने कोई Google Cloud प्रोजेक्ट चुना हो या बनाया हो. साथ ही, यह भी देखें कि प्रोजेक्ट में बिलिंग की सुविधा चालू है या नहीं. BigQuery API और BigQuery Connection API को चालू करें. कृपया ध्यान दें कि इस सेटअप में इस्तेमाल की जाने वाली सभी सेवाएं, चुने गए एक ही इलाके में होनी चाहिए.
a. नीचे दिए गए चरणों का इस्तेमाल करके, "yoga_set" डेटासेट बनाएं:
BigQuery एडिटर पर जाएं और यह कमांड टाइप करें:
CREATE SCHEMA `<<project_id>>.yoga_set`;
b. Lakehouse Connection की मदद से, बाहरी डेटा सोर्स को कनेक्ट किया जा सकता है. साथ ही, BigQuery के फ़ाइन-ग्रेन्ड ऐक्सेस कंट्रोल और सुरक्षा को बनाए रखा जा सकता है. हमारे मामले में, यह इमेज के डेटा के लिए Cloud Storage है. हम Cloud Storage से ऑब्जेक्ट पढ़ने के लिए, इस कनेक्शन का इस्तेमाल करेंगे. Lakehouse Connection बनाने के लिए, नीचे दिया गया तरीका अपनाएं.
BigQuery पेज के एक्सप्लोरर पैनल पर, डेटा जोड़ें पर क्लिक करें:
BigQuery की "बाहरी डेटा जोड़ें" स्क्रीन
बाहरी डेटा सोर्स से कनेक्शन पर क्लिक करें. इसके बाद, Lakehouse और रिमोट फ़ंक्शन का विकल्प चुनें:
बाहरी डेटा सोर्स कनेक्शन कॉन्फ़िगर करना
कनेक्शन आईडी डालें और कनेक्शन बनाएं. कनेक्शन बनने के बाद, स्क्रीन पर दिखने वाले सेवा खाते के आईडी <<SERVICE_ACCOUNT>> को नोट करना न भूलें. हमारे उदाहरण में, कनेक्शन आईडी "yoga-pose-conn" है. इलाके को नोट करना न भूलें.
4. Google Cloud Storage बकेट बनाना और अनुमतियां देना
हम Google Cloud Storage बकेट का इस्तेमाल करके, योग की मुद्राओं की इमेज वाली फ़ाइलें सेव करेंगे. इन फ़ाइलों के लिए हमें मॉडल बनाना है. बकेट, Cloud Storage कंटेनर होते हैं. इनमें उन इमेज को सेव किया जाता है जिनका हमें विश्लेषण करना है.
a. Google Cloud Storage पर जाएं. इसके लिए, कंसोल में इसे खोजें. इसके बाद, बकेट के होम पेज पर जाने के लिए, बकेट पर क्लिक करें. फिर, बनाएं पर क्लिक करें
Google Cloud Storage बकेट का पेज
b. बकेट बनाएं पेज पर, बकेट की जानकारी (कोई यूनीक नाम) डालें और जारी रखें. पक्का करें कि यह उसी इलाके में हो जिसमें डेटासेट और कनेक्शन है. इसके बारे में ऊपर दिए गए चरणों में बताया गया है. इसके बाद, बनाएं पर क्लिक करें
Google Cloud Storage बकेट बनाने का पेज
अगले चरण पर जाने से पहले, पक्का करें कि आपने सेवा खाते, बकेट के नाम, और पाथ को नोट कर लिया हो.
c. बकेट बनने के बाद, अपनी इमेज सेव करें. इसके लिए, कंसोल या Cloud Shell के कमांड या प्रोग्राम के ज़रिए इमेज सेव करें. साथ ही, कनेक्शन के सेवा खाते (जिसे हमने पहले सेव किया था) को इमेज ऐक्सेस करने के लिए ज़रूरी अनुमतियां दें
> export sa=<<"SERVICE_ACCOUNT">>
> gsutil iam ch serviceAccount:$sa:objectViewer "gs://<<bucket>>"
5. ऑब्जेक्ट टेबल बनाना
बनाए गए कनेक्शन का इस्तेमाल करके, बकेट में मौजूद अनस्ट्रक्चर्ड डेटा को ऐक्सेस करने के लिए, BigQuery से एक बाहरी ऑब्जेक्ट टेबल बनाएं. BigQuery एडिटर से, नीचे दिया गया CREATE SQL चलाएं:
CREATE OR REPLACE EXTERNAL TABLE `<<dataset>>.<<table_name>>`
WITH CONNECTION `us.<<connection-name>>`
OPTIONS(
object_metadata="SIMPLE", uris=["gs://<<bucket>>/<<folder_if_exists>>/*.jpg"]);
बाहरी टेबल, यहां दिखाए गए तरीके से बनाई जाती है:

आइए, नई बनाई गई बाहरी टेबल से किसी मुद्रा की क्वेरी करें:
SELECT data , uri
FROM `yoga_set.yoga_poses`
WHERE REGEXP_CONTAINS(uri, 'gs://yoga_images/Downdog')
Limit 1;
जैसा कि नीचे दिए गए स्क्रीनशॉट में दिख रहा है, अनस्ट्रक्चर्ड इमेज को बनाया और उन पर काम किया जा सकता है. इससे ऐसा लगता है कि वे स्ट्रक्चर्ड डेटा हैं:

अब क्वेरी के नतीजे को विज़ुअलाइज़ करने के लिए, उसे Python के एक छोटे स्निपेट में एक्सपोर्ट करें:
नतीजा एक्सपोर्ट करने के लिए, नतीजे सेव करें पर क्लिक करें और "CSV Localfile" विकल्प चुनें. इसके बाद, अपना Colab नोटबुक खोलें (या एक नोटबुक बनाएं) और नीचे दिया गया कोड टाइप करें
from IPython.display import display
from PIL import Image
import io
import pandas as pd
import base64
df = pd.read_csv('/content/sample_data/<<your_csv>>')
imgdata = base64.b64decode(str(df.data[0]))
image = Image.open(io.BytesIO(imgdata))
display(image)
नतीजा देखने के लिए, इसे एक्ज़ीक्यूट करें:

अब हमने बाहरी टेबल बना ली है और सिर्फ़ एसक्यूएल क्वेरी का इस्तेमाल करके, Cloud Storage से इमेज ऐक्सेस कर ली हैं. अब हम अगले सेक्शन पर चलते हैं. इसमें क्लासिफ़िकेशन मॉडल बनाना है.
6. मॉडल बनाना और उसे Google Cloud Storage पर अपलोड करना
इस सेटअप के लिए, हम पहले से ट्रेन किए गए ResNet 50 मॉडल का इस्तेमाल करके, अभी बनाई गई ऑब्जेक्ट टेबल पर अनुमान लगाएंगे. ResNet 50 मॉडल, इमेज फ़ाइलों का विश्लेषण करता है और वेक्टर का एक बैच आउटपुट करता है. इससे यह पता चलता है कि किसी इमेज के, उससे जुड़े क्लास (लॉजिट) से संबंधित होने की कितनी संभावना है.
इस चरण पर जाने से पहले, पक्का करें कि आपके पास सभी ज़रूरी अनुमतियां हों. इसके बाद, यह तरीका अपनाएं:
- मॉडल को इस जगह से डाउनलोड करें और इसे अपने लोकल में सेव करें
- इसे saved_model.pb और वैरिएबल फ़ोल्डर में अनपैक किया जाना चाहिए
- इन दोनों (फ़ाइल और फ़ोल्डर) को उस बकेट में अपलोड करें जिसे हमने पिछले सेक्शन में बनाया था
ResNet मॉडल की फ़ाइलों के साथ, Google Cloud Storage बकेट "yoga_images" अपलोड की गई
यह चरण पूरा होने के बाद, मॉडल से जुड़ी फ़ाइलें उसी बकेट में मौजूद होनी चाहिए जिसमें आपकी इमेज हैं. जैसा कि ऊपर दी गई इमेज में दिख रहा है.
7. मॉडल को BQML में लोड करना और अनुमान लगाना
इस चरण में, हम मॉडल को उसी BigQuery डेटासेट में लोड करेंगे जिसमें हमने पहले बाहरी टेबल बनाई थी. साथ ही, इसे Cloud Storage में सेव की गई इमेज के लिए लागू करेंगे.
a. BigQuery एडिटर से, यह एसक्यूएल स्टेटमेंट चलाएं
CREATE MODEL `<<Dataset>>.<<Model_Name>>`
OPTIONS(
model_type = 'TENSORFLOW',
model_path = 'gs://<<Bucket>>/*');
एक्ज़ीक्यूशन पूरा होने के बाद (इसमें आपके डेटासेट के हिसाब से कुछ समय लग सकता है), आपको BigQuery में अपने डेटासेट सेक्शन में मॉडल दिखेगा.
BigQuery डेटासेट में बनाया गया मॉडल दिख रहा है
b. मॉडल के इनपुट और आउटपुट फ़ील्ड देखने के लिए, उसकी जांच करें.
डेटासेट को बड़ा करें और "yoga_poses_resnet" मॉडल पर क्लिक करें. यह मॉडल हमने अभी बनाया है. स्कीमा टैब पर क्लिक करें:
BigQuery मॉडल की परिभाषा का स्कीमा टैब
लेबल सेक्शन में, आपको "activation_49" फ़ील्ड दिखेगा. यह आउटपुट फ़ील्ड को दिखाता है. सुविधाएं सेक्शन में, आपको "input_1" दिखेगा. यह उस फ़ील्ड को दिखाता है जिसे मॉडल में इनपुट के तौर पर इस्तेमाल किया जाना है. अनुमान लगाने की क्वेरी (या अनुमान लगाने की क्वेरी) में, "input_1" को उस फ़ील्ड के तौर पर रेफ़र किया जाएगा जिसे "टेस्ट" डेटा के लिए पास किया जा रहा है.
c. योग की मुद्रा का अनुमान लगाएं!
टेस्ट इमेज के डेटा को क्लासिफ़ाई करने के लिए, अभी बनाए गए मॉडल का इस्तेमाल करें. पक्का करें कि आपके पास कुछ टेस्ट इमेज (योग की मुद्राएं) हों. इनकी पहचान, Cloud Storage बकेट से की गई हो. जब हमने बाहरी टेबल बनाई थी, तब ये इमेज उसमें शामिल हो गई थीं. हम BigQuery में उन टेस्ट इमेज के लिए चुनिंदा तौर पर क्वेरी करेंगे, ताकि अभी बनाए गए BQML मॉडल का इस्तेमाल करके अनुमान लगाया जा सके. टेस्ट शुरू करने के लिए, नीचे दी गई क्वेरी का इस्तेमाल करें.
SELECT *
FROM ML.PREDICT(
MODEL yoga_set.yoga_poses_resnet,
(SELECT uri, ML.DECODE_IMAGE(data) AS input_1
FROM yoga_set.yoga_poses where REGEXP_CONTAINS(uri,
'gs://yoga_images/Downdog/00000097.jpg')));
ऊपर दी गई क्वेरी में, हम एक टेस्ट इमेज चुनते हैं. इसकी पहचान, बाहरी टेबल में किसी खास यूआरआई वैल्यू (00000097.jpg) के तौर पर की जाती है. साथ ही, SELECT वाले हिस्से में, ML.PREDICT फ़ंक्शन के काम करने के लिए, फ़ील्ड "input_1" के तौर पर ML.DECODE_IMAGE कंस्ट्रक्ट का इस्तेमाल किया जाता है.
एक्ज़ीक्यूशन पूरा होने के बाद, आपको नतीजा यहां दिखाए गए तरीके से दिखेगा:

अब जो लोग ResNet मॉडल के बारे में पूरी जानकारी रखते हैं, उन्हें क्लासिफ़िकेशन को समझने में मदद मिलेगी. अन्य लोगों के लिए, क्लासिफ़िकेशन को विज़ुअली समझने के लिए, एक छोटा स्निपेट कोड करें.
d. नतीजे को फ़्लैट करना
ऊपर दिए गए आउटपुट को विज़ुअलाइज़ करने का एक तरीका यह है कि BigQuery SQL के UNNEST कंस्ट्रक्ट का इस्तेमाल करके, activation_49 फ़ील्ड की वैल्यू को फ़्लैट किया जाए. पिछले चरण से मिले नतीजे को फ़्लैट करने के लिए, कृपया नीचे दी गई क्वेरी देखें. अगर आपको नतीजे में मिले क्लास को टेक्स्ट के तौर पर लेबल करना है, तो क्वेरी में प्लेसहोल्डर <<LABEL_LOGIC>> की जगह लॉजिक जोड़ा जा सकता है. इसका इस्तेमाल करते समय, टिप्पणी को कोड में बदलें.
with predictions as (
SELECT
Uri, data, SPLIT(uri, "/")[OFFSET(ARRAY_LENGTH(SPLIT(uri, "/")) - 1)] as img,
i as label_i,
<<LABEL_LOGIC>> label,
Score
FROM ML.PREDICT(
MODEL yoga_set.yoga_poses_resnet,
(SELECT data, uri, ML.DECODE_IMAGE(data) AS input_1
FROM yoga_set.yoga_poses
WHERE
REGEXP_CONTAINS(uri,'gs://yoga_images/Goddess/00000007.jpg'))),
UNNEST(activation_49) as score WITH OFFSET i)
SELECT * FROM predictions
ORDER BY score DESC
LIMIT 5;
क्लास लेबलिंग लॉजिक के बिना, क्वेरी का आउटपुट यहां दिया गया है:

हालांकि, मैंने एक सैंपल लॉजिक लागू किया है और नतीजा यहां दिया गया है:

मॉडल के बारे में ज़्यादा पढ़ा जा सकता है. साथ ही, वह लॉजिक लागू किया जा सकता है जो आपके डेटा और मॉडल के आउटपुट के साथ सबसे अच्छा काम करता है.
e. अनुमान को विज़ुअलाइज़ करना
आखिर में, क्लासिफ़िकेशन से मिले नतीजे को विज़ुअलाइज़ करने के लिए, Python का एक छोटा स्निपेट! ऊपर दी गई क्वेरी के नतीजे को CSV फ़ाइल में एक्सपोर्ट करें और Python कोड में इसे रेफ़र करें.

ऊपर दी गई इमेज का आउटपुट, योग की मुद्रा "डाउनवर्ड डॉग" को दिखाता है. यह वही टेस्ट इनपुट है जिसे हमने BQML का इस्तेमाल करके क्लासिफ़िकेशन के लिए, ML.PREDICT क्वेरी में पास किया था!
8. स्ट्रक्चर्ड और अनस्ट्रक्चर्ड डेटा को एक साथ इस्तेमाल करना
आखिर में, इस सेटअप का मेरा पसंदीदा हिस्सा यह है कि स्ट्रक्चर्ड रिलेशनल टेबल के फ़ील्ड को, अनस्ट्रक्चर्ड इमेज डेटा के साथ एक साथ इस्तेमाल किया जाए. मैंने बाहरी टेबल वाले डेटासेट में ही, एक स्ट्रक्चर्ड BigQuery टेबल बनाई है. इसमें मुद्रा और उससे जुड़ी सेहत का डेटा सेव किया जाता है.
BigQuery स्ट्रक्चर्ड टेबल "yoga_health" का स्कीमा
ऊपर दी गई इमेज में, "yoga_health" नाम की स्ट्रक्चर्ड डेटा टेबल का स्कीमा दिखाया गया है. इसके फ़ील्ड हैं: pose, focus, health_benefit, और breath. नीचे दी गई क्वेरी में, स्ट्रक्चर्ड और अनस्ट्रक्चर्ड, दोनों तरह के डेटा को एक साथ इस्तेमाल किया गया है:
SELECT SPLIT(uri, "/")[OFFSET(ARRAY_LENGTH(SPLIT(uri, "/")) - 2)] as pose,
a.health_benefit, breath, focus, data
FROM `abis-345004.yoga_set.yoga_health` a, yoga_set.yoga_poses b
WHERE a.pose = SPLIT(uri, "/")[OFFSET(ARRAY_LENGTH(SPLIT(uri, "/")) - 2)];
यहां नतीजा दिया गया है:

ध्यान दें: इस ब्लॉग में शामिल सभी क्वेरी को, BigQuery मैजिक कमांड का इस्तेमाल करके, Python नोटबुक से सीधे तौर पर चलाया जा सकता है.
9. स्टोरेज में जगह बनाएं
इस पोस्ट में इस्तेमाल किए गए संसाधनों के लिए, अपने Google Cloud खाते पर शुल्क लगने से बचने के लिए, यह तरीका अपनाएं.
- Google Cloud Console में, संसाधन मैनेज करें पेज पर जाएं
- प्रोजेक्ट की सूची में, वह प्रोजेक्ट चुनें जिसे मिटाना है. इसके बाद, मिटाएं पर क्लिक करें
- डायलॉग में, प्रोजेक्ट आईडी डालें. इसके बाद, प्रोजेक्ट मिटाने के लिए, शट डाउन करें पर क्लिक करें
10. बधाई हो
बधाई हो! आपने BigQuery में अनस्ट्रक्चर्ड डेटा को सेव किया है और उसकी क्वेरी की है. साथ ही, BQML का इस्तेमाल करके, क्लासिफ़िकेशन मॉडल बनाया है. इसके अलावा, मॉडल की मदद से, योग की मुद्राओं के टेस्ट के लिए अनुमान लगाया है. अगर आपको इसे लागू करना है, तो अपने Google Cloud प्रोजेक्ट का इस्तेमाल शुरू करें. इसके अलावा, अगर आपको डेटाबेस या Google Cloud में एंड-टू-एंड ऐप्लिकेशन लागू करने के बारे में ज़्यादा जानना है, तो कृपया मेरे ब्लॉग पर जाएं.