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 Fotoauswahl von Chrome für Android ist es ziemlich einfach geworden, Bilder oder Live-Videodaten von Gerätekameras aufzunehmen oder lokale Bilder hochzuladen. Bisher war der Zugriff auf diese dynamischen Bilddaten – ebenso wie auf statische Bilder auf einer Seite – nicht per Code möglich, obwohl Bilder viele interessante Merkmale wie Gesichter, Barcodes und Text enthalten können.
Wenn Entwickler in der Vergangenheit beispielsweise solche Funktionen auf dem Client extrahieren wollten, um einen QR-Code-Reader zu erstellen, mussten sie auf externe JavaScript-Bibliotheken zurückgreifen. Das kann sich aus Leistungsgründen negativ auswirken und das Gesamtgewicht der Seite erhöhen. Betriebssysteme wie Android, iOS und macOS, aber auch Hardwarechips in Kameramodulen, verfügen in der Regel bereits über leistungsstarke und hochoptimierte Merkmalsdetektoren wie den Android-Merkmalsdetektor FaceDetector
oder den generischen Merkmalsdetektor von iOS CIDetector
.
Die Shape Detection API stellt diese Implementierungen über eine Reihe von JavaScript-Schnittstellen bereit. Derzeit werden die Gesichtserkennung über die FaceDetector
-Benutzeroberfläche, die Barcodeerkennung über die BarcodeDetector
-Benutzeroberfläche und die Texterkennung (Optische Zeichenerkennung, OCR) über die TextDetector
-Benutzeroberflä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ählung enthält Beispiele für Anwendungsfälle für alle drei Funktionen.
Gesichtserkennung
- In Online-Sozialen Netzwerken oder auf Foto-Teilen-Websites können Nutzer häufig Personen in Bildern annotieren. Durch das Markieren der Grenzen der erkannten Gesichter kann diese Aufgabe erleichtert werden.
- Anbieter von Content-Websites können Bilder dynamisch anhand potenziell erkannter Gesichter zuschneiden, anstatt sich auf andere Heuristiken zu verlassen. Außerdem können sie erkannte Gesichter in storyähnlichen Formaten mit Ken-Burns-Effekten wie Schwenken und Zoomen hervorheben.
- Auf Multimedia-Messaging-Websites können Nutzer lustige Objekte wie Sonnenbrillen oder Schnurrbärte auf erkannte Gesichtsmerkmale legen.
Barcodeerkennung
- Webanwendungen, die QR-Codes lesen, können interessante Anwendungsfälle wie Onlinezahlungen oder Webnavigation ermöglichen oder Barcodes zum Aufbau sozialer Verbindungen in Messenger-Anwendungen verwenden.
- Shopping-Apps können Nutzern die Möglichkeit bieten, EAN- oder UPC-Barcodes von Artikeln in einem Geschäft zu scannen, um Preise online zu vergleichen.
- Flughäfen können Webkioske bereitstellen, an denen Passagiere die Aztec-Codes ihrer Bordkarten scannen können, um personalisierte Informationen zu ihren Flügen aufzurufen.
Texterkennung
- Online-Plattformen für soziale Netzwerke können die Barrierefreiheit von von Nutzern erstellten Bildinhalten verbessern, indem sie erkannten Text als
alt
-Attribute für<img>
-Tags hinzufügen, wenn keine anderen Beschreibungen angegeben werden. - Mit der Texterkennung können Content-Websites verhindern, dass Überschriften auf Hero-Bildern mit Text platziert werden.
- Webanwendungen können die Texterkennung verwenden, um Texte wie Speisekarten zu übersetzen.
Aktueller Status
Schritt | Status |
---|---|
1. Erläuternde Mitteilung 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 In Bearbeitung | |
Texterkennung In Arbeit |
Shape Detection API verwenden
Wenn Sie die Shape Detection API lokal testen möchten, aktivieren Sie das Flag #enable-experimental-web-platform-features
in about://flags
.
Die Benutzeroberflächen aller drei Sensoren, FaceDetector
, BarcodeDetector
und TextDetector
, sind ähnlich. Sie bieten alle eine einzelne asynchrone Methode namens detect()
, die eine ImageBitmapSource
als Eingabe annimmt (d. h. entweder eine CanvasImageSource
, eine Blob
oder eine ImageData
).
Für FaceDetector
und BarcodeDetector
können optionale Parameter an den Konstruktor des Detektors übergeben werden, um Hinweise für die zugrunde liegenden Detektoren bereitzustellen.
In der Supportmatrix im Erläuterungsvideo finden Sie eine Übersicht über die verschiedenen Plattformen.
Mit dem BarcodeDetector
arbeiten
Die BarcodeDetector
gibt die Barcode-Rohwerte zurück, die in den ImageBitmapSource
und den Begrenzungsrahmen gefunden werden, sowie andere Informationen wie die Formate der erkannten Barcodes.
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
FaceDetector
gibt immer die Begrenzungsrahmen der Gesichter zurück, die in ImageBitmapSource
erkannt werden. Je nach Plattform sind möglicherweise weitere Informationen zu Gesichtsmerkmalen wie Augen, Nase oder Mund verfügbar.
Diese API erkennt nur Gesichter.
Es wird nicht ermittelt, 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 nach der Existenz der Konstruktoren zu suchen, um die Shape Detection API zu erkennen. Die Existenz einer Benutzeroberfläche gibt nicht an, ob die zugrunde liegende Plattform die Funktion unterstützt. Das ist normal. Daher empfehlen wir eine defensive Programmierung, bei der Sie die Funktion so erkennen:
const supported = await (async () => 'FaceDetector' in window &&
await new FaceDetector().detect(document.createElement('canvas'))
.then(_ => true)
.catch(e => e.name === 'NotSupportedError' ? false : true))();
Die BarcodeDetector
-Schnittstelle wurde um eine getSupportedFormats()
-Methode erweitert. Ähnliche Schnittstellen wurden 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 gewünschte Funktion finden, z. B. das Scannen von QR-Codes:
if (('BarcodeDetector' in window) &&
((await BarcodeDetector.getSupportedFormats()).includes('qr_code'))) {
console.log('QR code scanning is supported.');
}
Das ist besser als die Oberflächen auszublenden, da die Funktionen selbst zwischen Plattformen variieren können. Entwickler sollten daher genau die Funktion prüfen, die sie benötigen (z. B. ein bestimmtes Barcodeformat oder Gesichtsmerkmal).
Betriebssystemunterstützung
Die Barcodeerkennung ist unter macOS, ChromeOS und Android verfügbar. Google Play-Dienste sind auf Android-Geräten erforderlich.
Best Practices
Alle Sensoren arbeiten asynchron, d. h., sie blockieren nicht den Haupt-Thread. Verlassen Sie sich also nicht auf die Echtzeiterkennung, sondern geben Sie dem Detektor etwas Zeit, seine Arbeit zu erledigen.
Wenn Sie Webworker mögen, werden Sie sich freuen, dass auch dort Detectors verfügbar sind.
Die Erkennungsergebnisse sind serialisierbar und können daher über postMessage()
vom Worker an die Haupt-App übergeben werden. In der Demo wird dies veranschaulicht.
Nicht alle Plattformimplementierungen unterstützen alle Funktionen. Prüfen Sie daher die Supportsituation sorgfältig und verwenden Sie die API als progressive Verbesserung. So unterstützen einige Plattformen beispielsweise die Gesichtserkennung an sich, aber nicht die Erkennung von Gesichtsmerkmalen (Augen, Nase, Mund usw.). Oder es wird zwar erkannt, ob Text vorhanden ist und wo er sich befindet, aber nicht der Textinhalt.
Feedback
Das Chrome-Team und die Webstandards-Community möchten gerne wissen, wie Sie die Shape Detection API bisher erlebt haben.
Informationen zum API-Design
Funktioniert die API nicht wie erwartet? Fehlen Methoden oder Properties, die Sie für die Umsetzung Ihrer Idee benötigen? Haben Sie Fragen oder Kommentare zum Sicherheitsmodell?
- Reichen Sie ein Problem mit der Spezifikation im GitHub-Repository der Shape Detection API ein oder fügen Sie Ihre Anmerkungen zu einem vorhandenen Problem hinzu.
Problem bei der Implementierung?
Haben Sie einen Fehler in der Chrome-Implementierung gefunden? Oder unterscheidet sich die Implementierung von der Spezifikation?
- Melden Sie den Fehler unter https://new.crbug.com. Geben Sie so viele Details wie möglich an, machen Sie eine einfache Anleitung zur Reproduktion und setzen Sie Components auf
Blink>ImageCapture
. Glitcheignet sich hervorragend, um schnell und einfach Reproduktionen zu teilen.
Sie möchten die API verwenden?
Sie möchten die Shape Detection API auf Ihrer Website verwenden? Ihre öffentliche Unterstützung hilft uns, Funktionen zu priorisieren und zeigt anderen Browseranbietern, wie wichtig es ist, sie zu unterstützen.
- Teilen Sie im WICG-Discourse-Thread mit, wie Sie es verwenden möchten.
- Senden Sie einen Tweet an @ChromiumDev mit dem Hashtag
#ShapeDetection
und teilen Sie uns mit, wo und wie Sie ihn verwenden.
Nützliche Links
- Öffentliche Erläuterung
- API-Demo | API-Demo-Quellcode
- Tracking-Fehler
- Eintrag in ChromeStatus.com
- Blink-Komponente:
Blink>ImageCapture