Todos os produtos
Search
Central de documentação

Object Storage Service:QR code recognition

Última atualização: Aug 13, 2026

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

    figqcode11

  • Código de barras

    image

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

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

Nota

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:GetObject

      Baixar um objeto.

      kms:Decrypt

      Esta permissão é necessária para baixar um objeto caso seus metadados incluam X-Oss-Server-Side-Encryption: KMS.

      Nenhuma

      oss:ProcessImm

      Permissão para usar o IMM no processamento de dados por meio do OSS.

      PostProcessTask

      oss:PostProcessTask

      Permissã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:DetectImageCodes

      Permissã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:GetObject

    Baixar um objeto.

    kms:Decrypt

    Esta 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.