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

Barcode

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
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: SignatureValueContoh 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:GetObjectUnduh objek.
kms:DecryptSaat mengunduh objek, izin operasi ini diperlukan jika metadata objek mencakup header
X-Oss-Server-Side-Encryption: KMS.ProcessImm
oss:ProcessImmMengizinkan penggunaan kemampuan pemrosesan data IMM di OSS.
PostProcessTask
oss:PostProcessTaskMengizinkan 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:DetectImageCodesIzin 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:GetObjectUnduh objek.
kms:DecryptSaat 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.