全部产品
Search
文档中心

Object Storage Service:Pengenalan QR code

更新时间:Jul 06, 2025

Gunakan fitur pengenalan QR code untuk mendeteksi posisi dan isi satu atau lebih QR code atau barcode dari berbagai jenis file gambar. Fitur ini juga mengembalikan informasi posisi dan teks yang terkandung dalam kode tersebut.

Ikhtisar

Fitur pengenalan QR code memungkinkan Anda mendeteksi posisi dan isi QR code atau barcode dari file gambar seperti foto dan tangkapan layar. Informasi yang dikembalikan mencakup koordinat sumbu x pojok kiri atas, koordinat sumbu y pojok kiri atas, lebar, dan tinggi, seperti ditunjukkan pada gambar berikut.

  • QR code

    figqcode11

  • Barcode

    image

Fitur pengenalan QR code dapat digunakan untuk mengimplementasikan pemindaian dan pembacaan QR code atau barcode dalam aplikasi bisnis Anda. Selain itu, Anda dapat mengembangkan fitur untuk memblokir atau mem-pixelate QR code atau barcode dalam gambar berdasarkan kemampuan pengenalan QR code.

Skenario

  • Membayar dengan QR code: Pembayaran dapat diselesaikan dengan memindai QR code.

  • Pemasaran dan periklanan dengan QR code: Tambahkan QR code ke poster dan kemasan produk untuk mempromosikan produk.

Catatan penggunaan

  • Pengenalan QR code hanya mendukung pemrosesan sinkron (x-oss-process).

  • Jumlah maksimum QR code yang dapat diidentifikasi dalam satu gambar adalah lima.

  • Akses anonim tidak diizinkan.

Bagaimana cara menggunakan pengenalan QR code

Prasyarat

  • Intelligent Media Management (IMM) harus diaktifkan. Untuk detail lebih lanjut, lihat Aktifkan IMM.

  • Proyek IMM harus terikat ke bucket. Untuk panduan mengikat proyek IMM ke bucket melalui konsol Object Storage Service (OSS), lihat Memulai. Untuk informasi tentang cara mengikat bucket ke proyek IMM menggunakan API IMM, lihat AttachOSSBucket.

Pengenalan QR code

Java

Diperlukan OSS SDK for Java versi 3.17.4 atau lebih baru.

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 {
        // Tentukan endpoint wilayah tempat bucket berada.
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Tentukan wilayah tempat bucket berada. Contoh: cn-hangzhou.
        String region = "cn-hangzhou";
        // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Tentukan nama bucket.
        String bucketName = "examplebucket";
        // Jika gambar disimpan di direktori root bucket, masukkan nama gambar. Jika gambar tidak disimpan di direktori root bucket, Anda harus menentukan jalur lengkap gambar. Contoh: exampledir/example.jpg.
        String key = "example.jpg";

        // Buat instance OSSClient.
        // Panggil metode shutdown untuk melepaskan sumber daya ketika OSSClient tidak lagi digunakan.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();

        try {
            // Buat instruksi pemrosesan untuk mendeteksi QR code dalam gambar.
            GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key);
            getObjectRequest.setProcess("image/codes");

            // Gunakan parameter proses metode getObject untuk meneruskan instruksi pemrosesan.
            OSSObject ossObject = ossClient.getObject(getObjectRequest);

            // Baca dan tampilkan hasilnya.
            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("Kode Gambar:");
            System.out.println(imageCodes);
        } catch (IOException e) {
            System.out.println("Error: " + e.getMessage());
        } finally {
            // Matikan instance OSSClient.
            ossClient.shutdown();
        }
    }
}

Python

Diperlukan OSS SDK for Python versi 2.18.4 atau lebih baru.

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

# Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
# Tentukan ID wilayah Alibaba Cloud tempat bucket berada.
region = 'cn-hangzhou'
bucket = oss2.Bucket(auth, endpoint, 'examplebucket', region=region)

# Jika gambar disimpan di direktori root bucket, masukkan nama gambar. Jika gambar tidak disimpan di direktori root bucket, Anda harus menentukan jalur lengkap gambar. Contoh: exampledir/example.jpg.
key = 'example.jpg'

# Buat instruksi pemrosesan untuk mendeteksi QR code dalam gambar.
process = 'image/codes'

try:
    # Gunakan metode get_object dan teruskan instruksi pemrosesan menggunakan parameter proses.
    result = bucket.get_object(key, process=process)

    # Baca dan tampilkan hasilnya.
    image_codes = result.read().decode('utf-8')
    print("Kode Gambar:")
    print(image_codes)
except oss2.exceptions.OssError as e:
    print("Error:", e)

Go

Diperlukan OSS SDK for Go versi 3.0.2 atau lebih baru.

package main

import (
	"fmt"
	"io"
	"os"

	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	// Dapatkan kredensial akses sementara dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	// Buat instance OSSClient.
	// Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint ke https://oss-cn-hangzhou.aliyuncs.com. Tentukan endpoint sebenarnya Anda.
	// Tentukan ID wilayah Alibaba Cloud tempat bucket berada. Contoh: 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)
	}
	// Tentukan nama bucket. Contoh: examplebucket.
	bucketName := "examplebucket"

	bucket, err := client.Bucket(bucketName)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	// Jika gambar disimpan di direktori root bucket, masukkan nama gambar. Jika gambar tidak disimpan di direktori root bucket, Anda harus menentukan jalur lengkap gambar. Contoh: exampledir/example.jpg.
	// Gunakan metode oss.Process untuk membuat instruksi pemrosesan untuk mendeteksi QR code dalam gambar.
	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

Diperlukan OSS SDK for PHP versi 2.7.0 atau lebih baru.

<?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 {
    // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
    $provider = new EnvironmentVariableCredentialsProvider(); 
    // Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
    $endpoint = 'https://oss-cn-hangzhou.aliyuncs.com';
    // Tentukan nama bucket. Contoh: examplebucket.
    $bucket = 'examplebucket';
    // Jika gambar disimpan di direktori root bucket, masukkan nama gambar. Jika gambar tidak disimpan di direktori root bucket, Anda harus menentukan jalur lengkap gambar. Contoh: exampledir/example.jpg.
    $key = 'example.jpg'; 

    $config = array(
        "provider" => $provider,
        "endpoint" => $endpoint,        
        "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
        // Tentukan ID wilayah Alibaba Cloud tempat bucket berada.
        "region" => "cn-hangzhou"
    );
    $ossClient = new OssClient($config);
  // Buat instruksi pemrosesan untuk mendeteksi QR code dalam gambar.
  $options[$ossClient::OSS_PROCESS] = "image/codes";
  $result = $ossClient->getObject($bucket,$key,$options);
  var_dump($result);
} catch (OssException $e) {
  printf($e->getMessage() . "\n");
  return;
}

Parameter

Action: image/codes

Catatan

Untuk detail lebih lanjut tentang parameter respons, lihat DetectImageCodes.

Gunakan API OSS

Jika bisnis Anda memerlukan penyesuaian tingkat tinggi, Anda dapat langsung memanggil API RESTful. Untuk melakukan panggilan API secara langsung, Anda harus menyertakan perhitungan tanda tangan dalam kode Anda. Untuk informasi lebih lanjut tentang cara menghitung header Authorization, lihat (Direkomendasikan) Sertakan tanda tangan V4.

Anda dapat memproses gambar dengan menentukan parameter x-oss-process dalam permintaan GetObject. Untuk informasi lebih lanjut, lihat GetObject.

Contoh permintaan

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

Contoh respons sukses

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

Deskripsi izin

Secara default, akun Alibaba Cloud memiliki izin penuh terhadap sumber daya di akun tersebut. Namun, pengguna RAM dan peran RAM yang terkait dengan akun Alibaba Cloud awalnya tidak memiliki izin apa pun. Untuk mengelola sumber daya menggunakan pengguna RAM atau peran, Anda harus memberikan izin yang diperlukan kepada mereka. Untuk informasi lebih lanjut, lihat Kebijakan RAM dan Kebijakan Bucket.

  • Berikan pengguna RAM izin untuk mengakses sumber daya yang relevan.

    • Berikan pengguna RAM izin untuk melakukan operasi di OSS.

      API

      Action

      Deskripsi

      GetObject

      oss:GetObject

      Unduh objek.

      kms:Decrypt

      Saat mengunduh objek, izin operasi ini diperlukan jika metadata objek mencakup header X-Oss-Server-Side-Encryption: KMS.

      ProcessImm

      oss:ProcessImm

      Mengizinkan penggunaan kemampuan pemrosesan data IMM di OSS.

      PostProcessTask

      oss:PostProcessTask

      Mengizinkan akses ke kemampuan pemrosesan data menggunakan metode POST. Misalnya, izin ini diperlukan untuk menggunakan (x-oss-async-process).

    • Berikan pengguna RAM izin untuk menggunakan pengenalan QR code di IMM.

      API

      Action

      Deskripsi

      DetectImageCodes

      imm:DetectImageCodes

      Izin untuk menggunakan pengenalan QR code.

  • Berikan peran layanan IMM (default: AliyunIMMDefaultRole, ARN: acs:ram:*:<account-id>:role/aliyunimmdefaultrole) izin untuk mengakses sumber daya terkait untuk operasi pemrosesan data.

    API

    Action

    Deskripsi

    GetObject

    oss:GetObject

    Unduh objek.

    kms:Decrypt

    Saat mengunduh objek, izin operasi ini diperlukan jika metadata objek mencakup header X-Oss-Server-Side-Encryption: KMS.

Ringkasan penagihan

Selama pengenalan QR code, panggilan ke layanan IMM akan menimbulkan biaya pada layanan OSS dan IMM. Detailnya sebagai berikut:

  • Biaya OSS: Biaya berikut akan dikenakan. Untuk harga rinci, lihat Harga OSS:

    API

    Item yang dapat ditagih

    Deskripsi

    GetObject

    Permintaan GET

    Anda dikenakan biaya berdasarkan jumlah permintaan yang berhasil.

    Lalu lintas keluar melalui Internet

    Jika Anda memanggil operasi GetObject menggunakan endpoint publik, seperti oss-cn-hangzhou.aliyuncs.com, atau endpoint percepatan, seperti oss-accelerate.aliyuncs.com, Anda dikenakan biaya lalu lintas keluar melalui Internet berdasarkan ukuran data.

    Pengambilan objek IA

    Jika objek IA diambil, Anda dikenakan biaya pengambilan data IA berdasarkan ukuran data IA yang diambil.

    Pengambilan objek Arsip dalam bucket yang memiliki akses waktu nyata diaktifkan

    Jika Anda mengambil objek Arsip dalam bucket yang memiliki akses waktu nyata diaktifkan, Anda dikenakan biaya pengambilan data Arsip berdasarkan ukuran objek Arsip yang diambil.

    Biaya percepatan transfer

    Jika Anda mengaktifkan percepatan transfer dan menggunakan endpoint percepatan untuk mengakses bucket Anda, Anda dikenakan biaya percepatan transfer berdasarkan ukuran data.

  • Biaya IMM: Biaya berikut akan dikenakan. Untuk harga rinci, lihat Harga IMM:

    API

    Item yang dapat ditagih

    Deskripsi

    DetectImageCodes

    ImageQRCodes

    Anda dikenakan biaya berdasarkan jumlah permintaan yang berhasil.