Cette page vous explique comment obtenir des prédictions par lot à partir de vos modèles de classification de vidéos à l'aide de la console Google Cloud ou de l'API Vertex AI. Les prédictions par lot sont des requêtes asynchrones. Vous demandez des prédictions par lot directement à partir de la ressource de modèle sans avoir à le déployer sur un point de terminaison.
Les modèles vidéo AutoML ne sont pas compatibles avec les prédictions en ligne.
Obtenir des prédictions par lot
Pour effectuer une requête de prédiction par lot, vous devez spécifier une source d'entrée et un format de sortie dans lesquels Vertex AI stocke les résultats des prédictions.
Exigences concernant les données d'entrée
L'entrée des requêtes par lot spécifie les éléments à envoyer à votre modèle pour la prédiction. Les prédictions par lot pour le type de modèle vidéo AutoML utilisent un fichier JSON Lines pour spécifier une liste des vidéos pour lesquelles réaliser des prédictions, puis stockent le fichier JSON Lines dans un bucket Cloud Storage. Vous pouvez spécifier Infinity
pour le champ timeSegmentEnd
afin d'indiquer la fin de la vidéo. L'exemple suivant montre l'une des lignes figurant dans un fichier JSON Lines d'entrée.
{'content': 'gs://sourcebucket/datasets/videos/source_video.mp4', 'mimeType': 'video/mp4', 'timeSegmentStart': '0.0s', 'timeSegmentEnd': '2.366667s'}
Demander une prédiction par lots
Pour les requêtes de prédiction par lot, vous pouvez utiliser la console Google Cloud ou l'API Vertex AI. Selon le nombre d'éléments d'entrée envoyés, la tâche de prédiction par lot peut prendre un certain temps.
console Google Cloud
Utilisez la console Google Cloud pour demander une prédiction par lot.
Dans la console Google Cloud, dans la section Vertex AI, accédez à la page Prédictions par lot.
Cliquez sur Créer pour ouvrir la fenêtre Nouvelle prédiction par lot et procédez comme suit :
- Saisissez un nom pour la prédiction par lot.
- Dans Nom du modèle, sélectionnez le nom du modèle à utiliser pour cette prédiction par lot.
- Dans le champ Chemin source, spécifiez l'emplacement Cloud Storage où se trouve votre fichier d'entrée JSON Lines.
- Pour le chemin d'accès de la destination, spécifiez un emplacement Cloud Storage où les résultats de la prédiction par lot sont stockés. Le format de sortie est déterminé par l'objectif de votre modèle. Les modèles AutoML pour les objectifs d'images génèrent des fichiers JSON Lines.
API
Envoyez des requêtes de prédiction par lot à l'aide de l'API Vertex AI.
REST
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
- LOCATION_ID : région où le modèle est stocké et la tâche de prédiction par lot est exécutée. Exemple :
us-central1
. - PROJECT_ID : ID du projet.
- BATCH_JOB_NAME : nom à afficher du job par lot.
- MODEL_ID : ID du modèle à utiliser pour effectuer des prédictions.
- THRESHOLD_VALUE (facultatif) : le modèle ne renvoie que les prédictions dont le score de confiance est au moins égal à cette valeur.
- SEGMENT_CLASSIFICATION (facultatif) : valeur booléenne qui détermine si une classification au niveau du segment est requise. Vertex AI renvoie les étiquettes et leurs scores de confiance pour l'intégralité du segment de temps de la vidéo que vous avez spécifiée dans l'instance d'entrée. La valeur par défaut est
true
. - SHOT_CLASSIFICATION (facultatif) : valeur booléenne qui détermine si une classification au niveau des plans est requise. Vertex AI détermine les limites de chaque plan de caméra dans l'intégralité du segment de temps de la vidéo que vous avez spécifiée dans l'instance d'entrée. Vertex AI renvoie les étiquettes et leurs scores de confiance pour chaque plan détecté, ainsi que les heures de début et de fin du plan. La valeur par défaut est
false
. - ONE_SEC_INTERVAL_CLASSIFICATION (facultatif) : valeur booléenne qui détermine si une requête de classification est requise pour une vidéo à intervalles d'une seconde. Vertex AI renvoie les étiquettes et leurs scores de confiance pour chaque seconde de l'intégralité du temps de segment de la vidéo que vous avez spécifiée dans l'instance d'entrée. La valeur par défaut est
false
. - URI : URI Cloud Storage où se trouve le fichier JSON Lines d'entrée.
- BUCKET : votre bucket Cloud Storage.
- PROJECT_NUMBER : numéro de projet généré automatiquement pour votre projet
Méthode HTTP et URL :
POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs
Corps JSON de la requête :
{ "displayName": "BATCH_JOB_NAME", "model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID", "modelParameters": { "confidenceThreshold": THRESHOLD_VALUE, "segmentClassification": SEGMENT_CLASSIFICATION, "shotClassification": SHOT_CLASSIFICATION, "oneSecIntervalClassification": ONE_SEC_INTERVAL_CLASSIFICATION }, "inputConfig": { "instancesFormat": "jsonl", "gcsSource": { "uris": ["URI"], }, }, "outputConfig": { "predictionsFormat": "jsonl", "gcsDestination": { "outputUriPrefix": "OUTPUT_BUCKET", }, }, }
Pour envoyer votre requête, choisissez l'une des options suivantes :
curl
Enregistrez le corps de la requête dans un fichier nommé request.json
, puis exécutez la commande suivante :
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs"
PowerShell
Enregistrez le corps de la requête dans un fichier nommé request.json
, puis exécutez la commande suivante :
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs" | Select-Object -Expand Content
Vous devriez recevoir une réponse JSON de ce type :
{ "name": "projects/PROJECT_NUMBER/locations/us-central1/batchPredictionJobs/BATCH_JOB_ID", "displayName": "BATCH_JOB_NAME", "model": "projects/PROJECT_NUMBER/locations/us-central1/models/MODEL_ID", "inputConfig": { "instancesFormat": "jsonl", "gcsSource": { "uris": [ "CONTENT" ] } }, "outputConfig": { "predictionsFormat": "jsonl", "gcsDestination": { "outputUriPrefix": "BUCKET" } }, "state": "JOB_STATE_PENDING", "createTime": "2020-05-30T02:58:44.341643Z", "updateTime": "2020-05-30T02:58:44.341643Z", "modelDisplayName": "MODEL_NAME", "modelObjective": "MODEL_OBJECTIVE" }
Vous pouvez interroger l'état de la tâche par lot à l'aide de BATCH_JOB_ID jusqu'à ce que le paramètre state
soit défini sur JOB_STATE_SUCCEEDED
.
Java
Avant d'essayer cet exemple, suivez les instructions de configuration pour Java décrites dans le guide de démarrage rapide de Vertex AI à l'aide des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Vertex AI Java.
Pour vous authentifier auprès de Vertex AI, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Node.js
Avant d'essayer cet exemple, suivez les instructions de configuration pour Node.js décrites dans le guide de démarrage rapide de Vertex AI à l'aide des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Vertex AI Node.js.
Pour vous authentifier auprès de Vertex AI, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Python
Pour savoir comment installer ou mettre à jour le SDK Vertex AI pour Python, consultez la section Installer le SDK Vertex AI pour Python. Pour en savoir plus, consultez la documentation de référence de l'API Python.
Récupérer des résultats de prédiction par lot
Vertex AI envoie une sortie de prédiction par lot à la destination spécifiée.
Lorsqu'une tâche de prédiction par lot est terminée, le résultat de la prédiction est stocké dans le bucket Cloud Storage que vous avez spécifié dans votre requête.
Exemples de résultats de prédictions par lot
Voici un exemple de prédiction par lot résultant d'un modèle de classification de vidéos.
{ "instance": { "content": "gs://bucket/video.mp4", "mimeType": "video/mp4", "timeSegmentStart": "1s", "timeSegmentEnd": "5s" } "prediction": [{ "id": "1", "displayName": "cat", "type": "segment-classification", "timeSegmentStart": "1s", "timeSegmentEnd": "5s", "confidence": 0.7 }, { "id": "1", "displayName": "cat", "type": "shot-classification", "timeSegmentStart": "1s", "timeSegmentEnd": "4s", "confidence": 0.9 }, { "id": "2", "displayName": "dog", "type": "shot-classification", "timeSegmentStart": "4s", "timeSegmentEnd": "5s", "confidence": 0.6 }, { "id": "1", "displayName": "cat", "type": "one-sec-interval-classification", "timeSegmentStart": "1s", "timeSegmentEnd": "1s", "confidence": 0.95 }, { "id": "1", "displayName": "cat", "type": "one-sec-interval-classification", "timeSegmentStart": "2s", "timeSegmentEnd": "2s", "confidence": 0.9 }, { "id": "1", "displayName": "cat", "type": "one-sec-interval-classification", "timeSegmentStart": "3s", "timeSegmentEnd": "3s", "confidence": 0.85 }, { "id": "2", "displayName": "dog", "type": "one-sec-interval-classification", "timeSegmentStart": "4s", "timeSegmentEnd": "4s", "confidence": 0.6 }] }