On peut supprimer le fond d’un portrait dans le navigateur sans transférer la photo vers un serveur d’inférence. Le navigateur décode le fichier sélectionné, un modèle de segmentation produit un masque de personne, puis Canvas transforme ce masque en transparence. Le PNG final est créé dans le même onglet.

Cette approche convient aux photos de profil, aux illustrations de présentation et aux vignettes où une personne constitue clairement le sujet. Elle ne demande ni API de traitement d’image, ni API Key, ni stockage temporaire du fichier. Elle ne doit toutefois pas être présentée comme une solution universelle pour détourer des produits, des animaux ou n’importe quel objet. Le modèle choisi est spécialisé dans les personnes.

Un outil local doit expliquer ce qui reste local

La confidentialité ne repose pas uniquement sur une phrase placée sous un bouton. Elle dépend du parcours réel des données. Dans l’outil Wisly, ce parcours est court :

  1. L’utilisateur choisit une image JPEG, PNG ou WebP.
  2. Le navigateur la décode en pixels dans sa propre mémoire.
  3. Un environnement WebAssembly exécute la segmentation de la personne.
  4. Le résultat devient un masque de transparence.
  5. Canvas compose la personne avec un fond transparent ou coloré.
  6. Le navigateur encode un PNG et lance son téléchargement.

Aucune requête d’inférence ne contient la photo. Il n’est pas nécessaire de la copier vers une base de données, un stockage objet ou un journal serveur. Wisly distribue le code, le runtime WebAssembly et le modèle depuis son propre domaine. Le fichier choisi reste une entrée locale pour les API du navigateur.

Traitement local ne veut pas dire fonctionnement hors ligne dès la première visite. La page, le code, WebAssembly et le modèle doivent d’abord être téléchargés. Le cache du navigateur peut les réutiliser, mais il ne garantit pas à lui seul un mode hors connexion. Une vraie application offline exige notamment un Service Worker, un inventaire des ressources et une politique de mise à jour. Il est donc plus exact d’annoncer un traitement local que de promettre un hors-ligne non implémenté.

Le modèle fournit un masque, pas une image détourée

Wisly utilise MediaPipe Image Segmenter avec le modèle Selfie Segmentation. La documentation de Google décrit la variante carrée comme un modèle float16 recevant une entrée de 256 × 256. Elle produit deux catégories : l’arrière-plan à l’index 0 et la personne à l’index 1. La fiche du modèle indique environ 249 Ko pour le modèle lui-même. Le runtime complet nécessaire dans le navigateur est plus volumineux que ce seul fichier.

La sortie utile est un masque de confiance. Chaque position contient une valeur qui représente la confiance du modèle dans la catégorie personne. Une valeur proche de 1 correspond à un premier plan probable. Une valeur proche de 0 correspond à l’arrière-plan. Les valeurs intermédiaires apparaissent souvent autour des cheveux, des épaules, d’un tissu translucide ou d’une zone floue.

Pour créer un canal alpha, l’application doit transformer ces valeurs continues en opacité. Un seuil brutal donnerait la règle suivante :

confiance supérieure au seuil : pixel conservé
confiance inférieure au seuil : pixel transparent

Cette règle produit facilement un bord sec et peut couper des mèches. Une transition progressive autour du seuil respecte mieux les contours incertains. Si elle devient trop large, elle peut conserver un halo provenant de l’ancien fond. Le réglage de douceur sert à déplacer cet équilibre.

Ce réglage ne relance pas le modèle. Il reprend le masque déjà calculé, recalcule l’alpha et recompose l’aperçu. La réponse peut donc être immédiate. En revanche, il ne peut pas recréer une main entière que le modèle aurait classée comme arrière-plan.

La composition Canvas et le choix du PNG

Plusieurs surfaces Canvas séparent les responsabilités. Une première contient l’image décodée. Une deuxième reçoit le masque de petite taille. Une troisième combine la photo et ce masque afin de ne garder que la personne. La dernière représente le fichier de sortie.

Le masque est agrandi avec interpolation jusqu’aux dimensions traitées. Son intensité devient le canal alpha de l’image d’origine. Pour conserver la transparence, la surface finale reste vide avant de recevoir la personne. Pour obtenir un fond blanc ou personnalisé, elle est d’abord remplie avec la couleur choisie.

Le téléchargement utilise PNG parce que ce format préserve la transparence. JPEG ne contient pas de canal alpha et doit remplacer chaque zone vide par une couleur. WebP peut gérer la transparence, mais PNG reste une sortie simple pour les logiciels de présentation, les éditeurs d’images, les documents et les avatars.

Une photo compressée peut occuper beaucoup plus de mémoire après décodage. Chaque pixel utilise quatre canaux, puis plusieurs Canvas coexistent pendant la composition. Pour éviter qu’une image issue d’un appareil récent ne bloque un téléphone, l’outil limite le fichier à 15 Mo et réduit le plus grand côté à 4096 pixels lorsque c’est nécessaire. L’interface signale cette réduction au lieu de prétendre préserver systématiquement la résolution d’origine.

Les photos qui fonctionnent le mieux

Selfie Segmenter cherche une personne dominante dans la scène. Un portrait bien éclairé, assez rapproché et visuellement distinct du décor constitue une bonne entrée. Un arrière-plan de couleur proche des cheveux, une forte contre-jour, un flou de mouvement ou une personne très petite rendent le masque moins fiable.

La fiche officielle mentionne plusieurs limites :

  • Les éléments fins, notamment les doigts, peuvent disparaître.
  • Le bruit, un éclairage dégradé et les mouvements rapides réduisent la qualité.
  • Une personne très éloignée de la caméra sort du domaine prévu.
  • Plusieurs personnes à des échelles très différentes forment un cas difficile.
  • Le modèle privilégie la réactivité sur de nombreux appareils et ne promet pas des contours parfaits au pixel près.

Ces limites sont cohérentes avec l’objectif du modèle. Une photo de profil rapide et une découpe de cheveux destinée à l’impression n’ont pas les mêmes exigences. Les cheveux très fins, les voiles transparents, les objets et les catalogues de produits demandent un modèle de matting plus spécialisé ou une étape manuelle de correction.

Le premier essai comprend plusieurs coûts

Le temps visible ne correspond pas seulement à l’inférence. Lors du premier usage, le navigateur télécharge et compile WebAssembly, charge le modèle, décode l’image et prépare les pixels. Il exécute ensuite la segmentation, redimensionne le masque, compose les Canvas et encode le PNG. Une deuxième image dans la même session réutilise le segmenter déjà initialisé.

Google publie des mesures sur des appareils de référence, mais elles ne garantissent pas un délai identique partout. Le navigateur, la mémoire disponible, le mode économie d’énergie et les dimensions de la photo influencent le résultat. Une interface honnête distingue donc le chargement du modèle du traitement de l’image, sans annoncer un nombre de secondes valable pour tous.

Le guide Web de MediaPipe précise également que l’appel segment() est synchrone et bloque temporairement le thread d’interface. Pour une image fixe occasionnelle, un état de traitement visible suffit souvent. Pour une vidéo ou un lot de photos, il faut déplacer la segmentation dans un Web Worker afin de préserver l’interactivité.

La licence fait partie de l’architecture

Une bibliothèque gratuite à essayer n’est pas nécessairement libre de toute obligation pour un site dont le code n’est pas publié. La licence du runtime et celle du modèle doivent être vérifiées avant le déploiement. Wisly utilise MediaPipe Tasks Vision et Selfie Segmentation sous Apache License 2.0. Une copie de la licence et les informations de provenance accompagnent les ressources distribuées.

La sécurité complète cette vérification. Les versions sont fixées, les fichiers connus sont servis depuis le même domaine et la politique de sécurité du contenu limite les scripts et connexions. Les erreurs ne doivent pas enregistrer le nom ou le contenu de l’image. Comme l’inférence reste locale, aucune clé secrète n’a sa place dans le code du navigateur.

Essayer le détourage local

L’outil pour supprimer le fond d’un portrait gratuitement applique ce flux. Il accepte une photo, exécute la segmentation locale, permet d’ajuster le contour et propose un fond transparent, blanc ou personnalisé avant le téléchargement du PNG.

Pour un premier test, choisissez un portrait net où la personne occupe une partie importante du cadre. La force de cette solution ne vient pas d’une promesse de perfection sur toutes les images. Elle vient d’une tâche précise, d’un parcours de données lisible, de limites connues et d’un résultat immédiatement réutilisable.