Detecte QR codes e códigos de barras em imagens armazenadas no OSS. A resposta retorna o texto decodificado de cada código e as coordenadas da caixa delimitadora na imagem.
Esse recurso usa o Intelligent Media Management (IMM) e suporta apenas processamento síncrono.
Casos de uso
Fluxos de pagamento: decodifique QR codes em capturas de tela ou recibos de pagamento.
Marketing e publicidade: extraia URLs ou informações de produtos de QR codes em pôsteres digitalizados ou imagens de embalagens.
Moderação de conteúdo: identifique a posição de QR codes ou códigos de barras em imagens enviadas por usuários para aplicar redação ou desfoque nas etapas seguintes.
Limitações
Suporta apenas processamento síncrono (
x-oss-process).Detecta até cinco códigos por imagem.
Não permite acesso anônimo.
A caixa delimitadora usa representação retangular (Left, Top, Width, Height).
Pré-requisitos
Antes de começar, verifique se você:
Vinculou um projeto do IMM ao seu bucket pelo console do OSS ou pela API AttachOSSBucket do IMM.
Detectar QR codes e códigos de barras
Use a ação image/codes para detectar todos os QR codes e códigos de barras em um objeto de imagem armazenado no OSS.
Python
Requer o OSS SDK for Python 2.18.4 ou posterior.
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Load access credentials from environment variables OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Specify the endpoint of the region where the bucket is located.
endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
# Specify the region where the bucket is located.
region = 'cn-hangzhou'
bucket = oss2.Bucket(auth, endpoint, 'examplebucket', region=region)
# Specify the full object path. Example: exampledir/example.jpg.
key = 'example.jpg'
try:
# Submit a QR code detection request.
result = bucket.get_object(key, process='image/codes')
print(result.read().decode('utf-8'))
except oss2.exceptions.OssError as e:
print("Error:", e)
Java
Requer o OSS SDK for Java 3.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 {
// Specify the endpoint of the region where the bucket is located.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Specify the region where the bucket is located. Example: cn-hangzhou.
String region = "cn-hangzhou";
// Load access credentials from environment variables OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET.
EnvironmentVariableCredentialsProvider credentialsProvider =
CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Specify the bucket name.
String bucketName = "examplebucket";
// Specify the full object path. Example: exampledir/example.jpg.
String key = "example.jpg";
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// Submit a QR code detection request.
GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key);
getObjectRequest.setProcess("image/codes");
OSSObject ossObject = ossClient.getObject(getObjectRequest);
// Read the JSON response.
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = ossObject.getObjectContent().read(buffer)) != -1) {
baos.write(buffer, 0, bytesRead);
}
System.out.println(baos.toString("UTF-8"));
} catch (IOException e) {
System.out.println("Error: " + e.getMessage());
} finally {
ossClient.shutdown();
}
}
}
Go
Requer o OSS SDK for Go 3.0.2 ou posterior.
package main
import (
"fmt"
"io"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// Load access credentials from environment variables OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Create an OSS client. Specify the endpoint and region where the bucket is located.
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)
}
bucket, err := client.Bucket("examplebucket")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Submit a QR code detection request.
body, err := bucket.GetObject("example.jpg", oss.Process("image/codes"))
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(string(data))
}
PHP
Requer o OSS SDK for PHP 2.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 {
// Load access credentials from environment variables OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET.
$provider = new EnvironmentVariableCredentialsProvider();
// Specify the endpoint of the region where the bucket is located.
$endpoint = 'https://oss-cn-hangzhou.aliyuncs.com';
// Specify the bucket name.
$bucket = 'examplebucket';
// Specify the full object path. Example: exampledir/example.jpg.
$key = 'example.jpg';
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
"region" => "cn-hangzhou"
);
$ossClient = new OssClient($config);
// Submit a QR code detection request.
$options[$ossClient::OSS_PROCESS] = "image/codes";
$result = $ossClient->getObject($bucket, $key, $options);
var_dump($result);
} catch (OssException $e) {
printf($e->getMessage() . "\n");
}
Referência da API
Para acessar a API diretamente, inclua o parâmetro x-oss-process=image/codes em uma solicitação GetObject. Calcule o cabeçalho Authorization com a versão de assinatura 4. Para ver a especificação completa do GetObject, consulte GetObject.
Exemplo de solicitação
GET /example.jpg?x-oss-process=image/codes HTTP/1.1
Host: image-demo.oss-cn-hangzhou.aliyuncs.com
Date: Fri, 21 Jul 2023 08:56:50 GMT
Authorization: SignatureValue
Exemplo de resposta
HTTP/1.1 200 OK
Server: AliyunOSS
Date: Fri, 21 Jul 2023 08:56:52 GMT
Content-Type: application/json;charset=utf-8
Content-Length: 64
Connection: keep-alive
x-oss-request-id: 64BA48531253C5383707D5B3
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: 453
{
"RequestId": "3B7BD09F-18D8-56F0-90B7-889FBD9FFF70",
"Codes": [
{
"Content": "https://www.aliyun.com/product/imm",
"Boundary": {
"Width": 741,
"Height": 706,
"Left": 460,
"Top": 295
}
}
]
}
Campos da resposta
O array Codes contém uma entrada para cada código detectado.
|
Campo |
Tipo |
Descrição |
|
|
String |
Texto ou URL decodificada do QR code ou código de barras |
|
|
Integer |
Coordenada X do canto superior esquerdo, em pixels |
|
|
Integer |
Coordenada Y do canto superior esquerdo, em pixels |
|
|
Integer |
Largura da caixa delimitadora, em pixels |
|
|
Integer |
Altura da caixa delimitadora, em pixels |
Para obter o esquema completo da resposta, consulte DetectImageCodes .
Permissões
Para usar o reconhecimento síncrono de QR code (x-oss-process=image/codes), conceda as permissões a seguir.
Permissões do chamador (usuário RAM ou função RAM)
Conceda permissões ao chamador por meio de uma política do RAM ou de uma política de bucket.
|
API |
Ação |
Descrição |
|
GetObject |
|
Lê a imagem de origem do OSS |
|
— |
|
Necessária apenas se o objeto estiver criptografado com KMS ( |
|
— |
|
Invoca o processamento de dados do IMM a partir do OSS |
|
PostProcessTask |
|
Necessária apenas para processamento assíncrono ( |
Permissões da função de serviço do IMM
O IMM chama o OSS em seu nome usando a função de serviço padrão AliyunIMMDefaultRole (ARN: acs:ram:*:<account-id>:role/aliyunimmdefaultrole). Conceda a esta função as permissões a seguir.
|
API |
Ação |
Descrição |
|
GetObject |
|
Lê a imagem de origem |
|
— |
|
Necessária apenas se o objeto estiver criptografado com KMS |
Permissões do IMM
|
API |
Ação |
Descrição |
|
DetectImageCodes |
|
Executa o reconhecimento de QR code no IMM |
Faturamento
O reconhecimento de QR code gera cobranças no OSS e no IMM. Os preços unitários variam conforme a região.
Cobranças do OSS: consulte Preços do OSS para ver as tarifas atuais.
|
Item de faturamento |
Base |
|
Solicitações GET |
Por solicitação bem-sucedida |
|
Tráfego de saída |
Tamanho dos dados acessados por um endpoint público (por exemplo, |
|
Recuperação de dados IA |
Tamanho dos objetos IA recuperados |
|
Recuperação de dados Archive |
Tamanho dos objetos Archive recuperados quando o acesso em tempo real está ativado no bucket |
|
Aceleração de transferência |
Tamanho dos dados quando a aceleração de transferência está ativada |
Cobranças do IMM: consulte Faturamento do IMM para ver as tarifas atuais.
|
Item de faturamento |
Base |
|
ImageQRCodes |
Por solicitação DetectImageCodes bem-sucedida |