Die Shape Detection API erkennt Gesichter, Barcodes und Text in Bildern.
Was ist die Shape Detection API?
Mit APIs wie navigator.mediaDevices.getUserMedia
und der Bildauswahl von Chrome für Android ist es recht einfach, Bilder oder Live-Videodaten von Gerätekameras aufzunehmen oder lokale Bilder hochzuladen. Bisher waren diese dynamischen Bilddaten – ebenso wie statische Bilder auf einer Seite – über Code nicht zugänglich, obwohl die Bilder tatsächlich viele interessante Merkmale wie Gesichter, Barcodes und Text enthalten.
Wenn Entwickler beispielsweise in der Vergangenheit solche Funktionen auf dem Client extrahieren wollten, um einen QR-Code-Reader zu erstellen, mussten sie externe JavaScript-Bibliotheken verwenden. Dies könnte unter Leistungsgesichtspunkten teuer werden und die Gesamtgewichtung der Seite erhöhen. Auf der anderen Seite haben Betriebssysteme, einschließlich Android, iOS und macOS, aber auch Hardwarechips in Kameramodulen, in der Regel bereits leistungsstarke und hochoptimierte Funktionsdetektoren wie Android FaceDetector
oder den generischen Funktionsdetektor für iOS CIDetector
.
Die Shape Detection API stellt diese Implementierungen über eine Reihe von JavaScript-Schnittstellen zur Verfügung. Derzeit werden die Gesichtserkennung über die FaceDetector
-Oberfläche, die Barcodeerkennung über die BarcodeDetector
-Oberfläche und die Texterkennung (optische Zeichenerkennung, OCR) über die TextDetector
-Oberfläche unterstützt.
Empfohlene Anwendungsfälle
Wie oben beschrieben, unterstützt die Shape Detection API derzeit die Erkennung von Gesichtern, Barcodes und Text. Die folgende Aufzählungsliste enthält Beispiele für Anwendungsfälle für alle drei Funktionen.
Gesichtserkennung
- Soziale Netzwerke oder Foto-Sharing-Websites ermöglichen ihren Nutzern häufig, Personen auf Bildern mit Anmerkungen zu versehen. Diese Aufgabe kann dadurch erleichtert werden, dass die Grenzen der erkannten Gesichter hervorgehoben werden.
- Inhaltswebsites können Bilder anhand potenziell erkannter Gesichter dynamisch zuschneiden, anstatt sich auf andere Heuristiken zu verlassen, oder erkannte Gesichter mit Ken Burns-ähnlichen Schwenk- und Zoomeffekten in geschichtenähnlichen Formaten hervorheben.
- Auf Websites für Multimedia-Nachrichten können Nutzer lustige Objekte wie Sonnenbrille oder Schnurrbart über erkannte Gesichtsmerkmale einblenden.
Barcodeerkennung
- Webanwendungen, die QR-Codes lesen, können interessante Anwendungsfälle wie Onlinezahlungen oder die Webnavigation entsperren oder Barcodes verwenden, um in Messenger-Anwendungen soziale Verbindungen herzustellen.
- In Shopping-Apps können Nutzer EAN- oder UPC-Barcodes von Artikeln in einem Geschäft scannen, um Preise online zu vergleichen.
- Flughäfen können Webkioske bereitstellen, an denen Fahrgäste die Aztec-Codes ihrer Bordkarten scannen können, um personalisierte Informationen zu ihren Flügen anzuzeigen.
Texterkennung
- Online-Websites sozialer Netzwerke können die Zugänglichkeit von nutzergenerierten Bildinhalten verbessern, indem erkannte Texte als
alt
-Attribute für<img>
-Tags hinzugefügt werden, wenn keine anderen Beschreibungen angegeben sind. - Inhaltswebsites können die Texterkennung verwenden, um zu vermeiden, dass Überschriften auf Hero-Images mit enthaltenem Text platziert werden.
- Webanwendungen können die Texterkennung verwenden, um Texte zu übersetzen, z. B. Speisekarten von Restaurants.
Aktueller Status
Step | Status |
---|---|
1. Erklärende Erklärung erstellen | Abschließen |
2. Ersten Entwurf der Spezifikation erstellen | Abschließen |
3. Feedback einholen und Design iterieren | In Bearbeitung |
4. Ursprungstest | Abschließen |
5. Starten | Barcodeerkennung Abgeschlossen |
Gesichtserkennung wird ausgeführt | |
Texterkennung wird ausgeführt |
Shape Detection API verwenden
Wenn Sie die Shape Detection API lokal testen möchten, aktivieren Sie in about://flags
das Flag #enable-experimental-web-platform-features
.
Die Schnittstellen aller drei Detektoren FaceDetector
, BarcodeDetector
und TextDetector
sind ähnlich. Alle bieten eine einzelne asynchrone Methode namens detect()
, die ein ImageBitmapSource
als Eingabe annimmt (d. h. entweder CanvasImageSource
, Blob
oder ImageData
).
Für FaceDetector
und BarcodeDetector
können optionale Parameter an den Konstruktor des Detektors übergeben werden, mit denen Hinweise für die zugrunde liegenden Detektoren bereitgestellt werden können.
Sehen Sie sich in der Erklärung die Supportmatrix an, um einen Überblick über die verschiedenen Plattformen zu erhalten.
Mit dem BarcodeDetector
arbeiten
Der BarcodeDetector
gibt die in ImageBitmapSource
und den Begrenzungsrahmen gefundenen Barcode-Rohwerte sowie andere Informationen wie die Formate der erkannten Barcodes zurück.
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);
}
Mit dem FaceDetector
arbeiten
Der FaceDetector
gibt immer die Begrenzungsrahmen der Gesichter zurück, die im ImageBitmapSource
erkannt werden. Je nach Plattform können auch weitere Informationen zu Gesichtspunkten wie Augen, Nase oder Mund verfügbar sein.
Beachten Sie, dass diese API nur Gesichter erkennt.
Sie kann nicht ermitteln, wem ein Gesicht gehört.
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);
}
Mit dem TextDetector
arbeiten
TextDetector
gibt immer die Begrenzungsrahmen der erkannten Texte und auf einigen Plattformen die erkannten Zeichen zurück.
const textDetector = new TextDetector();
try {
const texts = await textDetector.detect(image);
texts.forEach(text => textToSpeech(text));
} catch (e) {
console.error('Text detection failed:', e);
}
Funktionserkennung
Es reicht nicht aus, nur zu prüfen, ob Konstruktoren vorhanden sind, um die Shape Detection API zu erkennen. Das Vorhandensein einer Benutzeroberfläche sagt nichts darüber aus, ob die zugrunde liegende Plattform die Funktion unterstützt. Das funktioniert wie beabsichtigt. Wir empfehlen daher einen defensiven Programmieransatz mit einer Featureerkennung wie der folgenden:
const supported = await (async () => 'FaceDetector' in window &&
await new FaceDetector().detect(document.createElement('canvas'))
.then(_ => true)
.catch(e => e.name === 'NotSupportedError' ? false : true))();
Die Schnittstelle BarcodeDetector
wurde aktualisiert und enthält nun eine getSupportedFormats()
-Methode. Es wurden ähnliche Schnittstellen für FaceDetector
und für TextDetector
vorgeschlagen.
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"
]
*/
So können Sie die jeweils benötigte Funktion erkennen, z. B. das Scannen des QR-Codes:
if (('BarcodeDetector' in window) &&
((await BarcodeDetector.getSupportedFormats()).includes('qr_code'))) {
console.log('QR code scanning is supported.');
}
Dies ist besser, als die Schnittstellen zu verstecken, da die Funktionen selbst auf verschiedenen Plattformen variieren können. Daher sollten Entwickler ermutigt werden, genau die Funktionen zu prüfen (z. B. ein bestimmtes Barcodeformat oder Gesichtsmerkmale), die sie benötigen.
Betriebssystemunterstützung
Die Barcodeerkennung ist unter macOS, ChromeOS und Android verfügbar. Unter Android sind Google Play-Dienste erforderlich.
Best Practices
Alle Detektoren arbeiten asynchron, d. h. sie blockieren nicht den Hauptthread. Verlassen Sie sich also nicht auf die Echtzeiterkennung, sondern lassen Sie dem Detektor etwas Zeit für seine Arbeit.
Wenn Sie ein Fan von Web Workers sind, wird es Sie freuen, dass auch dort Detektoren verfügbar sind.
Die Erkennungsergebnisse sind seriell und können somit vom Worker über postMessage()
an die Hauptanwendung übergeben werden. Die Demo zeigt dies in Aktion.
Nicht alle Plattformimplementierungen unterstützen alle Funktionen. Prüfen Sie daher die Supportsituation sorgfältig und verwenden Sie die API schrittweise. Einige Plattformen unterstützen beispielsweise die Gesichtserkennung an sich, aber nicht die Erkennung von Sehenswürdigkeiten (Augen, Nase, Mund usw.). Oder die Existenz und die Position von Text werden möglicherweise erkannt, aber nicht von Textinhalten.
Feedback
Das Chrome-Team und die Webstandards-Community möchten gern mehr über Ihre Erfahrungen mit der Shape Detection API erfahren.
Informationen zum API-Design
Gibt es etwas an der API, das nicht so funktioniert, wie Sie es erwartet hatten? Oder fehlen Methoden oder Eigenschaften, die Sie zum Implementieren Ihrer Idee benötigen? Haben Sie eine Frage oder einen Kommentar zum Sicherheitsmodell?
- Sie können ein Spezifikationsproblem im GitHub-Repository für die Shape Detection API melden oder Ihre Gedanken zu einem vorhandenen Problem hinzufügen.
Probleme bei der Implementierung?
Haben Sie einen Fehler bei der Implementierung in Chrome gefunden? Oder unterscheidet sich die Implementierung von der Spezifikation?
- Melden Sie einen Fehler unter https://new.crbug.com. Geben Sie so viele Details wie möglich und eine einfache Anleitung zum Reproduzieren an. Setzen Sie Components (Komponenten) auf
Blink>ImageCapture
. Glitch eignet sich hervorragend zum Teilen von schnellen und einfachen Reproduktionen.
Möchten Sie die API verwenden?
Möchten Sie die Shape Detection API auf Ihrer Website verwenden? Ihre öffentliche Unterstützung hilft uns bei der Priorisierung von Funktionen und zeigt anderen Browseranbietern, wie wichtig es ist, sie zu unterstützen.
- Teile uns im WICG Discourse-Thread mit, wie du es verwenden möchtest.
- Sende einen Tweet mit dem Hashtag
#ShapeDetection
an @ChromiumDev und teile uns mit, wo und wie du es verwendest.
Nützliche Links
- Öffentliche Erklärung
- API-Demo | API-Demoquelle
- Tracking-Fehler
- ChromeStatus.com-Eintrag
- Blink-Komponente:
Blink>ImageCapture