KI auf dem Vormarsch: Multi-Objekt-Erkennung
Auf meiner Reise in die Welt der KI bin ich nun auf YOLO (You Only Look Once) gestoßen. Das ist für meine Projekte sehr nützlich, denn die Aufgabenstellung war: Benachrichtige die Hausautomation sofort, sobald ungewöhnliche Aktivitäten auf dem Grundstück passieren.
Folgendes ist dabei herausgekommen: Einer meiner Server fragt von allen Kameras die jeweiligen Streams ab und klassifiziert die Objekte, die ich trainiert habe. Natürlich kommen mit der Bibliotek bereits viele vordefinierte Objekte mit. Aber ich möchte ja auch bekannt und unbekannt unterscheiden...
Wenn nun eine "person" erkannt wurde (also nicht ein "michael"), dann ist jemand fremdes auf dem Grundstück. In diesem Fall wird die Hausautomation darüber informiert. Diese entscheidet nun über das weitere Vorgehen. Am Tag bekomme ich eine Nachricht mit dem Bild auf meine Uhr und kann darauf reagieren. Reagiere ich nicht, nutzt die Hausautomation eigenständig einen hinterlegten Ablaufplan.
Wenn soetwas nachts geschieht oder wenn niemand im Haus ist, könnte man im Haus ein paar Lichter anmachen, einen Rollladen etwas hochfahren, die Außenbeleuchtung einschalten und auf der Surround-Anlage ein paar Stimmen rufen lassen, um Anwesenheit vorzutäuschen...
Auch wenn die Kameras im Nachtsicht-Modus sind, ist die Trefferquote extrem hoch.
Folgende Modelle kommen bereits mit YOLO mit:
person, bicycle, car, motorcycle, airplane, bus, train, truck, boat, traffic light, fire hydrant, stop sign, parking meter, bench, bird, cat, dog, horse, sheep, cow, elephant, bear, zebra, giraffe, backpack, umbrella, handbag, tie, suitcase, frisbee, skis, snowboard, sports ball, kite, baseball bat, baseball glove, skateboard, surfboard, tennis racket, bottle, wine glass, cup, fork, knife, spoon, bowl, banana, apple, sandwich, orange, broccoli, carrot, hot dog, pizza, donut, cake, chair, couch, potted plant, bed, dining table, toilet, tv, laptop, mouse, remote, keyboard, cell phone, microwave, oven, toaster, sink, refrigerator, book, clock, vase, scissors, teddy bear, hair drier, toothbrush
Wenn man keine Lust hat eigene Objekte zu trainieren, kann man bereits ableiten, ob eine Person fremd ist. Die Hausautomation weiß ja wer zuhause ist. Wenn also niemand zuhause ist, aber eine Person zu sehen ist...
Ich lasse auf meinen RPi's meist einen tcpdump mitlaufen, der meiner Hausautomation mitteilt, welche Probe-Requests von in Reichweite befindlichen Mobiltelefonen in der Luft sind. So kann man auch fremde Personen wiedererkennen/korrelieren:
tcpdump -l -i wlan0mon -e -s 256 type mgt | grep "Probe Request" | sed -u -e 's/.* SA://;s/ (.*Probe Request (/ /;s/) .*//' | while read PROBE do MAC=${PROBE%% *} ESSID=${PROBE##* } mosquitto_pub -h iobroker -p 1884 -u $IOUSER -P $IOPASS -i iobroker -t WIFI/MAC -m ${MAC} mosquitto_pub -h iobroker -p 1884 -u $IOUSER -P $IOPASS -i iobroker -t WIFI/ESSID -m ${ESSID} done
Die Ausgabe des tcpdumps sieht so aus:
21:42:17.536121 SA:ee:08:d0:65:c4:52 Probe Request (Nebuchadnezzar)
21:42:19.988448 SA:ce:80:a0:f6:4b:66 Probe Request (Nebuchadnezzar)
21:42:20.262214 SA:a2:aa:60:bf:e7:ee Probe Request (Nebuchadnezzar)
21:42:20.317474 SA:a2:aa:60:bf:e7:ee Probe Request (Nebuchadnezzar)
21:42:52.449128 SA:62:9a:1c:fa:06:c4 Probe Request (Nebuchadnezzar)
21:44:32.538893 SA:32:23:59:b1:b0:97 Probe Request (Nebuchadnezzar)
21:45:07.443366 SA:72:f0:bb:62:83:c1 Probe Request (Nebuchadnezzar)
21:45:07.466738 SA:72:f0:bb:62:83:c1 Probe Request (Nebuchadnezzar)
21:45:07.568622 SA:f2:a7:b1:d0:5a:22 Probe Request (Nebuchadnezzar)
21:45:07.995267 SA:66:4c:cb:70:28:90 Probe Request (Karins_Home)
21:45:08.357458 SA:66:4c:cb:70:28:90 Probe Request (Karins_Home)
21:45:08.365730 SA:66:4c:cb:70:28:90 Probe Request (Karins_Home)
21:45:08.438645 SA:66:4c:cb:70:28:90 Probe Request (Karins_Home)
21:45:32.951805 SA:3a:e9:2f:6b:96:cf Probe Request (Nebuchadnezzar)
21:45:33.117583 SA:ca:34:1b:c7:bc:86 Probe Request (Nebuchadnezzar)
21:45:33.150608 SA:ca:34:1b:c7:bc:86 Probe Request (Nebuchadnezzar)
21:45:33.407155 SA:66:4c:cb:70:28:90 Probe Request (Karins_Home)
21:45:34.764289 SA:66:4c:cb:70:28:90 Probe Request (Karins_Home)
21:45:34.774440 SA:66:4c:cb:70:28:90 Probe Request (Karins_Home)
21:45:53.202166 SA:66:4c:cb:70:28:90 Probe Request (Karins_Home)
21:46:37.098989 SA:66:4c:cb:70:28:90 Probe Request (Karins_Home)
21:46:37.105020 SA:66:4c:cb:70:28:90 Probe Request (Karins_Home)
Hier erkennt man sowohl die MAC-Adresse des Mobiltelefons als auch den Accespoint, nach dem es sucht. So läßt sich dann auch leicht herausfinden, wo der Telefonbesitzer wahrscheinlich wohnt:
Die Möglichkeiten sind schier unbegrenzt und man lernt so viel dazu...