De Shape Detection API detecteert gezichten, streepjescodes en tekst in afbeeldingen.
Wat is de vormdetectie-API?
Met API's zoals navigator.mediaDevices.getUserMedia
en de Chrome voor Android- fotokiezer is het vrij eenvoudig geworden om afbeeldingen of live videogegevens van apparaatcamera's vast te leggen, of om lokale afbeeldingen te uploaden. Tot nu toe zijn deze dynamische afbeeldingsgegevens, evenals statische afbeeldingen op een pagina, niet toegankelijk via code, ook al kunnen afbeeldingen in werkelijkheid veel interessante kenmerken bevatten, zoals gezichten, streepjescodes en tekst.
Als ontwikkelaars in het verleden dergelijke functies op de client wilden extraheren om een QR-codelezer te bouwen, moesten ze in het verleden vertrouwen op externe JavaScript-bibliotheken. Dit kan vanuit prestatieoogpunt duur zijn en het totale paginagewicht vergroten. Aan de andere kant beschikken besturingssystemen, waaronder Android, iOS en macOS, maar ook hardwarechips die in cameramodules worden aangetroffen, doorgaans al over krachtige en sterk geoptimaliseerde functiedetectoren, zoals de Android FaceDetector
of de generieke iOS-functiedetector, CIDetector
.
De Shape Detection API maakt deze implementaties zichtbaar via een reeks JavaScript-interfaces. Momenteel zijn de ondersteunde functies gezichtsdetectie via de FaceDetector
interface, streepjescodedetectie via de BarcodeDetector
interface en tekstdetectie (Optical Character Recognition (OCR)) via de TextDetector
interface.
Voorgestelde gebruiksscenario's
Zoals hierboven beschreven ondersteunt de Shape Detection API momenteel de detectie van gezichten, streepjescodes en tekst. De volgende opsomming bevat voorbeelden van gebruiksscenario's voor alle drie de functies.
Gezichtsdetectie
- Online sociale netwerksites of sites voor het delen van foto's laten hun gebruikers gewoonlijk mensen in afbeeldingen annoteren. Door de grenzen van gedetecteerde gezichten te markeren, kan deze taak worden vergemakkelijkt.
- Inhoudssites kunnen afbeeldingen dynamisch bijsnijden op basis van potentieel gedetecteerde gezichten in plaats van te vertrouwen op andere heuristieken, of gedetecteerde gezichten markeren met Ken Burns -achtige pan- en zoomeffecten in verhaalachtige formaten.
- Multimediaberichtensites kunnen hun gebruikers toestaan grappige voorwerpen zoals zonnebrillen of snorren over gedetecteerde gezichtsherkenningspunten te leggen.
Detectie van streepjescodes
- Webapplicaties die QR-codes lezen, kunnen interessante gebruiksscenario's ontsluiten, zoals online betalingen of webnavigatie, of streepjescodes gebruiken om sociale verbindingen tot stand te brengen in messenger-applicaties.
- Met Shopping-apps kunnen hun gebruikers EAN- of UPC- barcodes van artikelen in een fysieke winkel scannen om online prijzen te vergelijken.
- Luchthavens kunnen webkiosken aanbieden waar passagiers de Azteekse codes van hun instapkaarten kunnen scannen om gepersonaliseerde informatie over hun vluchten weer te geven.
Tekstdetectie
- Online sociale netwerksites kunnen de toegankelijkheid van door gebruikers gegenereerde beeldinhoud verbeteren door gedetecteerde teksten toe te voegen als
alt
attributen voor<img>
-tags wanneer er geen andere beschrijvingen worden gegeven. - Inhoudssites kunnen tekstdetectie gebruiken om te voorkomen dat er koppen bovenop hero-afbeeldingen met ingesloten tekst worden geplaatst.
- Webapplicaties kunnen tekstdetectie gebruiken om teksten zoals bijvoorbeeld restaurantmenu's te vertalen.
Huidige status
Stap | Status |
---|---|
1. Maak een uitleg | Compleet |
2. Maak een eerste ontwerp van specificatie | Compleet |
3. Verzamel feedback en herhaal het ontwerp | In uitvoering |
4. Oorsprongsproces | Compleet |
5. Lancering | Barcodedetectie voltooid |
Gezichtsdetectie wordt uitgevoerd | |
Tekstdetectie wordt uitgevoerd |
Hoe u de vormdetectie-API gebruikt
Als u lokaal met de Shape Detection API wilt experimenteren, schakelt u de vlag #enable-experimental-web-platform-features
in about://flags
.
De interfaces van alle drie de detectoren, FaceDetector
, BarcodeDetector
en TextDetector
, zijn vergelijkbaar. Ze bieden allemaal één asynchrone methode met de naam detect()
die een ImageBitmapSource
als invoer gebruikt (dat wil zeggen een CanvasImageSource
, een Blob
of ImageData
).
Voor FaceDetector
en BarcodeDetector
kunnen optionele parameters worden doorgegeven aan de constructor van de detector, waardoor hints kunnen worden gegeven aan de onderliggende detectoren.
Controleer zorgvuldig de ondersteuningsmatrix in de uitleg voor een overzicht van de verschillende platforms.
Werken met de BarcodeDetector
De BarcodeDetector
retourneert de onbewerkte streepjescodewaarden die worden gevonden in de ImageBitmapSource
en de selectiekaders, evenals andere informatie zoals de indelingen van de gedetecteerde streepjescodes.
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);
}
Werken met de FaceDetector
De FaceDetector
retourneert altijd de selectiekaders van gezichten die worden gedetecteerd in ImageBitmapSource
. Afhankelijk van het platform is er mogelijk meer informatie beschikbaar over gezichtsherkenningspunten zoals ogen, neus of mond. Het is belangrijk op te merken dat deze API alleen gezichten detecteert. Het identificeert niet van wie een gezicht is.
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);
}
Werken met de TextDetector
De TextDetector
retourneert altijd de selectiekaders van de gedetecteerde teksten, en op sommige platforms de herkende tekens.
const textDetector = new TextDetector();
try {
const texts = await textDetector.detect(image);
texts.forEach(text => textToSpeech(text));
} catch (e) {
console.error('Text detection failed:', e);
}
Functiedetectie
Het puur controleren op het bestaan van de constructors om de Shape Detection API te detecteren, is niet voldoende. De aanwezigheid van een interface vertelt u niet of het onderliggende platform de functie ondersteunt. Dit werkt zoals bedoeld . Daarom raden we een defensieve programmeeraanpak aan door functiedetectie als volgt uit te voeren:
const supported = await (async () => 'FaceDetector' in window &&
await new FaceDetector().detect(document.createElement('canvas'))
.then(_ => true)
.catch(e => e.name === 'NotSupportedError' ? false : true))();
De BarcodeDetector
-interface is bijgewerkt met een getSupportedFormats()
-methode en soortgelijke interfaces zijn voorgesteld voor FaceDetector
en 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"
]
*/
Hiermee kunt u de specifieke functie detecteren die u nodig heeft, bijvoorbeeld het scannen van QR-codes:
if (('BarcodeDetector' in window) &&
((await BarcodeDetector.getSupportedFormats()).includes('qr_code'))) {
console.log('QR code scanning is supported.');
}
Dit is beter dan het verbergen van de interfaces, omdat zelfs tussen platforms de mogelijkheden kunnen variëren en daarom moeten ontwikkelaars worden aangemoedigd om te controleren op de precieze mogelijkheden (zoals een bepaald streepjescodeformaat of gezichtsherkenningspunt) die ze nodig hebben.
Ondersteuning van besturingssystemen
Streepjescodedetectie is beschikbaar op macOS, ChromeOS en Android. Google Play-services zijn vereist op Android.
Beste praktijken
Alle detectoren werken asynchroon, dat wil zeggen dat ze de hoofddraad niet blokkeren. Vertrouw dus niet op realtime detectie, maar geef de detector de tijd om zijn werk te doen.
Als je een fan bent van Web Workers , zul je blij zijn te weten dat daar ook detectoren zichtbaar zijn. Detectieresultaten zijn serialiseerbaar en kunnen dus via postMessage()
van de werker naar de hoofdapp worden doorgegeven. De demo laat dit in actie zien.
Niet alle platformimplementaties ondersteunen alle functies, dus zorg ervoor dat u de ondersteuningssituatie zorgvuldig controleert en de API gebruikt als een progressieve verbetering. Sommige platforms ondersteunen bijvoorbeeld mogelijk gezichtsdetectie op zichzelf, maar geen gezichtsherkenningsdetectie (ogen, neus, mond, enz.); of het bestaan en de locatie van tekst kan worden herkend, maar de tekstinhoud niet.
Feedback
Het Chrome-team en de webstandaardengemeenschap willen graag horen over uw ervaringen met de Shape Detection API.
Vertel ons over het API-ontwerp
Is er iets aan de API dat niet werkt zoals je had verwacht? Of ontbreken er methoden of eigenschappen die je nodig hebt om je idee te implementeren? Heeft u een vraag of opmerking over het beveiligingsmodel?
- Dien een spec-probleem in op de Shape Detection API GitHub-repository of voeg uw mening toe aan een bestaand probleem.
Probleem met de implementatie?
Heeft u een bug gevonden in de implementatie van Chrome? Of wijkt de uitvoering af van de specificaties?
- Dien een bug in op https://new.crbug.com . Zorg ervoor dat u zoveel mogelijk details en eenvoudige reproductie-instructies opneemt, en stel Componenten in op
Blink>ImageCapture
. Glitch werkt uitstekend voor het delen van snelle en gemakkelijke reproducties.
Bent u van plan de API te gebruiken?
Bent u van plan de Shape Detection API op uw site te gebruiken? Uw publieke steun helpt ons prioriteit te geven aan functies en laat andere browserleveranciers zien hoe belangrijk het is om deze te ondersteunen.
- Deel hoe u het wilt gebruiken in de WICG Discourse-thread .
- Stuur een tweet naar @ChromiumDev met de hashtag
#ShapeDetection
en laat ons weten waar en hoe u deze gebruikt.
Handige links
- Openbare uitlegger
- API-demo | API-demobron
- Tracking-bug
- ChromeStatus.com-invoer
- Knippercomponent:
Blink>ImageCapture