Rilevare contenuti espliciti nei video

Il rilevamento di contenuti espliciti rileva i contenuti per adulti nei video. I contenuti per adulti sono generalmente inappropriati per i minori di 18 anni e includono, a titolo esemplificativo, nudità, attività sessuali e pornografia. Vengono identificati anche i contenuti di questo tipo rilevati in cartoni animati o anime.

La risposta include un valore di probabilità suddiviso in bucket, da VERY_UNLIKELY a VERY_LIKELY.

Quando il rilevamento di contenuti espliciti valuta un video, lo fa frame per frame e prende in considerazione solo i contenuti visivi. Il componente audio del video non viene utilizzato per valutare il livello di contenuti espliciti.

Di seguito è riportato un esempio di esecuzione dell'analisi video per le funzionalità di rilevamento di contenuti espliciti su un file in Cloud Storage.

REST

Inviare una richiesta di annotazione video

Di seguito è riportato come inviare una richiesta POST al videos:annotate metodo. L'esempio utilizza Google Cloud CLI per creare un token di accesso. Per istruzioni sull'installazione di gcloud CLI, consulta la guida rapida dell'API Video Intelligence.

Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:

  • INPUT_URI: un bucket Cloud Storage che contiene il file che vuoi annotare, incluso il nome del file. Deve iniziare con gs://.
    Ad esempio: "inputUri": "gs://cloud-videointelligence-demo/assistant.mp4",
  • PROJECT_NUMBER: l'identificatore numerico del tuo Google Cloud progetto

Metodo HTTP e URL:

POST https://videointelligence.googleapis.com/v1/videos:annotate

Corpo JSON della richiesta:

{
  "inputUri": "INPUT_URI",
  "features": ["EXPLICIT_CONTENT_DETECTION"]
}

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/operations/OPERATION_ID"
}

Se la risposta ha esito positivo, l'API Video Intelligence restituisce il name per l'operazione. Di seguito è riportato un esempio di risposta, in cui:

  • PROJECT_NUMBER: il numero del tuo progetto.
  • LOCATION_ID: la regione Cloud in cui deve avvenire l'annotazione. Le regioni Cloud supportate sono: us-east1, us-west1, europe-west1, asia-east1. Se non viene specificata alcuna regione, ne verrà determinata una in base alla posizione del file video.
  • OPERATION_ID: l'ID dell'operazione a lunga esecuzione creata per la richiesta e fornita nella risposta quando hai avviato l' operazione, ad esempio 12345...

Recuperare i risultati dell'annotazione

Per recuperare il risultato dell'operazione, invia una richiesta GET utilizzando il nome dell'operazione restituito dalla chiamata a videos:annotate, come mostrato nell' esempio seguente.

Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:

  • OPERATION_NAME: il nome dell'operazione restituito dall'API Video Intelligence. Il nome dell'operazione ha il formato projects/PROJECT_NUMBER/locations/LOCATION_ID/operations/OPERATION_ID
  • PROJECT_NUMBER: l'identificatore numerico del tuo Google Cloud progetto

Metodo HTTP e URL:

GET https://videointelligence.googleapis.com/v1/OPERATION_NAME

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.videointelligence.v1.AnnotateVideoProgress",
    "annotationProgress": [
     {
      "inputUri": "/demomaker/gbikes_dinosaur.mp4",
      "progressPercent": 100,
      "startTime": "2020-03-26T00:16:35.112404Z",
      "updateTime": "2020-03-26T00:16:55.937889Z"
     }
    ]
   },
   "done": true,
   "response": {
    "@type": "type.googleapis.com/google.cloud.videointelligence.v1.AnnotateVideoResponse",
    "annotationResults": [
     {
      "inputUri": "/demomaker/gbikes_dinosaur.mp4",
      "explicitAnnotation": {
       "frames": [
        {
         "timeOffset": "0.056149s",
         "pornographyLikelihood": "VERY_UNLIKELY"
        },
        {
         "timeOffset": "1.166841s",
         "pornographyLikelihood": "VERY_UNLIKELY"
        },
            ...
        {
         "timeOffset": "41.678209s",
         "pornographyLikelihood": "VERY_UNLIKELY"
        },
        {
         "timeOffset": "42.596413s",
         "pornographyLikelihood": "VERY_UNLIKELY"
        }
       ]
      }
     }
    ]
   }
  }
Le annotazioni di rilevamento delle scene vengono restituite come elenco shotAnnotations. Nota: il campo done viene restituito solo quando il suo valore è True. Non è incluso nelle risposte per le quali l'operazione non è stata completata.

Scaricare i risultati dell'annotazione

Copia l'annotazione dall'origine al bucket di destinazione: (vedi Copiare file e oggetti)

gcloud storage cp gcs_uri gs://my-bucket

Nota: se l'URI GCS di output viene fornito dall'utente, l'annotazione viene archiviata in quell'URI GCS.

Go


func explicitContentURI(w io.Writer, file string) error {
	ctx := context.Background()
	client, err := video.NewClient(ctx)
	if err != nil {
		return err
	}
	defer client.Close()

	op, err := client.AnnotateVideo(ctx, &videopb.AnnotateVideoRequest{
		Features: []videopb.Feature{
			videopb.Feature_EXPLICIT_CONTENT_DETECTION,
		},
		InputUri: file,
	})
	if err != nil {
		return err
	}
	resp, err := op.Wait(ctx)
	if err != nil {
		return err
	}

	// A single video was processed. Get the first result.
	result := resp.AnnotationResults[0].ExplicitAnnotation

	for _, frame := range result.Frames {
		offset, _ := ptypes.Duration(frame.TimeOffset)
		fmt.Fprintf(w, "%s - %s\n", offset, frame.PornographyLikelihood.String())
	}

	return nil
}

Java

Per eseguire l'autenticazione in Video Intelligence, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configura l'autenticazione per un ambiente di sviluppo locale.

// Instantiate a com.google.cloud.videointelligence.v1.VideoIntelligenceServiceClient
try (VideoIntelligenceServiceClient client = VideoIntelligenceServiceClient.create()) {
  // Create an operation that will contain the response when the operation completes.
  AnnotateVideoRequest request =
      AnnotateVideoRequest.newBuilder()
          .setInputUri(gcsUri)
          .addFeatures(Feature.EXPLICIT_CONTENT_DETECTION)
          .build();

  OperationFuture<AnnotateVideoResponse, AnnotateVideoProgress> response =
      client.annotateVideoAsync(request);

  System.out.println("Waiting for operation to complete...");
  // Print detected annotations and their positions in the analyzed video.
  for (VideoAnnotationResults result : response.get().getAnnotationResultsList()) {
    for (ExplicitContentFrame frame : result.getExplicitAnnotation().getFramesList()) {
      double frameTime =
          frame.getTimeOffset().getSeconds() + frame.getTimeOffset().getNanos() / 1e9;
      System.out.printf("Location: %.3fs\n", frameTime);
      System.out.println("Adult: " + frame.getPornographyLikelihood());
    }
  }

Node.js

Per eseguire l'autenticazione in Video Intelligence, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configura l'autenticazione per un ambiente di sviluppo locale.

// Imports the Google Cloud Video Intelligence library
const video = require('@google-cloud/video-intelligence').v1;

// Creates a client
const client = new video.VideoIntelligenceServiceClient();

/**
 * TODO(developer): Uncomment the following line before running the sample.
 */
// const gcsUri = 'GCS URI of video to analyze, e.g. gs://my-bucket/my-video.mp4';

const request = {
  inputUri: gcsUri,
  features: ['EXPLICIT_CONTENT_DETECTION'],
};

// Human-readable likelihoods
const likelihoods = [
  'UNKNOWN',
  'VERY_UNLIKELY',
  'UNLIKELY',
  'POSSIBLE',
  'LIKELY',
  'VERY_LIKELY',
];

// Detects unsafe content
const [operation] = await client.annotateVideo(request);
console.log('Waiting for operation to complete...');
const [operationResult] = await operation.promise();
// Gets unsafe content
const explicitContentResults =
  operationResult.annotationResults[0].explicitAnnotation;
console.log('Explicit annotation results:');
explicitContentResults.frames.forEach(result => {
  if (result.timeOffset === undefined) {
    result.timeOffset = {};
  }
  if (result.timeOffset.seconds === undefined) {
    result.timeOffset.seconds = 0;
  }
  if (result.timeOffset.nanos === undefined) {
    result.timeOffset.nanos = 0;
  }
  console.log(
    `\tTime: ${result.timeOffset.seconds}` +
      `.${(result.timeOffset.nanos / 1e6).toFixed(0)}s`
  );
  console.log(
    `\t\tPornography likelihood: ${likelihoods[result.pornographyLikelihood]}`
  );
});

Python

Per saperne di più sull'installazione e sull'utilizzo della libreria client dell'API Cloud Video Intelligence per Python, consulta Librerie client dell'API Cloud Video Intelligence.
"""Detects explicit content from the GCS path to a video."""
video_client = videointelligence.VideoIntelligenceServiceClient()
features = [videointelligence.Feature.EXPLICIT_CONTENT_DETECTION]

operation = video_client.annotate_video(
    request={"features": features, "input_uri": path}
)
print("\nProcessing video for explicit content annotations:")

result = operation.result(timeout=90)
print("\nFinished processing.")

# Retrieve first result because a single video was processed
for frame in result.annotation_results[0].explicit_annotation.frames:
    likelihood = videointelligence.Likelihood(frame.pornography_likelihood)
    frame_time = frame.time_offset.seconds + frame.time_offset.microseconds / 1e6
    print("Time: {}s".format(frame_time))
    print("\tpornography: {}".format(likelihood.name))

Linguaggi aggiuntivi

C#: segui le istruzioni di configurazione di C# nella pagina delle librerie client, poi consulta la documentazione di riferimento di Video Intelligence per .NET.

PHP: segui le istruzioni di configurazione di PHP nella pagina delle librerie client, poi consulta la documentazione di riferimento di Video Intelligence per PHP.

Ruby: segui le istruzioni di configurazione di Ruby nella pagina delle librerie client, poi consulta la documentazione di riferimento di Video Intelligence per Ruby.