L'API Shape Detection détecte les visages, les codes-barres et le texte dans des images.
Qu'est-ce que l'API Shape Detection ?
Avec des API telles que navigator.mediaDevices.getUserMedia
et le sélecteur de photos de Chrome pour Android, il est devenu assez facile de capturer des images ou des données vidéo en direct à partir des caméras des appareils, ou d'importer des images locales. Jusqu'à présent, ces données d'image dynamiques, ainsi que les images statiques d'une page, n'étaient pas accessibles par du code, même si les images peuvent en fait contenir de nombreuses caractéristiques intéressantes, telles que des visages, des codes-barres et du texte.
Par exemple, auparavant, si les développeurs voulaient extraire de telles fonctionnalités sur le client pour créer un lecteur de code QR, ils devaient s'appuyer sur des bibliothèques JavaScript externes. Cela peut être coûteux du point de vue des performances et augmenter la taille globale de la page. D'autre part, des systèmes d'exploitation tels qu'Android, iOS et macOS, ainsi que les puces matérielles présentes dans les modules de caméra, disposent généralement déjà de détecteurs de fonctionnalités performants et hautement optimisés, tels qu'Android FaceDetector
ou CIDetector
, le détecteur de fonctionnalités générique iOS.
L'API Shape Detection expose ces implémentations via un ensemble d'interfaces JavaScript. Actuellement, les fonctionnalités compatibles sont la détection des visages via l'interface FaceDetector
, la détection de codes-barres via l'interface BarcodeDetector
et la détection de texte (reconnaissance optique des caractères) via l'interface TextDetector
.
Cas d'utilisation suggérés
Comme indiqué ci-dessus, l'API Shape Detection est actuellement compatible avec la détection de visages, de codes-barres et de texte. La liste à puces suivante contient des exemples de cas d'utilisation pour les trois fonctionnalités.
Détection de visages
- Les sites de réseaux sociaux ou de partage de photos en ligne permettent généralement à leurs utilisateurs d'annoter des personnes dans des images. En mettant en évidence les limites des visages détectés, cette tâche peut être facilitée.
- Les sites de contenu peuvent recadrer les images de manière dynamique en fonction des visages potentiellement détectés au lieu de s'appuyer sur d'autres méthodes heuristiques, ou mettre en évidence les visages détectés à l'aide d'effets de panoramique et de zoom de type Ken Burns, dans des formats semblables à ceux d'un article.
- Les sites de messagerie multimédia peuvent permettre à leurs utilisateurs de superposer des objets amusants tels que des lunettes de soleil ou des moustaches sur les points de repère identifiés.
Détection de codes-barres
- Les applications Web qui lisent les codes QR peuvent débloquer des cas d'utilisation intéressants, tels que les paiements en ligne ou la navigation sur le Web, ou utiliser des codes-barres pour établir des contacts sur les applications de messagerie.
- Les applications de shopping peuvent permettre aux utilisateurs de scanner les codes-barres EAN ou UPC des articles d'un magasin physique pour comparer les prix en ligne.
- Les aéroports peuvent fournir des kiosques Web permettant aux passagers de scanner les codes Aztec de leurs cartes d'embarquement afin d'afficher des informations personnalisées sur leurs vols.
Détection de texte
- Les sites de réseaux sociaux en ligne peuvent améliorer l'accessibilité des images générées par les utilisateurs en ajoutant les textes détectés en tant qu'attributs
alt
pour les balises<img>
lorsqu'aucune autre description n'est fournie. - Les sites de contenu peuvent utiliser la détection de texte pour éviter de placer des titres sur les images héros contenant du texte.
- Les applications Web peuvent utiliser la détection de texte pour traduire des textes tels que des menus de restaurant.
État actuel
Step | État |
---|---|
1. Créer une vidéo explicative | Fin |
2. Créer un brouillon initial de la spécification | Fin |
3. Recueillir des commentaires et itérer la conception | In progress |
4. Phase d'évaluation | Fin |
5. Lancement | Détection de code-barres Terminée |
Détection des visages en cours | |
Détection de texte en cours |
Utiliser l'API Shape Detection
Si vous souhaitez tester l'API Shape Detection localement, activez l'option #enable-experimental-web-platform-features
dans about://flags
.
Les interfaces des trois détecteurs, FaceDetector
, BarcodeDetector
et TextDetector
, sont similaires. Ils fournissent tous une méthode asynchrone unique appelée detect()
qui accepte un ImageBitmapSource
comme entrée (c'est-à-dire CanvasImageSource
, Blob
ou ImageData
).
Pour FaceDetector
et BarcodeDetector
, des paramètres facultatifs peuvent être transmis au constructeur du détecteur, ce qui permet de fournir des indications aux détecteurs sous-jacents.
Veuillez consulter attentivement la matrice de compatibilité dans l'explication pour obtenir une présentation des différentes plates-formes.
Utiliser BarcodeDetector
BarcodeDetector
renvoie les valeurs brutes du code-barres qu'il trouve dans le ImageBitmapSource
et les cadres de délimitation, ainsi que d'autres informations telles que les formats des codes-barres détectés.
const barcodeDetector = new BarcodeDetector({
// (Optional) A series of barcode formats to search for.
// Not all formats may be supported on all platforms
formats: [
'aztec',
'code_128',
'code_39',
'code_93',
'codabar',
'data_matrix',
'ean_13',
'ean_8',
'itf',
'pdf417',
'qr_code',
'upc_a',
'upc_e'
]
});
try {
const barcodes = await barcodeDetector.detect(image);
barcodes.forEach(barcode => searchProductDatabase(barcode));
} catch (e) {
console.error('Barcode detection failed:', e);
}
Utiliser FaceDetector
FaceDetector
renvoie toujours les cadres de délimitation des visages qu'il détecte dans ImageBitmapSource
. Selon la plate-forme, plus d'informations sur les repères de visage tels que les yeux, le nez ou la bouche peuvent être disponibles.
Il est important de noter que cette API ne détecte que les visages.
Elle n'identifie pas à qui un visage appartient.
const faceDetector = new FaceDetector({
// (Optional) Hint to try and limit the amount of detected faces
// on the scene to this maximum number.
maxDetectedFaces: 5,
// (Optional) Hint to try and prioritize speed over accuracy
// by, e.g., operating on a reduced scale or looking for large features.
fastMode: false
});
try {
const faces = await faceDetector.detect(image);
faces.forEach(face => drawMustache(face));
} catch (e) {
console.error('Face detection failed:', e);
}
Utiliser TextDetector
TextDetector
renvoie toujours les cadres de délimitation des textes détectés et, sur certaines plates-formes, les caractères reconnus.
const textDetector = new TextDetector();
try {
const texts = await textDetector.detect(image);
texts.forEach(text => textToSpeech(text));
} catch (e) {
console.error('Text detection failed:', e);
}
Détection de fonctionnalités
La simple vérification de l'existence des constructeurs pour détecter les fonctionnalités de l'API Shape Detection ne suffit pas. La présence d'une interface ne vous indique pas si la plate-forme sous-jacente prend en charge la fonctionnalité. Cela fonctionne comme prévu. C'est pourquoi nous recommandons une approche de programmation défensive en effectuant une détection de caractéristiques comme suit:
const supported = await (async () => 'FaceDetector' in window &&
await new FaceDetector().detect(document.createElement('canvas'))
.then(_ => true)
.catch(e => e.name === 'NotSupportedError' ? false : true))();
L'interface BarcodeDetector
a été mise à jour afin d'inclure une méthode getSupportedFormats()
, et des interfaces similaires ont été proposées pour FaceDetector
et TextDetector
.
await BarcodeDetector.getSupportedFormats();
/* On a macOS computer logs
[
"aztec",
"code_128",
"code_39",
"code_93",
"data_matrix",
"ean_13",
"ean_8",
"itf",
"pdf417",
"qr_code",
"upc_e"
]
*/
Cela vous permet de détecter la fonctionnalité dont vous avez besoin, par exemple le lecteur de code QR:
if (('BarcodeDetector' in window) &&
((await BarcodeDetector.getSupportedFormats()).includes('qr_code'))) {
console.log('QR code scanning is supported.');
}
C'est mieux que de masquer les interfaces, car même d'une plate-forme à l'autre, les capacités peuvent varier. Les développeurs doivent donc être encouragés à vérifier précisément la capacité (comme un format de code-barres ou un point de repère faciale particulier) dont ils ont besoin.
Systèmes d'exploitation compatibles
La détection de codes-barres est disponible sur macOS, ChromeOS et Android. Les services Google Play sont requis sur Android.
Bonnes pratiques
Tous les détecteurs fonctionnent de manière asynchrone, c'est-à-dire qu'ils ne bloquent pas le thread principal. Ne vous fiez donc pas à la détection en temps réel, mais laissez plutôt un certain temps au détecteur pour faire son travail.
Si vous êtes fan de Web Workers, vous serez heureux d'apprendre que les détecteurs y sont également exposés.
Les résultats de détection sont sérialisables et peuvent donc être transmis du nœud de calcul à l'application principale via postMessage()
. La démonstration illustre ce processus.
Toutes les implémentations de plate-forme ne sont pas compatibles avec toutes les fonctionnalités. Par conséquent, vérifiez attentivement la situation de l'assistance et utilisez l'API pour l'améliorer progressivement. Par exemple, certaines plates-formes peuvent être compatibles avec la détection des visages en soi, mais pas la détection des points de repère de visage (yeux, nez, bouche, etc.). L'existence et l'emplacement du texte peuvent être reconnus, mais pas le contenu textuel.
Commentaires
L'équipe Chrome et la communauté des normes Web souhaitent en savoir plus sur votre expérience avec l'API Shape Detection.
Décrivez-nous la conception de l'API.
Y a-t-il quelque chose dans l'API qui ne fonctionne pas comme prévu ? Ou manque-t-il des méthodes ou des propriétés dont vous avez besoin pour mettre en œuvre votre idée ? Vous avez une question ou un commentaire sur le modèle de sécurité ?
- Signalez un problème de spécification dans le dépôt GitHub de l'API Shape Detection ou ajoutez vos commentaires à un problème existant.
Un problème d'implémentation ?
Avez-vous détecté un bug dans l'implémentation de Chrome ? Ou l'implémentation est-elle différente des spécifications ?
- Signalez un bug à l'adresse https://new.crbug.com. Veillez à inclure autant de détails que possible, à des instructions simples pour reproduire le problème et à définir l'option Composants sur
Blink>ImageCapture
. Glitch est idéal pour partager des reproductions rapides et faciles.
Vous prévoyez d'utiliser l'API ?
Vous prévoyez d'utiliser l'API Shape Detection sur votre site ? Votre assistance publique nous aide à hiérarchiser les fonctionnalités et montre aux autres fournisseurs de navigateurs à quel point il est essentiel de les prendre en charge.
- Indiquez comment vous prévoyez de l'utiliser dans le fil de discussion sur le WICG Discourse.
- Envoyez un tweet à @ChromiumDev avec le hashtag
#ShapeDetection
, et indiquez-nous où et comment vous l'utilisez.
Liens utiles
- Explication publique
- Démonstration de l'API | Source de la démonstration de l'API
- Bug de suivi
- Entrée ChromeStatus.com
- Composant Blink:
Blink>ImageCapture