Fitur pengenalan kode QR mendeteksi beberapa kode QR atau barcode dalam berbagai gambar serta mengembalikan kotak pembatas dan konten teks untuk setiap kode yang terdeteksi. Sistem menganotasi kotak pembatas setiap kode QR atau barcode dan menampilkan konten teksnya dalam output.
Ikhtisar
Intelligent Media Management (IMM) menyediakan fitur pengenalan kode QR yang dapat digunakan untuk mendeteksi posisi dan konten satu atau beberapa kode QR atau barcode dari file gambar seperti foto dan tangkapan layar, serta mengembalikan informasi posisi dan teks yang disampaikan oleh kode tersebut. Informasi posisi mencakup koordinat sumbu-x pojok kiri atas, sumbu-y pojok kiri atas, lebar, dan tinggi, seperti yang ditunjukkan pada gambar berikut.
-
Kode QR

-
Barcode

Anda dapat menggunakan fitur pengenalan kode QR untuk mengimplementasikan pemindaian dan pembacaan kode QR atau barcode dalam aplikasi bisnis Anda, atau mengembangkan fitur untuk memblokir atau mengaburkan kode QR atau barcode dalam gambar berdasarkan hasil deteksi fitur ini.
Skenario
-
Pembayaran dengan kode QR: Pembayar dapat memindai kode QR untuk menyelesaikan pembayaran.
-
Pemasaran dan iklan dengan kode QR: Pemasar dan pengiklan dapat menambahkan kode QR ke poster dan kemasan produk untuk mempromosikan produk.
Catatan penggunaan
Hanya pemrosesan sinkron (x-oss-process) yang didukung.
Maksimal lima kode QR dapat dideteksi dalam satu gambar.
-
Akses anonim akan ditolak.
Cara menggunakan
Prasyarat
Anda telah mengaktifkan layanan Intelligent Media Management (IMM).
Menyambungkan proyek IMM. Untuk petunjuk cara menyambungkan proyek di Konsol Object Storage Service (OSS), lihat Memulai. Untuk menyambungkan proyek menggunakan API, lihat AttachOSSBucket - Menyambungkan bucket OSS.
Pengenalan kode QR
Action: image/codes
Java
Gunakan Java SDK 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 {
// Setel endpoint ke endpoint wilayah tempat bucket berada.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Tentukan informasi wilayah yang sesuai dengan endpoint, misalnya cn-hangzhou.
String region = "cn-hangzhou";
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Tentukan nama bucket.
String bucketName = "examplebucket";
// Jika gambar berada di direktori root bucket, tentukan nama gambarnya. Jika tidak berada di direktori root, tentukan path lengkapnya, seperti exampledir/example.jpg.
String key = "example.jpg";
// Buat instance OSSClient.
// Setelah instance OSSClient tidak digunakan lagi, panggil metode shutdown untuk melepaskan sumber daya.
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// Bangun instruksi pemrosesan untuk pengenalan kode QR.
GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key);
getObjectRequest.setProcess("image/codes");
// Gunakan metode getObject dan teruskan instruksi pemrosesan melalui parameter process.
OSSObject ossObject = ossClient.getObject(getObjectRequest);
// Baca dan cetak informasinya.
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 {
// Matikan OSSClient.
ossClient.shutdown();
}
}
}Python
Gunakan Python SDK 2.18.4 atau versi lebih baru.
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Setel endpoint ke endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), setel endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
# Tentukan ID wilayah umum Alibaba Cloud.
region = 'cn-hangzhou'
bucket = oss2.Bucket(auth, endpoint, 'examplebucket', region=region)
# Jika gambar berada di direktori root bucket, tentukan nama gambarnya. Jika tidak berada di direktori root, tentukan path lengkapnya, seperti exampledir/example.jpg.
key = 'example.jpg'
# Bangun instruksi pemrosesan untuk pengenalan kode QR.
process = 'image/codes'
try:
# Gunakan metode get_object dan teruskan instruksi pemrosesan melalui parameter process.
result = bucket.get_object(key, process=process)
# Baca dan cetak informasinya.
image_codes = result.read().decode('utf-8')
print("Image Codes:")
print(image_codes)
except oss2.exceptions.OssError as e:
print("Error:", e)Go
Gunakan Go SDK 3.0.2 atau versi 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 ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Buat instance OSSClient.
// Setel endpoint ke endpoint bucket. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), setel endpoint ke https://oss-cn-hangzhou.aliyuncs.com. Sesuaikan endpoint berdasarkan wilayah aktual Anda.
// Tentukan ID wilayah umum Alibaba Cloud, misalnya 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, misalnya examplebucket.
bucketName := "examplebucket"
bucket, err := client.Bucket(bucketName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Jika gambar berada di direktori root bucket, tentukan nama gambarnya. Jika tidak berada di direktori root, tentukan path lengkapnya, seperti exampledir/example.jpg.
// Gunakan metode oss.Process untuk membangun instruksi pemrosesan untuk pengenalan 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("data:", string(data))
}PHP
Gunakan PHP SDK 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 {
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
$provider = new EnvironmentVariableCredentialsProvider();
// Setel endpoint ke endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), setel endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
$endpoint = 'https://oss-cn-hangzhou.aliyuncs.com';
// Tentukan nama bucket, misalnya examplebucket.
$bucket = 'examplebucket';
// Jika gambar berada di direktori root bucket, tentukan nama gambarnya. Jika tidak berada di direktori root, tentukan path lengkapnya, seperti exampledir/example.jpg.
$key = 'example.jpg';
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
// Tentukan ID wilayah umum Alibaba Cloud.
"region" => "cn-hangzhou"
);
$ossClient = new OssClient($config);
// Bangun instruksi pemrosesan untuk pengenalan kode QR.
$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
Untuk informasi selengkapnya tentang parameter respons, lihat DetectImageCodes - Mendeteksi kode QR dalam gambar.
Operasi API terkait
Jika aplikasi Anda memerlukan kustomisasi tingkat tinggi, Anda dapat langsung mengirim permintaan REST API. Anda harus menulis kode secara manual untuk menghitung signature. Untuk informasi selengkapnya tentang cara menghitung header permintaan Authorization, lihat Signature V4 (disarankan).
Anda dapat memproses gambar dengan menambahkan parameter x-oss-process ke operasi GetObject. Untuk informasi selengkapnya, lihat GetObject.
Contoh pemrosesan
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 respons
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
}
}
]
}Izin
Akun Alibaba Cloud memiliki izin penuh secara default. Pengguna Resource Access Management (RAM) atau peran RAM tidak memiliki izin secara default. Anda dapat memberikan izin kepada pengguna RAM atau peran RAM menggunakan kebijakan RAM atau kebijakan bucket.
Berikan izin kepada pengguna untuk mengakses sumber daya terkait.
Berikan izin kepada pengguna untuk menggunakan OSS dalam pemrosesan data.
API
Action
Deskripsi
GetObject
oss:GetObjectMengunduh objek.
kms:DecryptIzin ini diperlukan untuk mengunduh objek jika metadata objek mencakup X-Oss-Server-Side-Encryption: KMS.
None
oss:ProcessImmIzin untuk menggunakan IMM dalam pemrosesan data melalui OSS.
PostProcessTask
oss:PostProcessTaskIzin untuk menggunakan fitur pemrosesan data dengan mengirim permintaan POST, seperti untuk pemrosesan asinkron (
x-oss-async-process).Berikan izin kepada pengguna untuk menggunakan fitur pengenalan kode QR IMM.
API
Action
Deskripsi
DetectImageCodes
imm:DetectImageCodesIzin untuk menggunakan IMM dalam pengenalan kode QR.
Berikan peran layanan untuk IMM (peran default adalah
AliyunIMMDefaultRole, dan ARN-nya adalahacs:ram:*:<account-id>:role/aliyunimmdefaultrole) izin untuk mengakses sumber daya terkait dalam pemrosesan data.API
Action
Deskripsi
GetObject
oss:GetObjectMengunduh objek.
kms:DecryptIzin ini diperlukan untuk mengunduh objek jika metadata objek mencakup X-Oss-Server-Side-Encryption: KMS.
Penagihan
Pengenalan kode QR melibatkan pemanggilan layanan IMM, yang menghasilkan biaya untuk OSS dan IMM. Biaya berikut dikenakan:
OSS: Item yang dapat ditagih berikut berlaku. Untuk informasi selengkapnya tentang harga, lihat Harga OSS:
API
Item yang dapat ditagih
Deskripsi
GetObject
Permintaan GET
Anda dikenai biaya permintaan berdasarkan jumlah permintaan yang berhasil.
Lalu lintas keluar Internet
Jika Anda memanggil operasi GetObject menggunakan titik akhir publik, seperti oss-cn-hangzhou.aliyuncs.com, atau titik akhir percepatan, seperti oss-accelerate.aliyuncs.com, Anda dikenai biaya lalu lintas keluar Internet berdasarkan ukuran data.
Pengambilan data IA
Jika data IA diambil, Anda dikenai biaya pengambilan data IA berdasarkan ukuran data IA yang diambil.
Pengambilan objek Archive dalam bucket yang diaktifkan akses real-time
Jika Anda mengambil objek Archive dalam bucket yang diaktifkan akses real-time, Anda dikenai biaya pengambilan data Archive berdasarkan ukuran objek Archive yang diambil.
Biaya akselerasi transfer
Jika Anda mengaktifkan akselerasi transfer dan menggunakan titik akhir percepatan untuk mengakses bucket Anda, Anda dikenai biaya akselerasi transfer berdasarkan ukuran data.
IMM: Item yang dapat ditagih IMM berikut berlaku:
API
Item yang dapat ditagih
Deskripsi
DetectImageCodes
ImageQRCodes
Anda dikenai biaya permintaan berdasarkan jumlah permintaan yang berhasil.