O recurso de reconhecimento de QR code detecta múltiplos QR codes ou códigos de barras em diversas imagens. Ele retorna a caixa delimitadora e o conteúdo textual de cada código identificado. O sistema anota a caixa delimitadora de cada QR code ou código de barras e exibe seu conteúdo textual na saída.
Visão geral
O Intelligent Media Management (IMM) oferece o recurso de reconhecimento de QR code para detectar a posição e o conteúdo de um ou mais QR codes ou códigos de barras em arquivos de imagem, como fotos e capturas de tela. O service retorna as informações de posição e o texto contido nos códigos. As informações de posição incluem a coordenada x do canto superior esquerdo, a coordenada y do canto superior esquerdo, a largura e a altura, conforme ilustrado na figura a seguir.
-
QR code

-
Código de barras

Use o recurso de reconhecimento de QR code para implementar a leitura e varredura de QR codes ou códigos de barras em suas aplicações empresariais. Também é possível desenvolver funcionalidades para bloquear ou pixelizar esses códigos nas imagens com base nesse recurso.
Cenários
Pagamento via QR code: os pagadores escaneiam o código para concluir transações financeiras.
Marketing e publicidade com QR code: profissionais da área adicionam códigos a cartazes e embalagens para promover products.
Observações de uso
Há suporte apenas para processamento síncrono (x-oss-process).
É possível detectar no máximo cinco QR codes em uma única imagem.
O acesso anônimo será negado.
Como usar
Pré-requisitos
Você ativou o serviço Intelligent Media Management (IMM).
Anexe um projeto IMM. Para obter instruções sobre como anexar um projeto no console do Object Storage Service (OSS), consulte Getting Started. Para anexar um projeto por meio de API, consulte AttachOSSBucket - Attach an OSS bucket.
Reconhecimento de QR code
Ação: image/codes
Java
Use Java SDK 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 {
// Set endpoint to the endpoint of the region where the bucket is located.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Specify the region information that corresponds to the endpoint, for example, cn-hangzhou.
String region = "cn-hangzhou";
// Obtain access credentials from environment variables. Before you run this sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Specify the bucket name.
String bucketName = "examplebucket";
// If the image is in the root directory of the bucket, specify the image name. If the image is not in the root directory, specify the full path, such as exampledir/example.jpg.
String key = "example.jpg";
// Create an OSSClient instance.
// When the OSSClient instance is no longer in use, call the shutdown method to release resources.
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// Build the processing instruction for QR code recognition.
GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key);
getObjectRequest.setProcess("image/codes");
// Use the getObject method and pass the processing instruction in the process parameter.
OSSObject ossObject = ossClient.getObject(getObjectRequest);
// Read and print the information.
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = ossObject.getObjectContent().read(buffer)) != -1) {
baos.write(buffer, 0, bytesRead);
}
String imageCodes = baos.toString("UTF-8");
System.out.println("Image Codes:");
System.out.println(imageCodes);
} catch (IOException e) {
System.out.println("Error: " + e.getMessage());
} finally {
// Shut down the OSSClient.
ossClient.shutdown();
}
}
}
Python
Use Python SDK 2.18.4 ou posterior.
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Obtain access credentials from environment variables. Before you run this sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Set endpoint to the endpoint of the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
# Specify the general-purpose region ID of Alibaba Cloud.
region = 'cn-hangzhou'
bucket = oss2.Bucket(auth, endpoint, 'examplebucket', region=region)
# If the image is in the root directory of the bucket, specify the image name. If the image is not in the root directory, specify the full path, such as exampledir/example.jpg.
key = 'example.jpg'
# Build the processing instruction for QR code recognition.
process = 'image/codes'
try:
# Use the get_object method and pass the processing instruction in the process parameter.
result = bucket.get_object(key, process=process)
# Read and print the information.
image_codes = result.read().decode('utf-8')
print("Image Codes:")
print(image_codes)
except oss2.exceptions.OssError as e:
print("Error:", e)
Go
Use Go SDK 3.0.2 ou posterior.
package main
import (
"fmt"
"io"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// Obtain temporary access credentials from environment variables. Before you run this sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Create an OSSClient instance.
// Set endpoint to the endpoint of the bucket. For example, if the bucket is in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Set the endpoint based on your actual region.
// Specify the general-purpose region ID of Alibaba Cloud, for 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 bucket name, for example, examplebucket.
bucketName := "examplebucket"
bucket, err := client.Bucket(bucketName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// If the image is in the root directory of the bucket, specify the image name. If the image is not in the root directory, specify the full path, such as exampledir/example.jpg.
// Use the oss.Process method to build the processing instruction for QR code recognition.
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("data:", string(data))
}
PHP
Use PHP SDK 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 {
// Obtain access credentials from environment variables. Before you run this sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set.
$provider = new EnvironmentVariableCredentialsProvider();
// Set endpoint to the endpoint of the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
$endpoint = 'https://oss-cn-hangzhou.aliyuncs.com';
// Specify the bucket name, for example, examplebucket.
$bucket = 'examplebucket';
// If the image is in the root directory of the bucket, specify the image name. If the image is not in the root directory, specify the full path, such as exampledir/example.jpg.
$key = 'example.jpg';
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
// Specify the general-purpose region ID of Alibaba Cloud.
"region" => "cn-hangzhou"
);
$ossClient = new OssClient($config);
// Build the processing instruction for QR code recognition.
$options[$ossClient::OSS_PROCESS] = "image/codes";
$result = $ossClient->getObject($bucket,$key,$options);
var_dump($result);
} catch (OssException $e) {
printf($e->getMessage() . "\n");
return;
}
Parâmetros
Ação: image/codes
Para mais informações sobre os parâmetros de resposta, consulte DetectImageCodes - Detect QR codes in an image.
Operações de API relacionadas
Se sua aplicação exigir alto grau de personalização, envie solicitações REST API diretamente. Escreva manualmente o código para calcular a assinatura. Para mais detalhes sobre como calcular o cabeçalho de solicitação Authorization, consulte Signature V4 (recommended).
Processe imagens adicionando o parâmetro x-oss-process à operação GetObject. Para mais informações, consulte GetObject.
Exemplo de processamento
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
}
}
]
}
Permissões
Uma conta Alibaba Cloud possui permissões totais por padrão. Um usuário RAM (Resource Access Management) ou função RAM não tem permissões por padrão. Conceda permissões a um usuário ou função RAM utilizando uma RAM policy ou uma bucket policy.
-
Conceda ao usuário permissões para acessar os recursos associados.
-
Autorize o usuário a utilizar o OSS para processamento de dados.
API
Action
Descrição
GetObject
oss:GetObjectBaixar um objeto.
kms:DecryptEsta permissão é necessária para baixar um objeto caso seus metadados incluam X-Oss-Server-Side-Encryption: KMS.
Nenhuma
oss:ProcessImmPermissão para usar o IMM no processamento de dados por meio do OSS.
PostProcessTask
oss:PostProcessTaskPermissão para utilizar recursos de processamento de dados enviando solicitações POST, como no processamento assíncrono (
x-oss-async-process). -
Conceda ao usuário permissão para utilizar o recurso de reconhecimento de QR code do IMM.
API
Action
Descrição
DetectImageCodes
imm:DetectImageCodesPermissão para usar o IMM no reconhecimento de QR code.
-
-
Conceda à função de service do IMM (a função padrão é
AliyunIMMDefaultRole, e seu ARN éacs:ram:*:<account-id>:role/aliyunimmdefaultrole) permissões para acessar os recursos associados ao processamento de dados.API
Action
Descrição
GetObject
oss:GetObjectBaixar um objeto.
kms:DecryptEsta permissão é necessária para baixar um objeto caso seus metadados incluam X-Oss-Server-Side-Encryption: KMS.
Faturamento
O reconhecimento de QR codes envolve chamadas ao service IMM, gerando custos tanto para o OSS quanto para o IMM. Os seguintes itens são faturados:
-
OSS: Aplicam-se os itens faturáveis listados abaixo. Para mais informações sobre preços, consulte Preços do OSS:
API
Item faturável
Descrição
GetObject
Solicitações GET
Taxas de solicitação são cobradas com base na quantidade de solicitações bem-sucedidas.
Tráfego de saída pela Internet
Ao chamar a operação GetObject usando um endpoint público, como oss-cn-hangzhou.aliyuncs.com, ou um endpoint de aceleração, como oss-accelerate.aliyuncs.com, taxas de tráfego de saída pela Internet são cobradas conforme o volume de dados.
Recuperação de objetos IA
Se objetos IA forem recuperados, taxas de recuperação de dados IA serão aplicadas com base no tamanho dos dados recuperados.
Recuperação de objetos Archive em bucket com acesso em tempo real ativado
Ao recuperar objetos Archive em um bucket com acesso em tempo real habilitado, taxas de recuperação de dados Archive são cobradas conforme o tamanho dos objetos recuperados.
Taxas de aceleração de transferência
Caso a aceleração de transferência esteja ativada e um endpoint de aceleração seja usado para acessar o bucket, taxas de aceleração de transferência incidirão sobre o volume de dados.
-
IMM: Aplicam-se os seguintes itens faturáveis do IMM:
API
Item faturável
Descrição
DetectImageCodes
ImageQRCodes
Taxas de solicitação são cobradas com base na quantidade de solicitações bem-sucedidas.