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:
Menyambungkan Proyek IMM ke bucket Anda — melalui Konsol OSS atau API IMM AttachOSSBucket.
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: SignatureValueContoh 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.
| Bidang | Tipe | Deskripsi |
|---|---|---|
Content | String | Teks atau URL hasil dekode dari kode QR atau barcode |
Boundary.Left | Integer | Koordinat X pojok kiri atas, dalam piksel |
Boundary.Top | Integer | Koordinat Y pojok kiri atas, dalam piksel |
Boundary.Width | Integer | Lebar kotak pembatas, dalam piksel |
Boundary.Height | Integer | Tinggi 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.
| API | Aksi | Deskripsi |
|---|---|---|
| GetObject | oss:GetObject | Membaca gambar sumber dari OSS |
| — | kms:Decrypt | Hanya diperlukan jika objek dienkripsi dengan KMS (X-Oss-Server-Side-Encryption: KMS) |
| — | oss:ProcessImm | Memanggil pemrosesan data IMM dari OSS |
| PostProcessTask | oss:PostProcessTask | Hanya 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.
| API | Aksi | Deskripsi |
|---|---|---|
| GetObject | oss:GetObject | Membaca gambar sumber |
| — | kms:Decrypt | Hanya diperlukan jika objek dienkripsi dengan KMS |
Izin untuk IMM
| API | Tindakan | Deskripsi |
|---|---|---|
| DetectImageCodes | imm:DetectImageCodes | Menjalankan 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 penagihan | Dasar perhitungan |
|---|---|
| Permintaan GET | Per permintaan yang berhasil |
| Trafik keluar | Ukuran data, saat diakses melalui titik akhir publik (misalnya, oss-cn-hangzhou.aliyuncs.com) atau titik akhir percepatan |
| Pengambilan data IA | Ukuran objek IA yang diambil |
| Pengambilan data Archive | Ukuran objek Archive yang diambil, saat akses real-time diaktifkan pada bucket |
| Akselerasi transfer | Ukuran data, saat akselerasi transfer diaktifkan |
Biaya IMM — lihat penagihan IMM untuk tarif terkini.
| Item penagihan | Dasar perhitungan |
|---|---|
| ImageQRCodes | Per permintaan DetectImageCodes yang berhasil |