Table of Contents

Penjelasan contoh aplikasi wechat pengenalan awan gambar

Artikel ini akan membawa Anda menganalisis kode contoh secara mendalam, membantu Anda memahami dan mengembangkan contoh Anda sendiri berdasarkan ini.

Untuk petunjuk pengunduhan dan konfigurasi sampel, silakan lihat Memulai dengan Cepat.

Pengaturan target pengenalan

Di manajemen pengenalan awan, unggah gambar pengenalan.

  • Nama gambar pengenalan: Beri nama target pengenalan, seperti "Panda".

  • Unggah gambar pengenalan: Pilih dan unggah gambar, gambar yang digunakan dalam sampel ini adalah:

    sample

  • Lebar: Lebar gambar pengenalan (cm). Tinggi gambar pengenalan akan dihitung secara otomatis oleh sistem berdasarkan gambar yang Anda unggah. Ukuran gambar pengenalan sesuai dengan ukuran konten virtual, tidak digunakan dalam sampel ini.

  • Meta: Informasi tambahan, umumnya digunakan untuk menyimpan informasi konten AR, konten yang digunakan dalam sampel ini:

    {"modelUrl": "https://sightp-assets.sightp.com/crs-mini/xiaoxiongmao.glb", "scale": 0.4}
    

sample

Pengambilan target pengenalan

Saat memanggil API pengenalan awan, setelah target dikenali, informasi target akan dikembalikan, strukturnya sebagai berikut:

{
  "statusCode" : 0,
  "result" : {
    "target" : {
      "targetId" : "375a4c2e********915ebc93c400",
      "meta" : "eyJtb2RlbFVybCI6ICJhc3NldC9tb2RlbC90cmV4X3YzLmZieCIsICJzY2FsZSI6IDAuMDJ9",
      "name" : "demo",
      "trackingImage": "/9j/4AAQSkZJRgABAQ************/9k=",
      "modified" : 1746609056804
    }
  },
  "date" : "2026-01-05T05:50:36.484Z",
  "timestamp" : 1767592236484
}
Kiat

Lihat informasi bidang lengkap di Referensi API

Dekode meta menggunakan base64 untuk mendapatkan informasi meta asli.

// data adalah data yang dikembalikan
const meta = data.result.target.meta;
const modelInfo = JSON.parse(atob(meta));
Catatan

Tidak ada metode atob di aplikasi mini WeChat, perlu diimplementasikan sendiri.

Metode implementasi ada di file direktori contoh libs/atob.js.

Penjelasan kode utama

  • components/easyar-cloud/easyar-cloud.js

    Menggunakan metode seperti wx.createCameraContext untuk membuka kamera, mengambil gambar, dan mengakses pengenalan awan.

  • components/easyar-ar/easyar-ar.js

    Menggunakan metode seperti xr-frame untuk membuka kamera, mengambil gambar, mengakses pengenalan awan, serta memutar video dan merender template.

  • components/libs/crs-client.js

    Metode pembuatan Token dan akses pengenalan awan.

Peringatan

Jangan gunakan API Key dan API Secret langsung di aplikasi klien (seperti Web, aplikasi mini WeChat, dll.).

Ini hanya untuk demonstrasi, saat digunakan di lingkungan produksi, harap hasilkan Token di sisi server.

Pemahaman mendalam kode

Jika Anda berharap mempelajari pengembangan pengenalan awan lebih dalam, sangat disarankan untuk membaca kode sumber sampel. Berdasarkan ini, Anda dapat mencoba memodifikasi dan memperluas kode sumber.

Kiat

Konten berikut didasarkan pada asumsi bahwa Anda telah memiliki kemampuan pengembangan HTML dan JavaScript tingkat tertentu. Jika Anda belum menguasai keterampilan dasar ini, disarankan untuk mempelajari pengetahuan terkait secara sistematis terlebih dahulu, untuk lebih memahami konten selanjutnya.

Mesin XR/3D yang digunakan di aplikasi mini WeChat adalah XR-FRAME, jika Anda tidak terbiasa, disarankan untuk merujuk ke dokumentasi terlebih dahulu.

Kami akan mengambil perenderan model 3D sebagai contoh untuk memperkenalkan penjelasan kode sumber utama dalam sampel.

UI dan pemrosesan adegan

Penjelasan file components\easyar-ar\easyar-ar.wxml.

Adegan XR dan pengaturan Marker.

<xr-scene ar-system="modes:Marker" id="xr-scene" bind:ready="handleReady" bind:ar-ready="handleARReady" bind:tick="handleTick">
    <xr-node>
        <xr-ar-tracker wx:if="{{markerImg != ''}}" mode="Marker" src="{{markerImg}}" id="arTracker"></xr-ar-tracker>
        <xr-camera id="camera" node-id="camera" position="0.8 2.2 -5" clear-color="0.925 0.925 0.925 1" background="ar" is-ar-camera></xr-camera>
    </xr-node>
    <xr-shadow id="shadow-root"></xr-shadow>
    <xr-node node-id="lights">
        <xr-light type="ambient" color="1 1 1" intensity="2" />
        <xr-light type="directional" rotation="180 0 0" color="1 1 1" intensity="1" />
    </xr-node>
</xr-scene>
Kiat

markerImg adalah alamat gambar pengenalan, akan dikembalikan saat pengenalan awan mengenali target.

Pemrosesan bisnis

Penjelasan kode utama file components\easyar-ar\easyar-ar.js.

handleTick() {
    // Ambil tangkapan layar dan kirim ke layanan pengenalan awan
    this.capture().then(base64 => this.crsClient.searchByBase64(base64.split('base64,').pop())).then(res => {
        // Hasil yang dikembalikan oleh pengenalan awan
        console.info(res)

        // Mengembalikan 0 berarti tidak ada target yang dikenali
        if (res.statusCode != 0) {
            return;
        }

        const target = res.result.target;

        // Atur marker
        this.loadTrackingImage(target.trackingImage.replace(/[\r\n]/g, ''));

        // Deteksi dari informasi meta apakah model atau video
        try {
            const setting = JSON.parse(atob(target.meta));
            if (setting.modelUrl) {
                this.loadModel(target.targetId, setting);
            } else if (setting.videoUrl) {
                this.loadVideo(target.targetId, setting);
            }
        } catch (e) {
            console.error(e);

        }
    }).catch(err => {
        console.info(err)
    });
},

capture() {
    // Dapatkan gambar kamera
    const opt = { type: 'jpg', quality: this.properties.config.jpegQuality };
    if (this.scene.share.captureToDataURLAsync) {
        return this.scene.share.captureToDataURLAsync(opt);
    }

    return Promise.resolve(this.scene.share.captureToDataURL(opt));
},
Kiat

Lihat kode lengkap di file sumber contoh.

Pemrosesan pengenalan awan

Penjelasan metode utama file components/libs/crs-client.js.

Kirim data base64 gambar ke API layanan pengenalan awan.

searchByBase64(img) {
    const params = {
        image: img,
        notracking: 'false',
        appId: this.config.crsAppId,
    };

    return this.queryToken().then(token => {
        return new Promise((resolve, reject) => {
            wx.request({
                url: `${this.config.clientEndUrl}/search`,
                method: 'POST',
                data: params,
                header: {
                    'Authorization': token,
                    'content-type': 'application/json'
                },
                success: res => resolve(res.data),
                fail: err => reject(err),
            });
        });
    });
}

Efek yang diharapkan

  • Halaman beranda contoh

Efek yang diharapkan

  • Efek perenderan model

Topik terkait