News Arduino-Demo mit TensorFlow Lite und Bluetooth Web API


von Tam H. (Firma: Tamoggemon Holding k.s.) (tamhanna)


Angehängte Dateien:

Lesenswert?

Im Rahmen der Google I/O stellt Google ein neues Beispielprojekt zur Verfügung, das einen Arduino Nano BLE mit Chrome verbindet und die Mikrocontroller-Variante von TensorFlow Lite zur Gestenerkennung verwendet.

von Tam HANNA

Worum geht es hier?

Die Erstellung der AI-Modelle macht bei Embedded-Systemen mit Funktionen der künstlichen Intelligenz oft den Gutteil des Aufwands aus. Mit TensorFlow Lite for Microcontrollers (siehe auch https://www.tensorflow.org/lite/microcontrollers) bietet Google seit einiger Zeit eine Variante des hauseigenen AI-Frameworks an, die für 32bit-Mikrocontroller vorgesehen ist. Für AI-Modelle zuständige Codierer (Verwendungsbezeichnung meist Data Scientist) können so einen Gutteil ihrer Kenntnisse auch am Mikrocontroller einsetzen.

Lösung in mehreren Teilen

Das vorliegende Projektbeispiel enthält einerseits eine im Browser lebende Training-Applikation, die (siehe Screenshot weiter oben) per Bluetooth Web API Kontakt zum Arduino Nano aufnimmt. Die Web Bluetooth API ist dabei eine vor Allem in Chrome implementierte API, die Web-Applikationen den Zugriff auf Bluetooth und Bluetooth LE-Geräte ermöglicht.

Bildquelle ist hier der allgemein empfehlenswerte Dienst caniuse, der – siehe auch https://caniuse.com/web-bluetooth – darüber informiert, in welchen Browsern bestimmte APIs zur Verfügung stehen

Die Web-Applikation beschränkt sich dabei auf das Entgegennehmen und Weiterleiten der Informationen. Der Gutteil der AI-Aufgaben findet sich in einer Pythondatei (tiny-motion-trainer/blob/main/backend/main.py), die dank des Flask-Frameworks REST-Anfragen verarbeiten kann:

1
 
2
app = Flask(__name__)
3
app.config['UPLOAD_FOLDER'] = 'uploads/'
4
CORS(app, resources={r"/*": {"origins": "*"}})

Interessant ist auch der für die Datenübertragung vorgesehene Algorithmus: die Kommunikation erfolgt ausschließlich über BLE, das Protokoll sieht keine Unterstützung für die im normalen Bluetooth vorgesehenen OBEX-Übertragungen vor. Google ”emuliert” stattdessen unter Nutzung zweier Charakteristiken ein hauseigenes Übertragunssystem, das sich auch in eigenen Anwendungen nutzen lassen sollte:

1
#include "ble_file_transfer.h"

Für das eigentliche Vorhalten der Modelldaten stellt Google eine weitere dedizierte Klasse zur Verfügung, die im Rahmen des Empfangs eines neuen Modells nach folgendem Schema aktualisiert wird:

1
inline void updateFileTransfer() {
2
  ble_file_transfer::updateBLEFileTransfer();
3
  if (newModelFileData != nullptr)
4
  {
5
    Serial.println("reloading model");
6
    model_tester::loadModel(newModelFileData);
7
    . . .
8
    setState(INFERENCE);
9
  }
10
}

Die eigentliche Datenweitergabe erfolgt im Rahmen der Funktion updateIMU, die bei Aktualisierungen die update()-Funktion aufruft:

1
inline void updateIMU() { . . .
2
3
  while(data_provider::dataAvailable()){
4
    data_provider::update(buffer, useMagnetometer);
5
 
6
    if(currentState == INFERENCE || currentState == INFERENCE_AND_DATA_PROVIDER){
7
      if(model_tester::isModelLoaded){
8
        model_tester::update(buffer);  
9
      }
10
    }

Zu guter Letzt noch der Code für die Übertragung von IMU-Informationen in Richtung der Webseite:

1
    if(currentState == IMU_DATA_PROVIDER || currentState == INFERENCE_AND_DATA_PROVIDER){
2
      // provide data to IMU trainer
3
      dataProviderTxChar.writeValue(buffer, bufferSize * FLOAT_BYTE_SIZE);
4
    }
5
6
  }
7
}

Lohnt es sich?

Außer Frage steht, dass die hier demonstrierte Aufgabe nur geringen praktischen bzw. kommerziellen Nutzwert hat. Dies gilt allerdings nicht für die Kombination aus TensorFlow Lite und der Web Bluetooth API – während ersteres auch für Bildklassifizierungsaufgaben einsetzbar ist, ermöglicht zweitere die Interaktion mit Hardware ohne plattformspezifische Applikationen.

Weitere Ressourcen


:
von John L. (johnli)


Lesenswert?

Das sieht einen Versuch wert aus, danke für das Teilen des Codes.

von Tam H. (Firma: Tamoggemon Holding k.s.) (tamhanna)


Lesenswert?

John L. schrieb:
> Das sieht einen Versuch wert aus, danke für das Teilen des Codes.

Danke. Ich versuche immer, bisschen von der Codestruktur der Projekte zu 
zeigen, um sozusagen Brotkrumen in Richtung der Lösung auszulegen...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.