Table of Contents

Exemple de mini-programme WeChat pour la reconnaissance cloud d'images

Ce guide vous propose une analyse approfondie du code d'exemple pour vous aider à comprendre et à développer vos propres applications.

Pour les instructions de téléchargement et de configuration de l'exemple, veuillez consulter le Démarrage rapide.

Configuration de la cible de reconnaissance

Dans la gestion de la reconnaissance cloud, téléchargez une image de reconnaissance.

  • Nom de l'image de reconnaissance : Donnez un nom à la cible de reconnaissance, par exemple "Panda".

  • Télécharger l'image de reconnaissance : Sélectionnez et téléchargez une image. L'image utilisée dans cet exemple est :

    sample

  • Largeur : Largeur de l'image de reconnaissance (cm). La hauteur sera calculée automatiquement par le système en fonction de l'image téléchargée. La taille de l'image de reconnaissance correspond à la taille du contenu virtuel. Cet exemple ne l'utilise pas.

  • Meta : Informations supplémentaires, généralement utilisées pour stocker les informations de contenu AR. Dans cet exemple, le contenu utilisé est :

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

sample

Récupération de la cible de reconnaissance

Lors de l'appel de l'API de reconnaissance cloud, après la reconnaissance de la cible, les informations de la cible sont renvoyé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

Consultez les informations complètes des champs dans la Référence API

Décodez le meta en base64 pour obtenir les informations meta originales.

// data correspond aux données renvoyé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, qui doit être implémentée manuellement.

La méthode d'implémentation se trouve dans le fichier libs/atob.js du répertoire de l'exemple.

Explication du code principal

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

    Utilise wx.createCameraContext pour ouvrir la caméra, capturer des images et accéder à la reconnaissance cloud, entre autres méthodes.

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

    Utilise xr-frame pour ouvrir la caméra, capturer des images, accéder à la reconnaissance cloud et lire des vidéos ou afficher des modèles, entre autres méthodes.

  • components/libs/crs-client.js

    Méthodes pour la génération de Token et l'accès à la reconnaissance cloud.

Avertissement

N'utilisez pas directement l'API Key et l'API Secret dans les applications clientes (comme Web, mini-programmes WeChat, etc.).

Ici, cela ne sert qu'à des fins de démonstration. Pour un environnement de production, générez le Token côté serveur.

Compréhension approfondie du code

Si vous souhaitez approfondir vos connaissances sur le développement de la reconnaissance cloud, nous vous recommandons vivement de lire le code source de l'exemple. Vous pouvez ensuite essayer de modifier et d'étendre le code source.

Astuce

Les explications suivantes partent du principe que vous possédez déjà des compétences en développement HTML et JavaScript. Si ce n'est pas le cas, nous vous suggérons d'apprendre d'abord ces bases pour mieux comprendre la suite.

Le moteur XR/3D utilisé sur les mini-programmes WeChat est XR-FRAME. Si vous ne le connaissez pas, nous vous conseillons de consulter d'abord la documentation.

Nous allons prendre l'exemple du rendu d'un modèle 3D pour présenter les principales explications du code source dans l'exemple.

Interface utilisateur et gestion de la scène

Explication du fichier components\easyar-ar\easyar-ar.wxml.

Configuration de la scène XR et du marqueur.

<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 correspond à l'URL de l'image de reconnaissance, renvoyée lorsque la reconnaissance cloud identifie une cible.

Gestion des opérations

Explication du code principal du fichier components\easyar-ar\easyar-ar.js.

handleTick() {
    // Capture d'écran et envoi au service de reconnaissance cloud        
    this.capture().then(base64 => this.crsClient.searchByBase64(base64.split('base64,').pop())).then(res => {
        // Résultat renvoyé par la reconnaissance cloud
        console.info(res)

        // Un retour de 0 signifie qu'aucune cible n'a été reconnue
        if (res.statusCode != 0) {
            return;
        }

        const target = res.result.target;

        // Configuration du marqueur
        this.loadTrackingImage(target.trackingImage.replace(/[\r\n]/g, ''));

        // Vérification 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() {
    // Récupération de 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.

Gestion de la reconnaissance cloud

Explication de la méthode principale du fichier components/libs/crs-client.js.

Envoi des données en 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 attendu

  • Effet de rendu du modèle

Thèmes connexes