Skip to content

QR Code Detection

tarTG edited this page Apr 29, 2020 · 2 revisions

Für die Einbindung des QR-Code Detectors ist sind die drei GameObjecte

  • EventManager
  • QrCodeDetector
  • SpawnHandler, zentral wichtig
    important_files

QrCodeDetector.cs

Die Aufgabe des QrCodeDetector Objektes, ist wie der Name schon vermuten lässt, das erkennen der einzelnen QR-Codes. qr_code
Hier wird über die ProcessingPipe der Realsense die "depth" frames abgegriffen und über die OpenCV Erkennung gejagt.

Wichtig: In der ProcessingPipe befinden wir uns in einem eigenen Thread, Unity kann aber interne Methoden nur im Main-Thread ausführen. Deswegen wird an dieser stelle eine Queue verwendet, um erkannte QR-Codes in die Queue zu schreiben.

In den Zeilen 50 und 51 können "custom" definierte Events erstellt werden. Als Beispiel haben wir hier zwei Events: spawnTiger und spawnHouse

if (!string.IsNullOrEmpty(decodedString))
{
  Debug.Log(decodedString);
  if(decodedString =="tiger") actionEventQueue.Enqueue("spawnTiger");
  if(decodedString =="house") actionEventQueue.Enqueue("spawnHouse");
}

Beim erkennen eines "tiger" oder "house" QR-Codes wird das entsprechende Event in die Queue geschrieben.

private void Update(){
        if (!actionEventQueue.IsEmpty)
            {
                string eventName;
                actionEventQueue.TryDequeue(out eventName);
                EventManager.TriggerEvent(eventName);
            }
}

Die Queue wird bei jedem Update geprüft und über den EventManager wird das entsprechende Event abgefeuert.

EventManager.cs

Wie der Name auch hier vermuten lässt, ist die einzige Aufgabe des EventManagers eingehende Events auf alle Subscriber zu verteilen. Wir haben hier also ein Klassisches Publischer/Subscriber Pattern. Einer unserer Subscriber ist der SpawnHandler

SpawnHandler.cs

Um Objekte spawnen zu können, brauchen wir hier die Prefabs. In unserem Beispiel haben wir "Medieval_house" und "tiger" als Prefab eingebunden. spawn_handler

Über den EventManager wird sich dann auf die einzelnen Events "subscribed"

 void OnEnable ()
    {
        EventManager.StartListening ("spawnTiger", spawnTiger);
        EventManager.StartListening ("spawnHouse", spawnHouse);
    }
Clone this wiki locally