All Products
Search
Document Center

Object Storage Service:Pengenalan kode QR

Last Updated:Mar 21, 2026

Deteksi kode QR dan barcode dalam gambar yang disimpan di OSS. Tanggapan berisi teks hasil dekode dari setiap kode beserta koordinat kotak pembatasnya dalam gambar.

Fitur ini didukung oleh Intelligent Media Management (IMM) dan hanya mendukung pemrosesan sinkron.

Kasus penggunaan

  • Alur pembayaran: Dekode kode QR yang tertanam dalam tangkapan layar atau struk pembayaran.

  • Pemasaran dan iklan: Ekstrak URL atau informasi produk dari kode QR pada gambar poster atau kemasan yang dipindai.

  • Moderasi konten: Identifikasi posisi kode QR atau barcode dalam gambar yang diunggah pengguna untuk menerapkan pengaburan atau efek buram lanjutan.

Batasan

  • Hanya mendukung pemrosesan sinkron (x-oss-process).

  • Mendeteksi hingga lima kode per gambar.

  • Akses anonim ditolak.

  • Kotak pembatas menggunakan representasi persegi panjang (Kiri, Atas, Lebar, Tinggi).

Prasyarat

Sebelum memulai, pastikan Anda telah:

Deteksi kode QR dan barcode

Gunakan aksi image/codes untuk mendeteksi semua kode QR dan barcode dalam objek gambar yang disimpan di OSS.

Python

Memerlukan OSS SDK untuk Python 2.18.4 atau versi lebih baru.

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

# Muat kredensial akses dari variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# Tentukan titik akhir wilayah tempat bucket berada.
endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
# Tentukan wilayah tempat bucket berada.
region = 'cn-hangzhou'
bucket = oss2.Bucket(auth, endpoint, 'examplebucket', region=region)

# Tentukan path lengkap objek. Contoh: exampledir/example.jpg.
key = 'example.jpg'

try:
    # Kirim permintaan deteksi kode QR.
    result = bucket.get_object(key, process='image/codes')
    print(result.read().decode('utf-8'))
except oss2.exceptions.OssError as e:
    print("Error:", e)

Java

Memerlukan OSS SDK untuk Java 3.17.4 atau versi 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 {
        // Tentukan titik akhir wilayah tempat bucket berada.
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Tentukan wilayah tempat bucket berada. Contoh: cn-hangzhou.
        String region = "cn-hangzhou";
        // Muat kredensial akses dari variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET.
        EnvironmentVariableCredentialsProvider credentialsProvider =
            CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Tentukan nama bucket.
        String bucketName = "examplebucket";
        // Tentukan path lengkap objek. Contoh: 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 {
            // Kirim permintaan deteksi kode QR.
            GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key);
            getObjectRequest.setProcess("image/codes");

            OSSObject ossObject = ossClient.getObject(getObjectRequest);

            // Baca tanggapan JSON.
            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

Memerlukan OSS SDK untuk Go 3.0.2 atau versi lebih baru.

package main

import (
	"fmt"
	"io"
	"os"

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

func main() {
	// Muat kredensial akses dari variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET.
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	// Buat klien OSS. Tentukan titik akhir dan wilayah tempat bucket berada.
	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)
	}

	// Kirim permintaan deteksi kode QR.
	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

Memerlukan OSS SDK untuk PHP 2.7.0 atau versi 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 {
    // Muat kredensial akses dari variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET.
    $provider = new EnvironmentVariableCredentialsProvider();
    // Tentukan titik akhir wilayah tempat bucket berada.
    $endpoint = 'https://oss-cn-hangzhou.aliyuncs.com';
    // Tentukan nama bucket.
    $bucket = 'examplebucket';
    // Tentukan path lengkap objek. Contoh: 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);

    // Kirim permintaan deteksi kode QR.
    $options[$ossClient::OSS_PROCESS] = "image/codes";
    $result = $ossClient->getObject($bucket, $key, $options);
    var_dump($result);
} catch (OssException $e) {
    printf($e->getMessage() . "\n");
}

Referensi API

Untuk akses API langsung, sertakan parameter x-oss-process=image/codes dalam permintaan GetObject. Hitung header Authorization menggunakan signature version 4. Untuk spesifikasi lengkap GetObject, 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 tanggapan

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

Bidang tanggapan

Array Codes berisi satu entri untuk setiap kode yang terdeteksi.

BidangTipeDeskripsi
ContentStringTeks atau URL hasil dekode dari kode QR atau barcode
Boundary.LeftIntegerKoordinat X pojok kiri atas, dalam piksel
Boundary.TopIntegerKoordinat Y pojok kiri atas, dalam piksel
Boundary.WidthIntegerLebar kotak pembatas, dalam piksel
Boundary.HeightIntegerTinggi kotak pembatas, dalam piksel
Untuk skema tanggapan lengkap, lihat DetectImageCodes.

Izin

Untuk pengenalan kode QR sinkron (x-oss-process=image/codes), berikan izin berikut.

Izin untuk pemanggil (RAM user atau RAM role)

Berikan izin kepada pemanggil menggunakan Kebijakan RAM atau kebijakan bucket.

APIAksiDeskripsi
GetObjectoss:GetObjectMembaca gambar sumber dari OSS
kms:DecryptHanya diperlukan jika objek dienkripsi dengan KMS (X-Oss-Server-Side-Encryption: KMS)
oss:ProcessImmMemanggil pemrosesan data IMM dari OSS
PostProcessTaskoss:PostProcessTaskHanya diperlukan untuk pemrosesan asinkron (x-oss-async-process)

Izin untuk peran layanan IMM

IMM memanggil OSS atas nama Anda menggunakan peran layanan default AliyunIMMDefaultRole (ARN: acs:ram:*:<account-id>:role/aliyunimmdefaultrole). Berikan peran ini izin berikut.

APIAksiDeskripsi
GetObjectoss:GetObjectMembaca gambar sumber
kms:DecryptHanya diperlukan jika objek dienkripsi dengan KMS

Izin untuk IMM

APITindakanDeskripsi
DetectImageCodesimm:DetectImageCodesMenjalankan pengenalan kode QR di IMM

Penagihan

Pengenalan kode QR menghasilkan biaya pada OSS dan IMM. Harga satuan bervariasi berdasarkan wilayah.

Biaya OSS — lihat atau harga OSS untuk tarif terkini.

Item penagihanDasar perhitungan
Permintaan GETPer permintaan yang berhasil
Trafik keluarUkuran data, saat diakses melalui titik akhir publik (misalnya, oss-cn-hangzhou.aliyuncs.com) atau titik akhir percepatan
Pengambilan data IAUkuran objek IA yang diambil
Pengambilan data ArchiveUkuran objek Archive yang diambil, saat akses real-time diaktifkan pada bucket
Akselerasi transferUkuran data, saat akselerasi transfer diaktifkan

Biaya IMM — lihat penagihan IMM untuk tarif terkini.

Item penagihanDasar perhitungan
ImageQRCodesPer permintaan DetectImageCodes yang berhasil