Analise dados multimodais em Python com os DataFrames do BigQuery

Este tutorial mostra como analisar dados multimodais num notebook Python através das classes e dos métodos BigQuery DataFrames.

Este tutorial usa o catálogo de produtos do conjunto de dados público da loja de animais Cymbal.

Para carregar um bloco de notas já preenchido com as tarefas abordadas neste tutorial, consulte BigFrames Multimodal DataFrame.

Objetivos

  • Crie DataFrames multimodais.
  • Combine dados estruturados e não estruturados num DataFrame.
  • Transformar imagens.
  • Gerar texto e incorporações com base em dados de imagens.
  • Dividir PDFs em partes para análise mais detalhada.

Custos

Neste documento, usa os seguintes componentes faturáveis do Trusted Cloud by S3NS:

  • BigQuery: you incur costs for the data that you process in BigQuery.
  • BigQuery Python UDFs: you incur costs for using BigQuery DataFrames image transformation and chunk PDF methods.
  • Cloud Storage: you incur costs for the objects stored in Cloud Storage.
  • Vertex AI: you incur costs for calls to Vertex AI models.

Para mais informações, consulte as seguintes páginas de preços:

Antes de começar

  1. In the Trusted Cloud console, on the project selector page, select or create a Trusted Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Trusted Cloud project.

  3. Enable the BigQuery, BigQuery Connection, Cloud Storage, and Vertex AI APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

Funções necessárias

Para receber as autorizações de que precisa para concluir este tutorial, peça ao seu administrador que lhe conceda as seguintes funções do IAM:

Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.

Configurar

Nesta secção, cria o contentor do Cloud Storage, a ligação e o bloco de notas usados neste tutorial.

Crie um contentor

Crie um contentor do Cloud Storage para armazenar objetos transformados:

  1. Na Trusted Cloud consola, aceda à página Recipientes.

    Aceda a Recipientes

  2. Clique em Criar.

  3. Na página Criar um contentor, na secção Começar, introduza um nome globalmente exclusivo que cumpra os requisitos do nome do contentor.

  4. Clique em Criar.

Crie uma associação

Crie uma associação de recursos do Google Cloud e obtenha a conta de serviço da associação. O BigQuery usa a ligação para aceder a objetos no Cloud Storage.

  1. Aceda à página do BigQuery.

    Aceda ao BigQuery

  2. No painel Explorador, clique em Adicionar dados.

    É apresentada a caixa de diálogo Adicionar dados.

  3. No painel Filtrar por, na secção Tipo de origem de dados, selecione Aplicações empresariais.

    Em alternativa, no campo Pesquisar origens de dados, pode introduzir Vertex AI.

  4. Na secção Origens de dados em destaque, clique em Vertex AI.

  5. Clique no cartão da solução Modelos da Vertex AI: federação do BigQuery.

  6. Na lista Tipo de ligação, selecione Modelos remotos, funções remotas e BigLake (recurso da nuvem) da Vertex AI.

  7. No campo ID de associação, escreva bigframes-default-connection.

  8. Clique em Criar associação.

  9. Clique em Aceder à associação.

  10. No painel Informações de associação, copie o ID da conta de serviço para utilização num passo posterior.

Conceda autorizações à conta de serviço da associação

Conceda à conta de serviço da ligação as funções de que precisa para aceder ao Cloud Storage e ao Vertex AI. Tem de conceder estas funções no mesmo projeto que criou ou selecionou na secção Antes de começar.

Para conceder a função, siga estes passos:

  1. Aceda à página IAM e administrador.

    Aceda a IAM e administração

  2. Clique em Conceder acesso.

  3. No campo Novos membros, introduza o ID da conta de serviço que copiou anteriormente.

  4. No campo Selecionar uma função, escolha Cloud Storage e, de seguida, selecione Utilizador de objetos de armazenamento.

  5. Clique em Adicionar outra função.

  6. No campo Selecionar uma função, selecione Vertex AI e, de seguida, selecione Utilizador da Vertex AI.

  7. Clique em Guardar.

Crie um notebook

Crie um notebook onde pode executar código Python:

  1. Aceda à página do BigQuery.

    Aceda ao BigQuery

  2. Na barra de separadores do painel do editor, clique na seta de menu pendente junto a Consulta SQL e, de seguida, clique em Bloco de notas.

  3. No painel Comece a partir de um modelo, clique em Fechar.

  4. Clique em Ligar > Ligar a um tempo de execução.

  5. Se tiver um tempo de execução existente, aceite as predefinições e clique em Associar. Se não tiver um tempo de execução existente, selecione Criar novo tempo de execução e, de seguida, clique em Associar.

    A configuração do tempo de execução pode demorar vários minutos.

Crie um DataFrame multimodal

Crie um DataFrame multimodal que integre dados estruturados e não estruturados através do método from_glob_path da classe Session:

  1. No bloco de notas, crie uma célula de código e copie o seguinte código para a mesma:
    import bigframes
    
    # Flags to control preview image/video preview size
    bigframes.options.display.blob_display_width = 300
    
    import bigframes.pandas as bpd
    
    # Create blob columns from wildcard path.
    df_image = bpd.from_glob_path(
        "gs://cloud-samples-data/bigquery/tutorials/cymbal-pets/images/*", name="image"
    )
    # Other ways are: from string uri column
    # df = bpd.DataFrame({"uri": ["gs://<my_bucket>/<my_file_0>", "gs://<my_bucket>/<my_file_1>"]})
    # df["blob_col"] = df["uri"].str.to_blob()
    
    # From an existing object table
    # df = bpd.read_gbq_object_table("<my_object_table>", name="blob_col")
    
    # Take only the 5 images to deal with. Preview the content of the Mutimodal DataFrame
    df_image = df_image.head(5)
    df_image
  2. Clique em Executar.

    A chamada final para df_image devolve as imagens que foram adicionadas ao DataFrame. Em alternativa, pode chamar o método .display.

Combine dados estruturados e não estruturados no DataFrame

Combine dados de texto e imagens no DataFrame multimodal:

  1. No bloco de notas, crie uma célula de código e copie o seguinte código para a mesma:
    # Combine unstructured data with structured data
    df_image["author"] = ["alice", "bob", "bob", "alice", "bob"]  # type: ignore
    df_image["content_type"] = df_image["image"].blob.content_type()
    df_image["size"] = df_image["image"].blob.size()
    df_image["updated"] = df_image["image"].blob.updated()
    df_image
  2. Clique em Executar .

    O código devolve os dados do DataFrame.

  3. No bloco de notas, crie uma célula de código e copie o seguinte código para a mesma:

    # Filter images and display, you can also display audio and video types. Use width/height parameters to constrain window sizes.
    df_image[df_image["author"] == "alice"]["image"].blob.display()
  4. Clique em Executar .

    O código devolve imagens do DataFrame onde o valor da coluna author é alice.

Realize transformações de imagens

Transforme dados de imagens através dos seguintes métodos da classe Series.BlobAccessor:

As imagens transformadas são escritas no Cloud Storage.

Transformar imagens:

  1. No bloco de notas, crie uma célula de código e copie o seguinte código para a mesma:
    df_image["blurred"] = df_image["image"].blob.image_blur(
        (20, 20), dst=f"{dst_bucket}/image_blur_transformed/", engine="opencv"
    )
    df_image["resized"] = df_image["image"].blob.image_resize(
        (300, 200), dst=f"{dst_bucket}/image_resize_transformed/", engine="opencv"
    )
    df_image["normalized"] = df_image["image"].blob.image_normalize(
        alpha=50.0,
        beta=150.0,
        norm_type="minmax",
        dst=f"{dst_bucket}/image_normalize_transformed/",
        engine="opencv",
    )
    
    # You can also chain functions together
    df_image["blur_resized"] = df_image["blurred"].blob.image_resize(
        (300, 200), dst=f"{dst_bucket}/image_blur_resize_transformed/", engine="opencv"
    )
    df_image
  2. Atualize todas as referências a {dst_bucket} para se referirem ao contentor que criou, no formato gs://mybucket.
  3. Clique em Executar .

    O código devolve as imagens originais, bem como todas as respetivas transformações.

Gerar texto

Gere texto a partir de dados multimodais através do método predict da classe GeminiTextGenerator:

  1. No bloco de notas, crie uma célula de código e copie o seguinte código para a mesma:
    from bigframes.ml import llm
    
    gemini = llm.GeminiTextGenerator(model_name="gemini-2.0-flash-001")
    
    # Deal with first 2 images as example
    df_image = df_image.head(2)
    
    # Ask the same question on the images
    df_image = df_image.head(2)
    answer = gemini.predict(df_image, prompt=["what item is it?", df_image["image"]])
    answer[["ml_generate_text_llm_result", "image"]]
  2. Clique em Executar .

    O código devolve as duas primeiras imagens em df_image, juntamente com o texto gerado em resposta à pergunta what item is it? para ambas as imagens.

  3. No bloco de notas, crie uma célula de código e copie o seguinte código para a mesma:

    # Ask different questions
    df_image["question"] = [  # type: ignore
        "what item is it?",
        "what color is the picture?",
    ]
    answer_alt = gemini.predict(
        df_image, prompt=[df_image["question"], df_image["image"]]
    )
    answer_alt[["ml_generate_text_llm_result", "image"]]
  4. Clique em Executar .

    O código devolve as duas primeiras imagens em df_image, com texto gerado em resposta à pergunta what item is it? para a primeira imagem e texto gerado em resposta à pergunta what color is the picture? para a segunda imagem.

Gere incorporações

Gere incorporações para dados multimodais através do método predict da classe MultimodalEmbeddingGenerator:

  1. No bloco de notas, crie uma célula de código e copie o seguinte código para a mesma:
    # Generate embeddings on images
    embed_model = llm.MultimodalEmbeddingGenerator()
    embeddings = embed_model.predict(df_image["image"])
    embeddings
  2. Clique em Executar .

    O código devolve as incorporações geradas por uma chamada a um modelo de incorporação.

Divida PDFs

Divida os objetos PDF em partes usando o método pdf_chunk da classe Series.BlobAccessor:

  1. No bloco de notas, crie uma célula de código e copie o seguinte código para a mesma:
    # PDF chunking
    df_pdf = bpd.from_glob_path(
        "gs://cloud-samples-data/bigquery/tutorials/cymbal-pets/documents/*", name="pdf"
    )
    df_pdf["chunked"] = df_pdf["pdf"].blob.pdf_chunk(engine="pypdf")
    chunked = df_pdf["chunked"].explode()
    chunked
  2. Clique em Executar .

    O código devolve os dados PDF divididos em blocos.

Limpar

  1. In the Trusted Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.