comment marche face-api.js

Pour toutes les discussions javascript, jQuery et autres frameworks
Répondre
ToniiBclt
Messages : 1
Enregistré le : 12 févr. 2024, 20:29

comment marche face-api.js

Message par ToniiBclt » 12 févr. 2024, 20:36

Bonjour !
J'aimerais faire un site internet où, en envoyant une image de sa tête, elle soit collée sur un arrière plan choisi au préalable par le codeur. Je me suis servi de toute la documentation accessibles pour faire ce code qui permet de détecter un visage et de le coller sur une image de fond mais il ne fonctionne pas. Est- ce que quelqu'un pourrait m'aider à le corriger et le rendre fonctionnel ??

Merci beaucoup !!!

Code : Tout sélectionner

<script>
  const { faceapi } = require('face-api.js');

  async function handleImageUpload() {
      const inputImage = document.getElementById('inputImage');
      const outputCanvas = document.getElementById('outputCanvas');
      const ctx = outputCanvas.getContext('2d');
      errorMessage.textContent = '';

      const backgroundImage = new Image();
      backgroundImage.src = 'image-de-fond.jpg';
      await backgroundImage.decode();

      ctx.drawImage(backgroundImage, 0, 0, outputCanvas.width, outputCanvas.height);

      const userImage = new Image();
      userImage.src = URL.createObjectURL(inputImage.files[0]);
      await userImage.decode(); // Attendez que l'image soit chargée

      const detections = await faceapi.detectAllFaces(userImage).withFaceLandmarks().withFaceDescriptors();

      if (detections.length > 0) {
        const face = detections[0].detection.box;
        ctx.drawImage(userImage, face.x, face.y, face.width, face.height);
      } else {
        errorMessage.textContent = 'Veuillez sélectionner une image avec un visage clairement visible.';
      }
    }

    const inputImage = document.getElementById('inputImage');
    inputImage.addEventListener('change', handleImageUpload);
</script>

Avatar du membre
webmaster
Administrateur du site
Messages : 578
Enregistré le : 28 févr. 2017, 15:19

Re: comment marche face-api.js

Message par webmaster » 15 févr. 2024, 15:19

J'ai essayé d'installer ce package qui a l'air marrant

Mais il n'est pas assez maintenu, et des vulnérabilités graves sont présentes et non réparable avec un audit fix :

Code : Tout sélectionner

# npm audit report

node-fetch  <=2.6.6
Severity: high
The `size` option isn't honored after following a redirect in node-fetch - https://github.com/advisories/GHSA-w7rc-rwvf-8q5r
node-fetch forwards secure headers to untrusted sites - https://github.com/advisories/GHSA-r683-j2x4-v87g
fix available via `npm audit fix`
node_modules/node-fetch
  @tensorflow/tfjs-core  1.1.0 - 2.4.0
  Depends on vulnerable versions of node-fetch
  node_modules/tfjs-image-recognition-base/node_modules/@tensorflow/tfjs-core
    tfjs-image-recognition-base  >=0.6.1
    Depends on vulnerable versions of @tensorflow/tfjs-core
    node_modules/tfjs-image-recognition-base

3 high severity vulnerabilities
Je préfère ne pas prendre de risque
TJS : 25 ans et mon livre Tout JavaScript chez Dunod
https://www.toutjavascript.com/livre/index.php

loudinitiative
Messages : 1
Enregistré le : 22 févr. 2024, 09:41

Re: comment marche face-api.js

Message par loudinitiative » 22 févr. 2024, 09:44

It seems that you're trying to use the face-api.js library to detect faces in an image and then paste them onto a background image.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Face Detection</title>
</head>
<body>
<input type="file" id="inputImage">
<canvas id="outputCanvas"></canvas>
<div id="errorMessage"></div>

<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs"></script>
<script src="https://cdn.jsdelivr.net/npm/face-api.js"></script>
<script>
async function handleImageUpload() {
const inputImage = document.getElementById('inputImage');
const outputCanvas = document.getElementById('outputCanvas');
const errorMessage = document.getElementById('errorMessage');
const ctx = outputCanvas.getContext('2d');
errorMessage.textContent = '';

const backgroundImage = new Image();
backgroundImage.src = 'image-de-fond.jpg';
await backgroundImage.decode();

ctx.drawImage(backgroundImage, 0, 0, outputCanvas.width, outputCanvas.height);

const userImage = new Image();
userImage.src = URL.createObjectURL(inputImage.files[0]);
await userImage.decode(); // Wait for the image to load

const detections = await faceapi.detectAllFaces(userImage).withFaceLandmarks().withFaceDescriptors();

if (detections.length > 0) {
const face = detections[0].detection.box;
ctx.drawImage(userImage, face.x, face.y, face.width, face.height);
} else {
errorMessage.textContent = 'Please select an image with a clearly visible face.';
}
}

const inputImage = document.getElementById('inputImage');
inputImage.addEventListener('change', handleImageUpload);
</script>
</body>
</html>

lilycollins9x
Messages : 7
Enregistré le : 09 janv. 2024, 03:00

Re: comment marche face-api.js

Message par lilycollins9x » 02 avr. 2024, 10:14

Voici une version corrigée de votre code JavaScript avec ces problèmes résolus :fnaf

Code : Tout sélectionner

<script src="path/to/face-api.js"></script>

<script>
  async function handleImageUpload() {
    const inputImage = document.getElementById('inputImage');
    const outputCanvas = document.getElementById('outputCanvas');
    const errorMessage = document.getElementById('errorMessage'); // Ajout de cette ligne
    errorMessage.textContent = '';

    if (!inputImage.files || !inputImage.files[0]) {
      errorMessage.textContent = 'Veuillez sélectionner une image.';
      return;
    }

    const backgroundImage = new Image();
    backgroundImage.src = 'image-de-fond.jpg';
    backgroundImage.onload = () => {
      const ctx = outputCanvas.getContext('2d');
      ctx.drawImage(backgroundImage, 0, 0, outputCanvas.width, outputCanvas.height);

      const userImage = new Image();
      userImage.src = URL.createObjectURL(inputImage.files[0]);
      userImage.onload = async () => {
        const detections = await faceapi.detectAllFaces(userImage).withFaceLandmarks().withFaceDescriptors();
        if (detections.length > 0) {
          const face = detections[0].detection.box;
          ctx.drawImage(userImage, face.x, face.y, face.width, face.height);
        } else {
          errorMessage.textContent = 'Veuillez sélectionner une image avec un visage clairement visible.';
        }
      };
    };
  }

  const inputImage = document.getElementById('inputImage');
  inputImage.addEventListener('change', handleImageUpload);
</script>
Assurez-vous d'avoir les éléments HTML suivants dans votre document HTML :

Code : Tout sélectionner

<input type="file" id="inputImage">
<canvas id="outputCanvas" width="600" height="400"></canvas>
<div id="errorMessage"></div>
Avec ces modifications, votre code devrait fonctionner correctement pour détecter les visages dans une image et les superposer sur une image de fond. Si vous rencontrez d'autres problèmes, n'hésitez pas à demander de l'aide !

Maskinla
Messages : 1
Enregistré le : 03 avr. 2024, 04:21

Re: comment marche face-api.js

Message par Maskinla » 03 avr. 2024, 04:23

Using the library to find faces in photos and then cutting and pasting them onto a different background seems to be your goal.
run 3

Répondre