A moderação de vídeo ajuda a detectar conteúdo arriscado ou não conforme em vídeos, com suporte para detecção de pornografia, conteúdo terrorista, violações de anúncios, cenas indesejáveis, logotipos e anti-spam de áudio. Este tópico explica como usar uma API para detectar conteúdo em vídeos de forma assíncrona.
Moderação assíncrona de vídeo
Use a API /green/video/asyncscan para executar a moderação assíncrona de vídeo.
Chame esta operação para crie tarefas de moderação assíncrona de vídeo. Consulte Sintaxe da solicitação para aprender a construir uma solicitação HTTP ou use uma solicitação pré-construída no Visão geral do SDK.
-
Faturamento
Esta é uma operação de API paga. Para obter mais informações sobre faturamento, consulte Preços do Content Moderation.
Se você moderar conteúdo em vários cenários, será cobrada a taxa acumulada de todos eles. A taxa de cada cenário corresponde ao número de quadros de vídeo moderados multiplicado pelo preço unitário do cenário. O uso do recurso de anti-spam de áudio gera uma taxa adicional, calculada pela duração do vídeo multiplicada pelo preço unitário desse recurso.
-
Objeto moderado
Esta operação permite moderar um arquivo de vídeo ou um fluxo de vídeo. Especifique o arquivo de vídeo enviando uma sequência de quadros capturados ou fornecendo uma URL de vídeo.
-
Return Results
As tarefas de detecção assíncrona não retornam resultados em tempo real. Use um callback ou polling para recuperar os resultados, que ficam armazenados por até uma hora.
Obtenha resultados via callback: Ao envie uma tarefa de moderação assíncrona, inclua o parâmetro callback na solicitação para receber automaticamente os resultados da moderação. Para mais informações, consulte Parâmetros da solicitação.
Use polling: Envie a tarefa de moderação assíncrona sem o parâmetro callback. Em seguida, chame a operação de consulta de resultados para obter os dados da moderação. Para mais detalhes, veja Descrição da operação /green/video/results.
-
Requisitos de vídeo
A URL do arquivo de vídeo deve usar o protocolo HTTP ou HTTPS.
Formatos de arquivo de vídeo suportados: AVI, FLV, MP4, MPG, ASF, WMV, MOV, WMA, RMVB, RM, FLASH e TS.
-
Limite de tamanho de vídeo: O tamanho máximo padrão para um único arquivo de vídeo é de 200 MB.
Caso precise processar vídeos maiores que 200 MB, divida-os em segmentos menores. Alternativamente, entre no grupo do DingTalk (ID: 35573806) para contatar o suporte técnico e solicitar um aumento de limite.
Protocolos de fluxo de vídeo suportados: RTMP, HLS, HTTP-FLV e RTSP.
Limite de duração do fluxo de vídeo: Uma única tarefa de detecção de fluxo de vídeo executa por no máximo 24 horas. A tarefa termina automaticamente se exceder esse limite.
O tempo de detecção do vídeo depende do tempo de baixe. Garanta que o serviço de armazenamento onde o arquivo reside seja estável e confiável. Recomendamos o uso do Alibaba Cloud OSS para armazenar seus arquivos de vídeo.
Tabela 1. Descrição dos casos de uso
Caso de uso
Descrição
Classificação do Resultado da Detecção
Detecção de pornografia em vídeo
Detecta se o vídeo contém conteúdo pornográfico.
Normal, Pornografia
Detecção de violência, terrorismo e conteúdo politicamente sensível em vídeo
Detecta se o vídeo contém conteúdo violento, terrorista ou politicamente sensível.
Normal, Violência/Terrorismo/Politicamente Sensível
Detecção de cenas inadequadas em vídeo
Detecta se o vídeo contém cenas inadequadas.
Normal, Cena Inadequada (como tela preta, tela branca)
Logotipo de vídeo
Detecta se o vídeo contém um logotipo específico.
Normal, Logotipo
Detecção de violação de texto e imagem em vídeo
Detecta se o vídeo contém anúncios ou conteúdo de texto proibido.
Normal, Anúncio ou Violação de Texto
Detecção de violação de áudio em vídeo
NotaEste cenário é suportado apenas pela API de detecção assíncrona de vídeo. Para mais informações, consulte Detecção assíncrona.
Detecta se o áudio do vídeo contém informações proibidas.
NotaO idioma de reconhecimento padrão é o chinês. Para reconhecer conteúdo em inglês, entre em contato com seu gerente de conta.
Normal, Spam, Anúncio, Politicamente Sensível, Violência/Terrorismo, Linguagem Ofensiva, Pornografia, Flood, Conteúdo Proibido, Personalizado (como correspondência a palavras-chave personalizadas)
Limite de QPS
O limite de consultas por segundo (QPS) para esta API é de 50 por usuário, com um limite de concorrência de 20 fluxos. Isso significa que no máximo 20 tarefas podem ser processadas simultaneamente. Para aumentar o limite de concorrência, entre em contato com seu gerente de negócios. Exceder esses limites aciona o throttling, o que pode impactar seus negócios. Planeje suas chamadas adequadamente.
Se o processamento em tempo real não for prioritário, recomendamos ative o modo de detecção offline. Nesse modo, a tarefa de detecção inicia dentro de 24 horas após o envio.
Parâmetros da solicitação
Parâmetro | Tipo | Obrigatório | Exemplo | Descrição |
bizType | String | Não | default | Este campo identifica seu cenário de negócios. Crie um cenário de negócios no Content Moderation console. Para mais informações, consulte Personalizar regras de moderação. |
live | Boolean | Não | false | Especifica se deve moderar um fluxo ao vivo. Valores válidos:
|
offline | Boolean | Não | false | Ativa o modo de moderação offline. Valores válidos:
Nota Este parâmetro aplica-se apenas à moderação de vídeo sob demanda. Não é necessário para moderação de fluxo ao vivo. |
scenes | StringArray | Sim | ["porn"] | Especifica os cenários de moderação de vídeo. Valores válidos:
|
audioScenes | StringArray | Não | ["antispam"] | O cenário de moderação de áudio. O único valor válido é antispam para anti-spam de áudio. Se você omitir este parâmetro, o serviço modera apenas o conteúdo de vídeo. Se especificado, o serviço também modera a faixa de áudio. Nota Para moderar o áudio de um vídeo, forneça a URL do vídeo usando o parâmetro url no objeto task. A moderação de áudio não é suportada quando você envia conteúdo de vídeo como uma sequência de capturas de quadro usando o parâmetro frames no objeto task. |
callback | String | Não | http://www.aliyundoc.com | A URL para receber notificações de callback com os resultados da detecção. A URL deve usar o protocolo HTTP ou HTTPS. Se deixar este parâmetro vazio, será necessário consultar periodicamente os resultados via polling. A interface de
Nota
Após seu servidor de callback receber uma notificação de resultado, ele deve retornar um código de status HTTP 200 para indicar sucesso. Qualquer outro código é tratado como falha. Se a notificação falhar, o Content Moderation tentará novamente até 16 vezes até obter sucesso. Se ainda falhar após 16 tentativas, nenhuma nova tentativa será feita. Recomendamos verifique o status do seu endpoint de callback. |
seed | String | Não | abc**** | Uma string aleatória usada para a assinatura na solicitação de notificação de callback. A string pode conter letras, dígitos e sublinhados (_), devendo ter no máximo 64 caracteres. Personalize esta string para verifique a origem das solicitações de callback. Nota
Este parâmetro é obrigatório quando você utiliza um callback. |
cryptType | String | Não | SHA256 | Se você usar notificações de callback, este parâmetro especifica o algoritmo de hash para a assinatura do callback (checksum). O Content Moderation gera o checksum aplicando o hash na string (concatenada de Alibaba Cloud account ID + seed + content) com o algoritmo especificado antes de enviá-lo para sua URL de callback. Valores válidos:
|
tasks | JSONArray | Sim | Um array JSON de objetos de tarefa, cada um especificando um objeto de moderação. É possível enviar até 100 tarefas em uma única solicitação, desde que a concorrência de tarefas seja 100 ou superior. Para mais detalhes sobre a estrutura de um objeto de tarefa, consulte task. |
Tabela 1. task
Parâmetro | Tipo | Obrigatório | Exemplo | Descrição |
clientInfo | JSONObject | Não | {"userId":"12023****","userNick":"Mike","userType":"others"} | As informações do cliente. Para mais detalhes, consulte os parâmetros de consulta comuns em Parâmetros comuns. O servidor mescla o clientInfo global com o clientInfo individual especificado para a solicitação. Nota
O clientInfo individual tem prioridade maior. |
dataId | String | Não | videoId**** | O ID de dados do objeto de detecção. Este ID pode conter letras maiúsculas e minúsculas, dígitos, sublinhados (_), hífens (-) e pontos (.), devendo ter no máximo 128 caracteres. Use-o para identificar exclusivamente seus dados de negócios. |
liveId | String | Não | liveId**** | O ID do fluxo de vídeo ao vivo. Este parâmetro evita tarefas duplicadas de detecção para fluxos de vídeo ao vivo. Se você passar este parâmetro, o sistema verifica se já existe uma tarefa de detecção em andamento com base em |
url | String | Não | http://www.aliyundoc.com/a.flv | Uma URL pública HTTP ou HTTPS. A URL não pode exceder 2.048 caracteres. Nota Especifique frames ou url. Se especifique o parâmetro url, a cobrança seguirá o método de envio de URLs de vídeo. |
frames | JSONArray | Não | As informações de quadro do vídeo a ser detectado. Cada elemento em frames é uma struct. Para uma descrição detalhada da estrutura de cada elemento, consulte frame. Nota Especifique frames ou url. Se passar o parâmetro url, a cobrança será pelo envio de URL de vídeo. | |
framePrefix | String | Não | http://www.aliyundoc.com/video/ | O prefixo da URL do quadro. Este prefixo é combinado com |
interval | Integer | Não | 1 | O intervalo para captura de quadros de vídeo. Unidade: segundos. Valores válidos: 1 a 600. O valor padrão é 1. |
maxFrames | Integer | Não | 200 | O número máximo de quadros a serem capturados do vídeo. Valores válidos: 5 a 3.600. O valor padrão é 200. Para solicitar um limite maior, entre em contato conosco através de Support and Services. Nota
|
Tabela 2. frame
|
Parâmetro |
Tipo |
Obrigatório |
Exemplo |
Descrição |
|
url |
String |
Não |
http://www.aliyundoc.com/0B860000586C0A0300038A0460000 |
A URL do quadro de vídeo é combinada com |
|
offset |
Integer |
Não |
10 |
O deslocamento temporal do quadro em relação ao início do vídeo, em segundos. |
Parâmetros da resposta
Parâmetro | Tipo | Exemplo | Descrição |
taskId | String | taskId**** | O ID da tarefa de moderação. |
dataId | String | videoId**** | O ID de dados do objeto de detecção. Nota
Se dataId foi passado na solicitação de detecção, o mesmo dataId é retornado aqui. |
Exemplos
Solicitações de exemplo
-
Enviar quadros de vídeo
http(s)://[Endpoint]/green/video/asyncscan &<common request parameters> { "scenes": [ "porn" ], "tasks": [ { "dataId": "videoId****", "frames": [ { "offset": 10, "url": "http://www.aliyundoc.com/0B860000586C0A0300038A0460000" }, { "offset": 20, "url": "http://www.aliyundoc.com/0B860000586C0A0300038A0460001" }, { "offset": 30, "url": "http://www.aliyundoc.com/0B860000586C0A0300038A0460002" }, { "offset": 40, "url": "http://www.aliyundoc.com/0B860000586C0A0300038A0460003" }, { "offset": 50, "url": "http://www.aliyundoc.com/0B860000586C0A0300038A0460003" }, { "offset": 60, "url": "http://www.aliyundoc.com/0B860000586C0A0300038A046000x" } ] } ] } -
Enviar um arquivo de vídeo
http(s)://[Endpoint]/green/video/asyncscan &<common request parameters> { "scenes": [ "porn" ], "audioScenes": [ "antispam" ], "tasks": [ { "dataId": "videoId****", "url": "http://www.aliyundoc.com/a.mp4", "interval": 1, "maxFrames": 200 } ] } -
Enviar um fluxo ao vivo
http(s)://[Endpoint]/green/video/asyncscan &<common request parameters> { "scenes": [ "porn" ], "live": true, "tasks": [ { "dataId": "videoId****", "url": "http://www.aliyundoc.com/a.flv", "interval": 1, "maxFrames": 200 } ] }
Resposta de sucesso
{
"code": 200,
"msg": "OK",
"requestId": "requestID****",
"data": [
{
"dataId": "videoId****",
"taskId": "taskId****"
}
]
}
Consultar resultados da moderação assíncrona
API: /green/video/results
Use esta operação para consultar os resultados de uma tarefa de moderação assíncrona. Para construir uma solicitação HTTP, consulte sintaxe da solicitação. Também é possível usar uma solicitação pré-construída com um SDK, conforme descrito na Visão geral do SDK.
-
Faturamento
Esta operação de API é gratuita.
-
Disponibilidade do resultado
Defina o intervalo de polling para 30 segundos, ou seja, consulte o resultado 30 segundos após envie uma tarefa de detecção assíncrona. O resultado fica armazenado por até uma hora e é descartado se não for recuperado nesse período.
Limite de QPS
O limite de consultas por segundo (QPS) para esta API é de 50 por usuário. Exceder esse limite aciona o throttling, o que pode impactar seus negócios. Planeje suas chamadas adequadamente.
Parâmetros da solicitação
|
Parâmetro |
Tipo |
Obrigatório |
Exemplo |
Descrição |
|
body |
JSONArray |
Sim |
["taskId**","taskId**"] |
Uma lista de valores taskId das tarefas de detecção que você deseja consultar. O array pode conter até 100 elementos. Obtenha o taskId na resposta após envie uma tarefa de detecção. |
Parâmetros da resposta
Parâmetro | Tipo | Exemplo | Descrição |
code | Integer | 200 | O código de erro. É igual ao código de status HTTP. Para mais informações, consulte Códigos de erro comuns. |
msg | String | OK | A mensagem da resposta. |
dataId | String | videoId**** | O ID de dados do objeto de detecção. Nota
Se dataId foi passado na solicitação de detecção, o mesmo dataId é retornado aqui. |
taskId | String | taskId**** | O ID da tarefa de moderação. |
results | JSONArray | Um array de objetos de resultado, um para cada cenário de moderação solicitado. Este parâmetro é retornado apenas em solicitações bem-sucedidas onde Nota Em cenários de moderação de fluxo ao vivo, um | |
audioScanResults | JSONArray | Os resultados da moderação de áudio. Para detalhes sobre a estrutura, consulte audioScanResult. |
Tabela 3. result
Parâmetro | Tipo | Exemplo | Descrição |
scene | String | porn | O cenário de moderação especificado na solicitação. Valores válidos:
|
label | String | porn | O rótulo do resultado da moderação. Os valores válidos variam conforme o cenário de moderação:
|
sublabel | String | porn | Se os cenários de detecção incluírem pornografia (porn) e terrorismo/política (terrorism), este campo pode retornar rótulos detalhados para os resultados da detecção. Este campo não é retornado por padrão. |
suggestion | String | block | A ação recomendada. Valores válidos:
|
rate | Float | 99,2 | A pontuação de confiança. Valores válidos: 0 (menor confiança) a 100 (maior confiança). Se a suggestion for pass, quanto maior a pontuação de confiança, maior a probabilidade de o conteúdo estar em conformidade. Se a suggestion for review ou block, quanto maior a pontuação, maior a probabilidade de o conteúdo estar fora de conformidade. Importante
Recomendamos usar os campos suggestion e label (ou sublabel, para algumas operações de API) para determinar se o conteúdo viola as regras. |
frames | JSONArray | Um array de quadros de vídeo que contêm conteúdo não conforme. Para detalhes sobre a estrutura, consulte frame. | |
hintWordsInfo | JSONArray | Se o vídeo contiver violações de anúncio ou texto, este parâmetro retorna informações sobre as palavras-chave de risco encontradas no texto. Para detalhes sobre a estrutura, consulte hintWordsInfo. Nota Este parâmetro está disponível apenas para o cenário de detecção de violação de anúncio e texto (ad). | |
logoData | JSONArray | Se o vídeo contiver um logotipo, este parâmetro retorna informações sobre o logotipo detectado. Para detalhes sobre a estrutura, consulte logoData. Nota Este parâmetro está disponível apenas para o cenário de detecção de logotipo (logo). | |
sfaceData | JSONArray | Se o vídeo contiver conteúdo terrorista ou político, este parâmetro retorna informações sobre rostos detectados. Para detalhes sobre a estrutura, consulte sfaceData. Nota Este parâmetro está disponível apenas para o cenário de detecção de conteúdo terrorista (terrorism). |
Tabela 4. frame
Parâmetro | Tipo | Exemplo | Descrição |
url | String | http://www.aliyundoc.com/0B860000586C0A0 | A URL do quadro de vídeo. |
offset | Integer | 50 | O deslocamento temporal do quadro de vídeo em relação ao início do vídeo, em segundos. |
label | String | porn | O rótulo do resultado da moderação para o quadro de vídeo. Os valores válidos variam conforme o cenário de moderação:
|
rate | Float | 99,1 | A pontuação de confiança. Valores válidos: 0 a 100. Uma pontuação maior indica maior probabilidade de o resultado da detecção ser preciso. Evite usar essa pontuação em sua lógica de negócios. |
Tabela 5. audioScanResult
Parâmetro | Tipo | Exemplo | Descrição |
scene | String | antispam | O cenário de moderação de áudio. O único valor válido é antispam, que indica anti-spam de áudio. |
label | String | customized | A categoria do resultado da moderação de áudio. Valores válidos:
|
suggestion | String | block | A ação recomendada. Valores válidos:
|
rate | Float | 99,91 | A pontuação de confiança. Valores válidos: 0 (menor confiança) a 100 (maior confiança). Se a suggestion for pass, quanto maior a pontuação de confiança, maior a probabilidade de o conteúdo estar em conformidade. Se a suggestion for review ou block, quanto maior a pontuação, maior a probabilidade de o conteúdo estar fora de conformidade. Importante
Recomendamos usar os campos suggestion e label (ou sublabel, para algumas operações de API) para determinar se o conteúdo viola as regras. |
details | JSONArray | Os detalhes da transcrição de áudio. Este array contém um ou mais objetos de sentença. Para detalhes sobre a estrutura, consulte detail. |
Tabela 6. detail
Parâmetro | Tipo | Exemplo | Descrição |
startTime | Integer | 24 | O tempo inicial da sentença, em segundos. |
endTime | Integer | 60 | O tempo final da sentença, em segundos. |
text | String | computer | O texto transcrito do áudio. |
label | String | normal | A categoria do resultado da moderação para a sentença. Valores válidos:
|
keyword | String | ative | A palavra-chave personalizada correspondente, se houver. |
libName | String | manual | Se uma palavra-chave personalizada for correspondida, este parâmetro retorna o nome da biblioteca de texto que contém a palavra-chave. |
Tabela 7. logoData
|
Parâmetro |
Tipo |
Exemplo |
Descrição |
|
type |
String |
TV |
O tipo do logotipo detectado. O valor |
|
name |
String |
***TV |
O nome do logotipo detectado. |
|
x |
Float |
140 |
A coordenada x do canto superior esquerdo da caixa delimitadora do logotipo. A origem é o canto superior esquerdo da imagem. Unidade: pixels. |
|
y |
Float |
68 |
A coordenada y do canto superior esquerdo da caixa delimitadora do logotipo. A origem é o canto superior esquerdo da imagem. Unidade: pixels. |
|
w |
Float |
106 |
A largura da caixa delimitadora do logotipo. Unidade: pixels. |
|
h |
Float |
106 |
A altura da caixa delimitadora do logotipo. Unidade: pixels. |
Tabela 5. sfaceData
|
Parâmetro |
Tipo |
Exemplo |
Descrição |
|
x |
Float |
444 |
A coordenada x da caixa delimitadora do rosto, relativa ao canto superior esquerdo da imagem. |
|
y |
Float |
174 |
A coordenada y da caixa delimitadora do rosto, relativa ao canto superior esquerdo da imagem. |
|
w |
Float |
467 |
A largura da caixa delimitadora do rosto. |
|
h |
Float |
467 |
A altura da caixa delimitadora do rosto. |
|
smileRate |
Float |
0 |
A probabilidade de sorriso. |
|
glasses |
Boolean |
false |
Indica se a pessoa está usando óculos. |
|
faces |
Array |
Um array de objetos de rosto reconhecidos. Para a estrutura de cada objeto, consulte a Tabela 6. |
Tabela 8. face
|
Parâmetro |
Tipo |
Exemplo |
Descrição |
|
name |
String |
xxxx |
O nome da pessoa semelhante. |
|
rate |
Float |
97,03 |
A probabilidade de similaridade. |
|
id |
String |
AliFace_001**** |
O ID do rosto. |
Tabela 8. hitLibInfo
|
Parâmetro |
Tipo |
Exemplo |
Descrição |
|
context |
String |
xxxx |
O conteúdo correspondente de uma biblioteca de texto personalizada. |
|
libCode |
String |
69751 |
O código da biblioteca de texto personalizada. |
|
libName |
String |
manual |
O nome da biblioteca de texto personalizada. |
Tabela 9. hintWordsInfo
|
Parâmetro |
Tipo |
Exemplo |
Descrição |
|
context |
String |
xxxx |
A palavra-chave de risco correspondente. |
Exemplos
Solicitação de exemplo
http(s)://[Endpoint]/green/video/results
&<common request parameters>
[
"taskId****",
"taskId****"
]
Respostas de exemplo
-
Moderando apenas imagens
{ "code": 200, "msg": "OK", "requestId": "requestID****", "data": [ { "code": 200, "msg": "OK", "dataId": "videoId****", "taskId": "taskId****", "results": [ { "label": "porn", "rate": 99.2, "scene": "porn", "suggestion": "block" } ] } ] } -
Moderando imagens e áudio
{ "code": 200, "msg": "OK", "requestId": "requestID****", "data": [ { "code": 200, "msg": "OK", "dataId": "videoId****", "taskId": "taskId****", "results": [ { "label": "porn", "rate": 99.2, "scene": "porn", "suggestion": "block" } ], "audioScanResults": [ { "scene": "antispam", "label": "customized", "suggestion": "block", "rate": 99.91, "details": [ { "startTime": 0, "endTime": 24, "text": "computer", "label": "customized" }, { "startTime": 24, "endTime": 60, "text": "computer", "label": "normal" } ] } ] } ] }