Erkennen von Objekten und menschlichen Emotionen mit dem Firebase ML Kit

Erkennen von Objekten und menschlichen Emotionen mit dem Firebase ML Kit


Wenn Sie Google I / O gefolgt sind (oder sich zumindest Keynotes angesehen haben), haben Sie möglicherweise die Ankündigung eines neuen Produkts als Teil der Firebase-Plattform namens ML Kit bemerkt.


ML Kit bietet eine API, mit der Sie Anwendungen (sowohl Android als auch iOS) leistungsstarke Funktionen für maschinelles Lernen hinzufügen können, unabhängig davon, ob Sie ein erfahrener Entwickler für maschinelles Lernen oder nur ein Anfänger in diesem Bereich sind.


Obwohl dieses Produkt auf der Konferenz nicht in den Mittelpunkt der Aufmerksamkeit gerückt ist (danke, Google Duplex), gibt es sicherlich viele nützliche Möglichkeiten, es in der Android-Entwicklung zu verwenden.


Spielen wir also mit ihm und erstellen eine kleine Anwendung, die (fast) wie Google Lens aussieht!


Hier sind einige Screenshots aus der App. Auf ihnen sehen Sie einen Versuch, Objekte im Bild zu identifizieren.


Kopfhörererkennung 1


Kopfhörererkennung 2


Ziemlich genau, oder?
Sie können diese API auch verwenden, um menschliche Emotionen wie Glück, Traurigkeit, Wut usw. zu definieren, was noch cooler ist.


Hör auf zu reden, zeig mir den Code !!!!!


Das ML-Kit enthält 5 APIs:


  1. Texterkennung (wir haben bereits einen Artikel über die Anwendung mit dieser Funktionalität veröffentlicht)
  2. Gesichtserkennung (ein solcher Artikel ist in unserem Blog)
  3. Barcode-Scannen
  4. Identifizierung von Objekten im Bild (das, das wir verwenden werden)
  5. Zeichenerkennung

In diesem Artikel verwenden wir die Objektidentifizierungs-API für das Bild. Mit dieser API erhalten wir eine Liste von Objekten, die im Bild erkannt wurden: Personen, Dinge, Orte, Aktivitäten usw.


Darüber hinaus gibt es zwei Arten dieser API. Die erste ist die in Ihr Gerät integrierte API , die logisch auf dem Gerät selbst funktioniert. Es ist kostenlos und kann mehr als 400 verschiedene Objekte in Bildern erkennen.


Die zweite ist die Cloud-API , die in Google Cloud ausgeführt wird und über 10.000 verschiedene Objekte erkennt. Es wird bezahlt, aber die ersten 1000 Anfragen pro Monat sind kostenlos.


In diesem Artikel betrachten wir den ersten API-Typ als es ist kostenlos (aber das Prinzip des bezahlten ist ähnlich wie kostenlos).


Fangen wir an.


  • Verbinden Sie Firebase mit Ihrem Projekt und fügen Sie die firebase-ml-vision Abhängigkeit hinzu
    Wie Sie Firebase verbinden, erfahren Sie in einem guten Tutorial von Google. Sie müssen auch die entsprechenden Abhängigkeiten hinzufügen, um diese API verwenden zu können:

 implementation 'com.google.firebase:firebase-ml-vision:15.0.0' implementation 'com.google.firebase:firebase-ml-vision-image-label-model:15.0.0' 

  • Betten Sie die Kamerafunktion in die Anwendung ein
    Die Vision-API benötigt ein Bild, um Daten zu empfangen. Erstellen Sie daher entweder eine Anwendung, mit der Sie Bilder aus der Galerie herunterladen können, oder erstellen Sie eine Anwendung, die eine Kamera verwendet, um ein Bild aufzunehmen und es sofort zu analysieren.
    Wenn Sie die Standardkamera-API nicht verwenden möchten, können Sie einfach die bequeme und einfache Bibliothek für diese Funktionalität verwenden.


  • Verwenden Sie eine Bitmap, um auf die Vision-API zuzugreifen
    Die oben erwähnte Bibliothek stellt direkt die Bildbitmap bereit, mit der auf die API zugegriffen werden kann.



 fab_take_photo.setOnClickListener { // cameraView is a custom View which provides camera preview cameraView.captureImage { cameraKitImage -> // Get the Bitmap from the captured shot and use it to make the API call getLabelsFromDevice(cameraKitImage.bitmap) } } private fun getLabelsFromDevice(bitmap: Bitmap) { val image : FirebaseVisionImage = FirebaseVisionImage.fromBitmap(bitmap) val detector : FirebaseVisionLabelDetector = FirebaseVision.getInstance().visionLabelDetector detector.detectInImage(image) .addOnSuccessListener { // Task completed successfully for(firebaseVision : FirebaseVisionLabel in it){ // Logging through the list of labels returned from the API and Log them Log.d(TAG,"Item Name ${firebaseVision.confidence}") Log.d(TAG,"Confidence ${firebaseVision.confidence}") } } .addOnFailureListener { // Task failed with an exception Toast.makeText(baseContext,"Sorry, something went wrong!",Toast.LENGTH_SHORT).show() } } 

Im obigen Code-Snippet erstellen wir zuerst ein FirebaseVisionImage aus der Bitmap.


Anschließend erstellen wir eine Instanz von FirebaseVisionLabelDetector , die FirebaseVisionLabelDetector durchläuft und die spezifischen FirebaseVisionLabels (Objekte) findet, die im bereitgestellten Bild erkannt werden.


Schließlich übergeben wir das Bild an die Methode detectInImage() und lassen den Detektor das Bild analysieren.


Wir können Listener so einstellen, dass sie erfolgreiche Analysen durchführen und nicht erfolgreich sind. Dort haben wir Zugriff auf die Liste der im Bild identifizierten Objekte bzw. auf die aufgetretene Ausnahme.


Für jedes erkannte Objekt können Sie den Namen, die Erkennungsgenauigkeit und die Entitäts-ID abrufen .


Wie bereits erwähnt, kann diese API auch verwendet werden, um menschliche Emotionen in einem Bild zu definieren. Dies ist in den folgenden Screenshots zu sehen:


Menschliche Gefühle


Emotionserkennung 1


Emotionserkennung 2


Der Code für die Cloud-API ist dem Code, den wir für die Geräte-API geschrieben haben, sehr ähnlich. Nur der Detektortyp ( FirebaseVisionCloudLabelDetector vs FirebaseVisionLabelDetector ) und der Typ der identifizierten Objekte ( FirebaseVisionCloudLabel vs FirebaseVisionLabels ) FirebaseVisionLabels :


 private fun getLabelsFromDevice(bitmap: Bitmap) { ... val detector : FirebaseVisionCloudLabelDetector = FirebaseVision.getInstance().visionCloudLabelDetector detector.detectInImage(image) .addOnSuccessListener { for(firebaseVision : FirebaseVisionCloudLabel in it){ ... } } .addOnFailureListener { ... } } 

Zusätzlich zu Änderungen im Code müssen Sie auch die Abrechnung (Zahlung) für Ihr Projekt konfigurieren und die Google Vision-API in Ihrer Google Cloud Console aktivieren.


Bitte beachten Sie, dass Sie mit der API nur 1000 kostenlose Abfragen pro Monat ausführen können, sodass Sie nicht bezahlen müssen, wenn Sie nur damit spielen möchten.


Die in den Screenshots gezeigte Anwendung befindet sich im GitHub-Repository .

Source: https://habr.com/ru/post/de420085/


All Articles