Description de l'exemple de reconnaissance cloud d'images pour mini-programmes WeChat
Cet article vous guide dans une analyse approfondie du code sample afin de vous aider à le comprendre et à développer vos propres exemples sur cette base.
Pour le téléchargement et la configuration du sample, consultez Démarrage rapide.
Configuration de la cible de reconnaissance
Dans la gestion de la reconnaissance cloud, téléversez une image de reconnaissance.
Nom de l'image de reconnaissance : attribuez un nom à la cible de reconnaissance, par exemple « Panda ».
Téléverser l'image de reconnaissance : sélectionnez et téléversez une image. L'image utilisée dans ce sample est :

Largeur : largeur de l'image de reconnaissance (cm). La hauteur sera calculée automatiquement par le système selon l'image téléversée. La taille de l'image de reconnaissance correspond à celle du contenu virtuel ; elle n'est pas utilisée dans ce sample.
Meta: informations supplémentaires, généralement utilisées pour stocker les informations de contenu AR. Le contenu utilisé dans ce sample est :
{"modelUrl": "https://sightp-assets.sightp.com/crs-mini/xiaoxiongmao.glb", "scale": 0.4}

Obtention de la cible de reconnaissance
Après l'appel de l'API de reconnaissance cloud et la reconnaissance de la cible, les informations de cible sont retournées avec la structure suivante :
{
"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
}
Astuce
Pour les informations complètes des champs, consultez la Référence API
Décodez meta avec base64 pour obtenir les informations meta d'origine.
// data correspond aux données retournées
const meta = data.result.target.meta;
const modelInfo = JSON.parse(atob(meta));
Note
Les mini-programmes WeChat ne disposent pas de la méthode atob, vous devez donc l'implémenter vous-même.
L'implémentation se trouve dans le fichier libs/atob.js du répertoire de l'exemple.
Description du code principal
components/easyar-cloud/easyar-cloud.js
Méthodes utilisant
wx.createCameraContextpour ouvrir la caméra, capturer des images et accéder à la reconnaissance cloud.components/easyar-ar/easyar-ar.js
Méthodes utilisant xr-frame pour ouvrir la caméra, capturer des images, accéder à la reconnaissance cloud, lire des vidéos et rendre des templates.
components/libs/crs-client.js
Méthodes de génération de Token et d'accès à la reconnaissance cloud.
Avertissement
N'utilisez pas directement API Key ni API Secret dans les applications clientes (Web, mini-programmes WeChat, etc.).
Ceci est uniquement destiné à la démonstration. En production, générez le Token côté serveur.
Compréhension approfondie du code
Si vous souhaitez étudier plus en profondeur le développement de la reconnaissance cloud, il est fortement recommandé de lire le code source du sample. Sur cette base, vous pouvez essayer de modifier et d'étendre le code source.
Astuce
L'explication suivante suppose que vous possédez déjà un certain niveau de compétences en développement HTML et JavaScript. Si vous ne maîtrisez pas encore ces bases, il est recommandé de les apprendre systématiquement afin de mieux comprendre la suite.
Le moteur XR/3D utilisé sur les mini-programmes WeChat est XR-FRAME. Si vous ne le connaissez pas, il est recommandé de consulter d'abord la documentation.
Nous prendrons le rendu d'un modèle 3D comme exemple pour présenter les principales explications du code source dans le sample.
UI et traitement de la scène
Description du fichier components\easyar-ar\easyar-ar.wxml.
Configuration de la scène XR et du 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>
Astuce
markerImg est l'adresse de l'image de reconnaissance, retournée lorsque la reconnaissance cloud identifie une cible.
Traitement métier
Description du code principal du fichier components\easyar-ar\easyar-ar.js.
handleTick() {
// Capturer une image et l'envoyer au service de reconnaissance cloud
this.capture().then(base64 => this.crsClient.searchByBase64(base64.split('base64,').pop())).then(res => {
// Résultat retourné par la reconnaissance cloud
console.info(res)
// Un retour de 0 indique qu'aucune cible n'a été reconnue
if (res.statusCode != 0) {
return;
}
const target = res.result.target;
// Configurer le marker
this.loadTrackingImage(target.trackingImage.replace(/[\r\n]/g, ''));
// Détecter dans les informations meta s'il s'agit d'un modèle ou d'une vidéo
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() {
// Obtenir l'image de la caméra
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));
},
Astuce
Consultez le fichier source de l'exemple pour le code complet.
Traitement de la reconnaissance cloud
Description des principales méthodes du fichier components/libs/crs-client.js.
Envoyer les données base64 de l'image à l'API du service de reconnaissance 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),
});
});
});
}
Effet attendu
- Page d'accueil de l'exemple

- Effet de rendu du modèle