Descrizione dell'esempio di riconoscimento immagini cloud per mini program WeChat
Questo articolo guida l'utente in un'analisi approfondita del codice sample, aiutandolo a comprenderlo e a sviluppare esempi propri su questa base.
Per il download e la configurazione del sample, consultare Avvio rapido.
Configurazione del target di riconoscimento
Nella gestione del riconoscimento cloud, caricare un'immagine di riconoscimento.
Nome immagine di riconoscimento: assegnare un nome al target di riconoscimento, ad esempio "Panda".
Carica immagine di riconoscimento: selezionare e caricare un'immagine. L'immagine usata in questo sample è:

Larghezza: larghezza dell'immagine di riconoscimento (cm). L'altezza sarà calcolata automaticamente dal sistema in base all'immagine caricata. La dimensione dell'immagine di riconoscimento corrisponde alla dimensione del contenuto virtuale; questo sample non la usa.
Meta: informazioni aggiuntive, generalmente usate per memorizzare informazioni sui contenuti AR. Il contenuto usato in questo sample è:
{"modelUrl": "https://sightp-assets.sightp.com/crs-mini/xiaoxiongmao.glb", "scale": 0.4}

Ottenere il target di riconoscimento
Dopo aver chiamato l'API di riconoscimento cloud e riconosciuto il target, verranno restituite le informazioni del target con la seguente struttura:
{
"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
}
Consiglio
Per le informazioni complete sui campi, consultare API Reference
Decodificare meta con base64 per ottenere le informazioni meta originali.
// data sono i dati restituiti
const meta = data.result.target.meta;
const modelInfo = JSON.parse(atob(meta));
Nota
Nei mini program WeChat non esiste il metodo atob, quindi deve essere implementato autonomamente.
L'implementazione si trova nel file libs/atob.js nella directory dell'esempio.
Descrizione del codice principale
components/easyar-cloud/easyar-cloud.js
Metodi per usare
wx.createCameraContextper aprire la camera, acquisire immagini e accedere al riconoscimento cloud.components/easyar-ar/easyar-ar.js
Metodi per usare xr-frame per aprire la camera, acquisire immagini, accedere al riconoscimento cloud, riprodurre video e renderizzare template.
components/libs/crs-client.js
Metodi per generare Token e accedere al riconoscimento cloud.
Avvertenza
Non usare API Key e API Secret direttamente nelle applicazioni client (come Web, mini program WeChat, ecc.).
Questo è solo per dimostrazione. In produzione, generare Token sul lato server.
Comprendere il codice in profondità
Se si desidera approfondire lo sviluppo del riconoscimento cloud, si consiglia vivamente di leggere il source code del sample. Su questa base, è possibile provare a modificare ed estendere il source code.
Consiglio
La spiegazione seguente presuppone che l'utente abbia già un certo livello di competenze di sviluppo HTML e JavaScript. Se non si padroneggiano ancora queste basi, si consiglia di studiarle sistematicamente per comprendere meglio i contenuti successivi.
Il motore XR/3D usato nei mini program WeChat è XR-FRAME. Se non è familiare, si consiglia di consultare prima la documentazione.
Useremo il rendering di un modello 3D come esempio per introdurre le principali spiegazioni del source code nel sample.
UI e gestione della scena
Descrizione del file components\easyar-ar\easyar-ar.wxml.
Impostazione della scena XR e del 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>
Consiglio
markerImg è l'indirizzo dell'immagine di riconoscimento, restituito quando il riconoscimento cloud identifica un target.
Elaborazione business
Descrizione del codice principale del file components\easyar-ar\easyar-ar.js.
handleTick() {
// Acquisire lo screenshot e inviarlo al servizio di riconoscimento cloud
this.capture().then(base64 => this.crsClient.searchByBase64(base64.split('base64,').pop())).then(res => {
// Risultato restituito dal riconoscimento cloud
console.info(res)
// Il ritorno di 0 indica che non è stato riconosciuto alcun target
if (res.statusCode != 0) {
return;
}
const target = res.result.target;
// Impostare marker
this.loadTrackingImage(target.trackingImage.replace(/[\r\n]/g, ''));
// Rilevare dalle informazioni meta se si tratta di modello o 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() {
// Ottenere l'immagine della camera
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));
},
Consiglio
Per il codice completo, consultare il file sorgente dell'esempio.
Elaborazione del riconoscimento cloud
Descrizione dei metodi principali del file components/libs/crs-client.js.
Inviare i dati base64 dell'immagine all'API del servizio di riconoscimento cloud.
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),
});
});
});
}
Effetto previsto
- Pagina iniziale dell'esempio

- Effetto di rendering del modello