Tous les produits
Search
Centre de documentation

Object Storage Service:QR code recognition

Dernière mise à jour :Aug 18, 2026

La fonctionnalité de reconnaissance de codes QR détecte plusieurs codes QR ou codes-barres dans diverses images. Elle renvoie le cadre de délimitation et le contenu textuel de chaque code détecté. Le système annote le cadre de délimitation de chaque code QR ou code-barres et affiche son contenu textuel en sortie.

Présentation

Intelligent Media Management (IMM) propose la fonctionnalité de reconnaissance de codes QR. Celle-ci permet de détecter la position et le contenu d'un ou plusieurs codes QR ou codes-barres à partir de fichiers image, tels que des photos ou des captures d'écran, puis de renvoyer les informations de positionnement ainsi que le texte véhiculé par les codes. Les informations de positionnement incluent les coordonnées x et y du coin supérieur gauche, la largeur et la hauteur, comme illustré dans la figure suivante.

  • Code QR

    figqcode11

  • Code-barres

    image

Utilisez la fonctionnalité de reconnaissance de codes QR pour intégrer la numérisation et la lecture de codes QR ou de codes-barres dans vos applications métier. Vous pouvez également développer des fonctionnalités permettant de bloquer ou de pixelliser les codes QR ou codes-barres présents dans les images.

Scénarios

  • Paiement par code QR : les payeurs peuvent scanner un code QR pour effectuer un paiement.

  • Marketing et publicité avec codes QR : les professionnels du marketing et de la publicité peuvent ajouter des codes QR aux affiches et aux emballages de produits afin de promouvoir leurs offres.

Notes d'utilisation

  • Seul le traitement synchrone (x-oss-process) est pris en charge.

  • Un maximum de cinq codes QR peut être détecté dans une seule image.

  • L'accès anonyme est refusé.

Utilisation

Prérequis

Reconnaissance de codes QR

Action : image/codes

Java

Utilisez le SDK Java 3.17.4 ou une version ultérieure.

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

Utilisez le SDK Python 2.18.4 ou une version ultérieure.

# -*- 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

Utilisez le SDK Go 3.0.2 ou une version ultérieure.

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

Utilisez le SDK PHP 2.7.0 ou une version ultérieure.

<?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;
}

Paramètres

Action : image/codes

Remarque

Pour plus d'informations sur les paramètres de réponse, consultez la rubrique DetectImageCodes - Détecter les codes QR dans une image.

Opérations API associées

Si votre application nécessite un degré élevé de personnalisation, vous pouvez envoyer directement des requêtes REST API. Vous devez écrire manuellement le code pour calculer la signature. Pour savoir comment calculer l'en-tête de requête Authorization, consultez la rubrique Signature V4 (recommandée).

Vous pouvez traiter les images en ajoutant le paramètre x-oss-process à l'opération GetObject. Pour plus d'informations, consultez la rubrique GetObject.

Exemple de traitement

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

Exemple de réponse

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
      }
    }
  ]
}

Autorisations

Par défaut, un compte Alibaba Cloud dispose de toutes les autorisations. Un utilisateur RAM ou un rôle RAM ne dispose d'aucune autorisation par défaut. Vous pouvez accorder des autorisations à un utilisateur RAM ou à un rôle RAM à l'aide d'une politique RAM ou d'une politique de bucket.

  • Accordez à l'utilisateur les autorisations nécessaires pour accéder aux ressources associées.

    • Accordez à l'utilisateur les autorisations permettant d'utiliser OSS pour le traitement des données.

      API

      Action

      Description

      GetObject

      oss:GetObject

      Télécharger un objet.

      kms:Decrypt

      Cette autorisation est requise pour télécharger un objet si les métadonnées de l'objet incluent X-Oss-Server-Side-Encryption: KMS.

      Aucune

      oss:ProcessImm

      L'autorisation d'utiliser IMM pour le traitement des données via OSS.

      PostProcessTask

      oss:PostProcessTask

      L'autorisation d'utiliser les fonctionnalités de traitement des données en envoyant des requêtes POST, par exemple pour le traitement asynchrone (x-oss-async-process).

    • Accordez à l'utilisateur l'autorisation d'utiliser la fonctionnalité de reconnaissance de codes QR d'IMM.

      API

      Action

      Description

      DetectImageCodes

      imm:DetectImageCodes

      L'autorisation d'utiliser IMM pour la reconnaissance de codes QR.

  • Accordez au rôle de service pour IMM (le rôle par défaut est AliyunIMMDefaultRole, et son ARN est acs:ram:*:<account-id>:role/aliyunimmdefaultrole) les autorisations nécessaires pour accéder aux ressources associées afin d'effectuer le traitement des données.

    API

    Action

    Description

    GetObject

    oss:GetObject

    Télécharger un objet.

    kms:Decrypt

    Cette autorisation est requise pour télécharger un objet si les métadonnées de l'objet incluent X-Oss-Server-Side-Encryption: KMS.

Facturation

La reconnaissance de codes QR implique des appels au service IMM, ce qui génère des frais pour OSS et IMM. Les frais suivants s'appliquent :

  • OSS : les éléments facturables suivants s'appliquent. Pour plus d'informations sur les tarifs, consultez la page Tarification OSS :

    API

    Élément facturable

    Description

    GetObject

    Requêtes GET

    Des frais de requête vous sont facturés en fonction du nombre de requêtes abouties.

    Trafic sortant sur Internet

    Si vous appelez l'opération GetObject en utilisant un point de terminaison public, tel que oss-cn-hangzhou.aliyuncs.com, ou un point de terminaison d'accélération, tel que oss-accelerate.aliyuncs.com, des frais de trafic sortant sur Internet vous sont facturés en fonction de la taille des données.

    Récupération d'objets IA

    Si des objets IA sont récupérés, des frais de récupération de données IA vous sont facturés en fonction de la taille des données IA récupérées.

    Récupération d'objets Archive dans un bucket pour lequel l'accès en temps réel est activé

    Si vous récupérez des objets Archive dans un bucket pour lequel l'accès en temps réel est activé, des frais de récupération de données Archive vous sont facturés en fonction de la taille des objets Archive récupérés.

    Frais d'accélération du transfert

    Si vous activez l'accélération du transfert et utilisez un point de terminaison d'accélération pour accéder à votre bucket, des frais d'accélération du transfert vous sont facturés en fonction de la taille des données.

  • IMM : les éléments facturables IMM suivants s'appliquent :

    API

    Élément facturable

    Description

    DetectImageCodes

    ImageQRCodes

    Des frais de requête vous sont facturés en fonction du nombre de requêtes abouties.