การเริ่มต้นใช้งานการแยกประเภทรูปภาพโดยใช้ Vertex AI และ BigQuery

คู่มือนี้จะแสดงเวิร์กโฟลว์แบบต้นทางถึงปลายทางที่สมบูรณ์สำหรับการฝึกโมเดลและ การจัดประเภทชิ้นงานรูปภาพโดยใช้แพลตฟอร์ม Vertex AI ของ Google Cloud ด้วย Gemini 2.5 Flash คุณจะได้เรียนรู้วิธีผสานรวม BigQuery เพื่อดึงข้อมูล, Cloud Storage เพื่อการจัดการชิ้นงาน และ Vertex AI เพื่อการอนุมานแมชชีนเลิร์นนิงในสภาพแวดล้อม Python Colab

การกำหนดค่า

ตั้งค่าตัวแปรเฉพาะโปรเจ็กต์ต่อไปนี้ก่อนเรียกใช้ตัวอย่างโค้ด

PROJECT_ID = "PROJECT_ID"
REGION = "REGION "  # e.g., "us-central1"
LOCATION = "LOCATION "  # e.g., "us"
CUSTOMER_ID = "CUSTOMER_ID" # required to subscribe to the dataset

การตั้งค่าสภาพแวดล้อม

ติดตั้งทรัพยากร Dependency ที่จำเป็นและกำหนดค่าการตรวจสอบสิทธิ์เพื่อเข้าถึงบริการของ Google Cloud

# Install Google Cloud SDK dependencies for AI Platform integration
!pip install google-cloud-aiplatform google-cloud-storage google-cloud-bigquery google-cloud-bigquery-data-exchange -q

# Import core libraries for cloud services and machine learning operations
import json
import os
from google.cloud import bigquery
import vertexai
from vertexai.generative_models import GenerativeModel, Part

# Configure authentication for Google Cloud service access
# Initiates OAuth flow in new browser tab if authentication required
from google.colab import auth

if os.environ.get("VERTEX_PRODUCT") != "COLAB_ENTERPRISE":
  from google.colab import auth
  auth.authenticate_user(project_id=PROJECT_ID)

# Initialize Vertex AI client with project configuration
vertexai.init(project=PROJECT_ID, location=REGION)

print(f"Vertex AI initialized for project: {PROJECT_ID} in region: {REGION}")

สมัครใช้ชุดข้อมูล Analytics Hub

นอกจากนี้ คุณต้องสมัครใช้ชุดข้อมูล Analytics Hub ด้วย

from google.cloud import bigquery_data_exchange_v1beta1

ah_client = bigquery_data_exchange_v1beta1.AnalyticsHubServiceClient()

HUB_PROJECT_ID = 'maps-platform-analytics-hub'
DATA_EXCHANGE_ID = f"imagery_insights_exchange_{LOCATION}"
LINKED_DATASET_NAME = f"imagery_insights___preview___{LOCATION}"


# subscribe to the listing (create a linked dataset in your consumer project)
destination_dataset = bigquery_data_exchange_v1beta1.DestinationDataset()
destination_dataset.dataset_reference.dataset_id = LINKED_DATASET_NAME
destination_dataset.dataset_reference.project_id = PROJECT_ID
destination_dataset.location = LOCATION
LISTING_ID=f"imagery_insights_{CUSTOMER_ID.replace('-', '_')}__{LOCATION}"

published_listing = f"projects/{HUB_PROJECT_ID}/locations/{LOCATION}/dataExchanges/{DATA_EXCHANGE_ID}/listings/{LISTING_ID}"

request = bigquery_data_exchange_v1beta1.SubscribeListingRequest(
    destination_dataset=destination_dataset,
    name=published_listing,
)

# request the subscription
ah_client.subscribe_listing(request=request)

การดึงข้อมูลด้วย BigQuery

เรียกใช้การค้นหา BigQuery เพื่อดึง URI ของ Google Cloud Storage จากตาราง latest_observations ระบบจะส่ง URI เหล่านี้ไปยังโมเดล Vertex AI โดยตรงเพื่อทำการแยกประเภท

# Initialize BigQuery client
bigquery_client = bigquery.Client(project=PROJECT_ID)

# Define SQL query to retrieve observation records from imagery dataset
query = f"""
SELECT
 *
FROM
 `{PROJECT_ID}.imagery_insights___preview___{LOCATION}.latest_observations`
LIMIT 10;
"""

print(f"Executing BigQuery query:\n{query}")

# Submit query job to BigQuery service and await completion
query_job = bigquery_client.query(query)

# Transform query results into structured data format for downstream processing
# Convert BigQuery Row objects to dictionary representations for enhanced accessibility
query_response_data = []
for row in query_job:
   query_response_data.append(dict(row))

# Extract Cloud Storage URIs from result set, filtering null values
gcs_uris = [item.get("gcs_uri") for item in query_response_data if item.get("gcs_uri")]

print(f"BigQuery query returned {len(query_response_data)} records.")
print(f"Extracted {len(gcs_uris)} GCS URIs:")
for uri in gcs_uris:
   print(uri)

ฟังก์ชันการจัดประเภทรูปภาพ

ฟังก์ชันตัวช่วยนี้จะจัดการการจัดประเภทรูปภาพโดยใช้โมเดล Gemini 2.5 Flash ของ Vertex AI

def classify_image_with_gemini(gcs_uri: str, prompt: str = "What is in this image?") -> str:
   """
   Performs multimodal image classification using Vertex AI's Gemini 2.5 Flash model.

   Leverages direct Cloud Storage integration to process image assets without local
   download requirements, enabling scalable batch processing workflows.

   Args:
       gcs_uri (str): Fully qualified Google Cloud Storage URI 
                     (format: gs://bucket-name/path/to/image.jpg)
       prompt (str): Natural language instruction for classification task execution

   Returns:
       str: Generated textual description from the generative model, or error message
            if classification pipeline fails

   Raises:
       Exception: Captures service-level errors and returns structured failure response
   """
   try:
       # Instantiate Gemini 2.5 Flash model for inference operations
       model = GenerativeModel("gemini-2.5-flash")

       # Construct multimodal Part object from Cloud Storage reference
       # Note: MIME type may need dynamic inference for mixed image formats
       image_part = Part.from_uri(uri=gcs_uri, mime_type="image/jpeg")

       # Execute multimodal inference request with combined visual and textual inputs
       responses = model.generate_content([image_part, prompt])
       return responses.text
   except Exception as e:
       print(f"Error classifying image from URI {gcs_uri}: {e}")
       return "Classification failed."

การจัดประเภทรูปภาพแบบเป็นชุด

ประมวลผล URI ที่ดึงข้อมูลทั้งหมดและสร้างการจัดประเภท

classification_results = []

# Execute batch classification pipeline across all extracted GCS URIs
for uri in gcs_uris:
   print(f"\nProcessing: {uri}")

   # Define comprehensive classification prompt for detailed feature extraction
   classification_prompt = "Describe this image in detail, focusing on any objects, signs, or features visible."

   # Invoke Gemini model for multimodal inference on current asset
   result = classify_image_with_gemini(uri, classification_prompt)

   # Aggregate structured results for downstream analytics and reporting
   classification_results.append({"gcs_uri": uri, "classification": result})

   print(f"Classification for {uri}:\n{result}")

ขั้นตอนถัดไป

เมื่อจัดหมวดหมู่รูปภาพแล้ว ให้พิจารณาลำดับงานขั้นสูงต่อไปนี้

  • การปรับแต่งโมเดล: ใช้ผลลัพธ์การแยกประเภทเพื่อฝึกโมเดลที่กำหนดเอง
  • การประมวลผลอัตโนมัติ: ตั้งค่า Cloud Functions เพื่อจัดหมวดหมู่รูปภาพใหม่โดยอัตโนมัติ
  • การวิเคราะห์ข้อมูล: ทำการวิเคราะห์ทางสถิติเกี่ยวกับรูปแบบการจัดประเภท
  • การผสานรวม: เชื่อมต่อผลลัพธ์กับแอปพลิเคชันดาวน์สตรีม

การแก้ปัญหา

ปัญหาที่พบบ่อยและวิธีแก้ไข

  • ข้อผิดพลาดในการตรวจสอบสิทธิ์: ตรวจสอบว่ามีบทบาท IAM ที่เหมาะสมและเปิดใช้ API แล้ว
  • การจำกัดอัตรา: ใช้ Exponential Backoff สำหรับกลุ่มขนาดใหญ่
  • ข้อจำกัดด้านหน่วยความจำ: ประมวลผลรูปภาพเป็นชุดเล็กๆ สำหรับชุดข้อมูลขนาดใหญ่
  • ข้อผิดพลาดเกี่ยวกับรูปแบบ URI: ตรวจสอบว่า URI ของ GCS เป็นไปตามรูปแบบ gs://bucket-name/path/to/image

โปรดดูข้อมูลเพิ่มเติมในเอกสารประกอบของ Vertex AI และเอกสารประกอบของ BigQuery