O recurso de avaliação da qualidade da imagem analisa a qualidade visual de uma imagem com base em um conjunto de métricas, como resolução, ruído, distorção, saturação de cor e exposição. Essa avaliação fornece uma pontuação geral que indica a qualidade da imagem. O recurso permite selecionar uma imagem de capa de alta qualidade para artigos e uma miniatura para vídeos, remover imagens duplicadas e filtrar imagens de baixa qualidade. Este tópico descreve os parâmetros e os exemplos da avaliação da qualidade da imagem.
Casos de uso
Seleção de imagens de capa para documentos: a avaliação da qualidade da imagem ajuda os criadores de documentos a selecionar capas de alta qualidade e visualmente atraentes, o que contribui para aumentar as taxas de cliques e visitas.
Seleção de miniaturas de vídeo: essa avaliação ajuda os criadores de conteúdo de vídeo a selecionar imagens de alta qualidade e visualmente atraentes como miniaturas, o que contribui para aumentar as taxas de cliques e melhorar a experiência do espectador.
Filtragem de imagens de baixa qualidade: em sistemas de processamento e armazenamento, imagens de baixa qualidade podem ocupar muito espaço e degradar o desempenho do sistema e a experiência do usuário. A avaliação da qualidade da imagem permite filtrar automaticamente imagens borradas, distorcidas ou com ruído. Use esse recurso para aumentar a qualidade e a usabilidade da biblioteca de imagens.
Pré-requisitos
O Intelligent Media Management (IMM) está ativado. Para obter mais informações, consulte Activate IMM.
Um bucket do Object Storage Service (OSS) está associado ao seu projeto do Intelligent Media Management (IMM). Para obter mais informações sobre como associar um projeto do IMM a um bucket do OSS no console do OSS, consulte Getting started. Para saber como associar um projeto do IMM a um bucket por meio de uma operação de API, consulte AttachOSSBucket.
Notas de uso
A avaliação da qualidade da imagem suporta apenas processamento síncrono (x-oss-process).
O acesso anônimo é negado.
Você precisa ter as permissões necessárias para usar o recurso. Para obter mais informações, consulte permissions.
Parâmetros
Ação: image/score
Para obter mais informações sobre os parâmetros de resposta, consulte DetectImageScore.
Exemplos
Usar SDKs do OSS
O código a seguir mostra como obter a pontuação de qualidade de uma imagem usando os SDKs do OSS para linguagens de programação comuns. Para obter a pontuação de qualidade de uma imagem usando SDKs de outras linguagens de programação, modifique os parâmetros com base neste código de exemplo.
Java
É necessário usar o OSS SDK for Java V3.17.4 ou posterior.
import com.aliyun.oss.ClientBuilderConfiguration;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.common.auth.CredentialsProviderFactory;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.OSSObject;
import com.aliyun.oss.model.GetObjectRequest;
import com.aliyuncs.exceptions.ClientException;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
public class Demo {
public static void main(String[] args) throws ClientException, ClientException {
// Specify the endpoint of the region in which the bucket is located.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Specify the region of the bucket in which the image is stored. Example: cn-hangzhou.
String region = "cn-hangzhou";
// Obtain a credential from the environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Specify the name of the bucket.
String bucketName = "examplebucket";
// If the image is stored in the root directory of the bucket, enter the image name. If the image is not stored in the root directory of the bucket, you must specify the full path of the image. Example: exampledir/example.jpg.
String key = "example.jpg";
// Create an OSSClient instance.
// Call the shutdown method to release resources when the OSSClient is no longer in use.
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// Create an image quality assessment instruction.
GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key);
getObjectRequest.setProcess("image/score");
// Use the process parameter of the getObject method to pass the processing instruction.
OSSObject ossObject = ossClient.getObject(getObjectRequest);
// Read and display the query results.
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = ossObject.getObjectContent().read(buffer)) != -1) {
baos.write(buffer, 0, bytesRead);
}
String imageScore = baos.toString("UTF-8");
System.out.println("Image Score:");
System.out.println(imageScore);
} catch (IOException e) {
System.out.println("Error: " + e.getMessage());
} finally {
// Stop the OSSClient instance.
ossClient.shutdown();
}
}
}
Python
É necessário usar o OSS SDK for Python V2.18.4 ou posterior.
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Obtain a credential from the environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
# Specify the ID of the Alibaba Cloud region in which the bucket is located.
region = 'cn-hangzhou'
bucket = oss2.Bucket(auth, endpoint, 'examplebucket', region=region)
# If the image is stored in the root directory of the bucket, enter the image name. If the image is not stored in the root directory of the bucket, you must specify the full path of the image. Example: exampledir/example.jpg.
key = 'example.jpg'
# Create an image quality assessment instruction.
process = 'image/score'
try:
# Use the get_object method and pass the processing instruction by using the process parameter.
result = bucket.get_object(key, process=process)
# Read and display the query results.
image_score = result.read().decode('utf-8')
print("Image Score:")
print(image_score)
except oss2.exceptions.OssError as e:
print("Error:", e)
Go
É necessário usar o OSS SDK for Go V3.0.2 ou posterior.
package main
import (
"fmt"
"io"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// Obtain a temporary credential from the environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Create an OSSClient instance.
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint.
// Specify the ID of the Alibaba Cloud region in which the bucket is located. Example: cn-hangzhou.
client, err := oss.New("https://oss-cn-hangzhou.aliyuncs.com", "", "", oss.SetCredentialsProvider(&provider), oss.AuthVersion(oss.AuthV4), oss.Region("cn-hangzhou"))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Specify the name of the bucket. Example: examplebucket.
bucketName := "examplebucket"
bucket, err := client.Bucket(bucketName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// If the image is stored in the root directory of the bucket, enter the image name. If the image is not stored in the root directory of the bucket, you must specify the full path of the image. Example: exampledir/example.jpg.
// Create an image quality assessment instruction by using the oss.Process method.
body, err := bucket.GetObject("example.jpg", oss.Process("image/score"))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
defer body.Close()
data, err := io.ReadAll(body)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Println("data:", string(data))
}
PHP
É necessário usar o OSS SDK for PHP V2.7.0 ou posterior.
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
require_once __DIR__ . '/../vendor/autoload.php';
}
use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
try {
// Obtain a credential from the environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
$provider = new EnvironmentVariableCredentialsProvider();
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
$endpoint = 'https://oss-cn-hangzhou.aliyuncs.com';
// Specify the name of the bucket. Example: examplebucket.
$bucket = 'examplebucket';
// If the image is stored in the root directory of the bucket, enter the image name. If the image is not stored in the root directory of the bucket, you must specify the full path of the image. Example: exampledir/example.jpg.
$key = 'example.jpg';
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
// Specify the ID of the Alibaba Cloud region in which the bucket is located.
"region" => "cn-hangzhou"
);
$ossClient = new OssClient($config);
// Create an image quality assessment instruction.
$options[$ossClient::OSS_PROCESS] = "image/score";
$result = $ossClient->getObject($bucket,$key,$options);
var_dump($result);
} catch (OssException $e) {
printf($e->getMessage() . "\n");
return;
}
Usar a API RESTful
Se o seu negócio exigir um alto nível de personalização, chame as APIs RESTful diretamente. Para chamar uma API diretamente, inclua o cálculo da assinatura no seu código. Para obter mais informações sobre como calcular o cabeçalho Authorization, consulte (Recommended) Include a V4 signature.
Processe imagens especificando o parâmetro x-oss-process na solicitação GetObject. Para obter mais informações, consulte GetObject.
Exemplo de solicitação
GET /example.jpg?x-oss-process=image/score HTTP/1.1
Host: image-demo.oss-cn-hangzhou.aliyuncs.com
Date: Fri, 21 Jul 2023 08:28:33 GMT
Authorization: SignatureValue
Exemplo de resposta
HTTP/1.1 200 OK
Server: AliyunOSS
Date: Fri, 21 Jul 2023 08:28:34 GMT
Content-Type: application/json;charset=utf-8
Content-Length: 96
Connection: keep-alive
x-oss-request-id: 64BA41B2F326DB30370FEBC9
ETag: "2CE2EA370531B7CC1D23BE6015CF5DA5"
Last-Modified: Mon, 10 Jul 2023 13:07:30 GMT
x-oss-object-type: Normal
x-oss-hash-crc64ecma: 13420962247653419692
x-oss-storage-class: Standard
x-oss-ec: 0048-00000104
Content-Disposition: attachment
x-oss-force-download: true
x-oss-server-time: 466
{
"ImageScore":
{
"OverallQualityScore":0.705
},
"RequestId":"E4B48BE7-46D9-589D-AB6D-C16E9A09A075"
}