En esta página, se incluyen los pasos para copiar versiones de procesadores entrenados de Document AI de un proyecto a otro junto con el esquema del conjunto de datos y las muestras del procesador fuente al de destino. Estos pasos automatizan el proceso de importar la versión del procesador, implementarla y establecerla como la versión predeterminada en el proyecto de destino.
Antes de comenzar
- Obtén un ID de proyecto de Google Cloud .
- Tener el ID del procesador de Document AI
- Tener Cloud Storage
- Usa Python: Notebook de Jupyter (Vertex AI).
- Necesitas permisos para otorgar acceso a la cuenta de servicio en los proyectos de origen y destino.
Procedimiento paso a paso
El procedimiento se describe en los siguientes pasos.
Paso 1: Identifica la cuenta de servicio asociada con el notebook de Vertex AI
!gcloud config list account
Resultado:
[core]
account = example@automl-project.iam.gserviceaccount.com
Your active configuration is: [default]
Paso 2: Otorga los permisos necesarios a la cuenta de servicio
En el proyecto Google Cloud que es el destino previsto para la migración, agrega la cuenta de servicio que se adquirió en el paso anterior como principal y asigna los dos roles siguientes:
- Administrador de Document AI
- Administrador de almacenamiento
Consulta Otorga roles a cuentas de servicio y Claves de encriptación administradas por el cliente (CMEK) para obtener más información.

Para que la migración funcione, la cuenta de servicio que se usa para ejecutar este notebook debe tener lo siguiente:
- Roles en los proyectos de origen y destino para crear el bucket del conjunto de datos, o bien crearlo si no existe, así como permisos de lectura y escritura para todos los objetos
- Rol de editor de Document AI en el proyecto de origen, como se describe en Importa una versión del procesador.
Descarga una clave JSON para la cuenta de servicio, de modo que puedas autenticarte y autorizarte como cuenta de servicio. Para obtener más información, consulta Claves de cuentas de servicio.
Siguiente:
- Ve a la cuenta de servicio.
- Selecciona la cuenta de servicio que realizará esta tarea.
- Ve a la pestaña Claves, haz clic en
Add Keyy, luego, elige Crear clave nueva. - Selecciona el tipo de clave (preferentemente JSON).
Haz clic en
Createy descarga el archivo en una ruta específica.
Actualiza la ruta de acceso en la variable
service_account_keydel siguiente fragmento.
service_account_key='path_to_sa_key.json'
from google.oauth2 import service_account
from google.cloud import storage
# Authenticate the service account
credentials = service_account.Credentials.from_service_account_file(
service_account_key
)
# pass this credentials variable to all client initializations
# storage_client = storage.Client(credentials=credentials)
# docai_client = documentai.DocumentProcessorServiceClient(credentials=credentials)
Paso 3: importa bibliotecas
import time
from pathlib import Path
from typing import Optional, Tuple
from google.cloud.documentai_v1beta3.services.document_service import pagers
from google.api_core.client_options import ClientOptions
from google.api_core.operation import Operation
from google.cloud import documentai_v1beta3 as documentai
from google.cloud import storage
from tqdm import tqdm
Paso 4: Ingresa los detalles
- source_project_id: Proporciona el ID del proyecto de origen.
- source_location: Proporciona la ubicación del procesador de origen (
usoeu). - source_processor_id: Proporciona el Google Cloud ID del procesador de Document AI.
- source_processor_version_to_import: Proporciona el ID de la versión del procesador de Document AI para la versión entrenada. Google Cloud
- migrate_dataset: Proporciona este valor como
TrueoFalse. Si deseas migrar el conjunto de datos del procesador de origen al procesador de destino, proporcionaTrue; de lo contrario, proporcionaFalse. El valor predeterminado esFalse. - source_exported_gcs_path: Proporciona la ruta de acceso de Cloud Storage para almacenar archivos JSON.
- destination_project_id: Proporciona el ID del proyecto de destino.
- destination_processor_id: Proporciona el ID del procesador de Document AI, ya sea
""oprocessor_id, del proyecto de destino. Google Cloud
source_project_id = "source-project-id"
source_location = "processor-location"
source_processor_id = "source-processor-id"
source_processor_version_to_import = "source-processor-version-id"
migrate_dataset = False # Either True or False
source_exported_gcs_path = (
"gs://bucket/path/to/export_dataset/"
)
destination_project_id = "< destination-project-id >"
# Give an empty string if you wish to create a new processor
destination_processor_id = ""
Paso 5: Ejecuta el código
import time
from pathlib import Path
from typing import Optional, Tuple
from google.cloud.documentai_v1beta3.services.document_service import pagers
from google.api_core.client_options import ClientOptions
from google.api_core.operation import Operation
from google.cloud import documentai_v1beta3 as documentai
from google.cloud import storage
from tqdm import tqdm
source_project_id = "source-project-id"
source_location = "processor-location"
source_processor_id = "source-processor-id"
source_processor_version_to_import = "source-processor-version-id"
migrate_dataset = False # Either True or False
source_exported_gcs_path = (
"gs://bucket/path/to/export_dataset/"
)
destination_project_id = "< destination-project-id >"
# Give empty string if you wish to create a new processor
destination_processor_id = ""
exported_bucket_name = source_exported_gcs_path.split("/")[2]
exported_bucket_path_prefix = "/".join(source_exported_gcs_path.split("/")[3:])
destination_location = source_location
def sample_get_processor(project_id: str, processor_id: str, location: str)->Tuple[str, str]:
"""
This function returns Processor Display Name and Type of Processor from source project
Args:
project_id (str): Project ID
processor_id (str): Document AI Processor ID
location (str): Processor Location
Returns:
Tuple[str, str]: Returns Processor Display name and type
"""
client = documentai.DocumentProcessorServiceClient()
print(
f"Fetching processor({processor_id}) details from source project ({project_id})"
)
name = f"projects/{project_id}/locations/{location}/processors/{processor_id}"
request = documentai.GetProcessorRequest(
name=name,
)
response = client.get_processor(request=request)
print(f"Processor Name: {response.name}")
print(f"Processor Display Name: {response.display_name}")
print(f"Processor Type: {response.type_}")
return response.display_name, response.type_
def sample_create_processor(project_id: str, location: str, display_name: str, processor_type: str)->documentai.Processor:
"""It will create Processor in Destination project
Args:
project_id (str): Project ID
location (str): Location fo processor
display_name (str): Processor Display Name
processor_type (str): Google Cloud Document AI Processor type
Returns:
documentai.Processor: Returns details abouts newly created processor
"""
client = documentai.DocumentProcessorServiceClient()
request = documentai.CreateProcessorRequest(
parent=f"projects/{project_id}/locations/{location}",
processor={
"type_": processor_type,
"display_name": display_name,
},
)
print(f"Creating Processor in project: {project_id} in location: {location}")
print(f"Display Name: {display_name} & Processor Type: {processor_type}")
res = client.create_processor(request=request)
return res
def initialize_dataset(project_id: str, processor_id: str, location: str)-> Operation:
"""It will configure dataset for target processor in destination project
Args:
project_id (str): Project ID
processor_id (str): DocuemntAI Processor ID
location (str): Processor Location
Returns:
Operation: An object representing a long-running operation
"""
# opts = ClientOptions(api_endpoint=f"{location}-documentai.googleapis.com")
client = documentai.DocumentServiceClient() # client_options=opts
dataset = documentai.types.Dataset