Eigene Objekte erkennen durch KI?
Hallo an alle,
Die Überlegung ist, dass man ein Objekt (z.B.: eine Billardkugel) vor eine Kamera hält und dann die Kamera ein das Bild an ein Arduino Uno sendet und daraufhin eine KI (Reinforcement Learning oder so) die Billardkugel erkennt und zuordnet.
Hat jemand eine Idee, wie man eine solche KI programmiert?
PS: ich kann ein bisschen in Java programmieren, aber eher wenig in Python.
2 Antworten
Zuerst musst du aus den Eingangsdaten (dem Bild) Merkmale ermitteln, die du zahlenmäßig erfassen und speichern kannst, z.B. mittlere Farbe, statische Farbbweichung. Kantenerkennung (über Farbgradienten) und Flächenberechnung, Verhältnis der Kantenlänge zur Fläche usw.
Dann programmierst du ein exponentiell verknüpftes neuronales Netz mit variablen Koppelfaktoren (Synapsialkoeffizienten) und eine Datenbank für die Koppelfaktoren und am Ende Trainierst du deine KI mit einigen tausend Bilder von Billardkugeln und Glatzköpfigen Männern.
Wenn du das dann hingekriegt hast, bewirbst du dich bei google oder Facebook und forderst ein siebenstelliges Jahresgehalt, denn du bist der Erste, der das auf einen Arduino zum Laufen gebracht hat und machst damit alle Großrecherfarmen der beiden überflüssig.
Kurz gesagt: vergiss es! Oder merke es dir erst mal und mach zum Anfang mal ein Informatikstudium. Das ist einige Zehnerpotenzen zu hoch
Mobilenet ist ein kleines und effizientes Convolutional neural network.
Ich glaub du hast Recht. Aber weißt du vielleicht, wie man es machen könnte, dass man Python Script auf einem arduino laufen lassen kann?
Die Idee von dem "Projekt" ist, dass bei ein Billard Tisch eine Kamera hat, die erkennt, sobald eine Billardkugel eingelocht wird und dem arduino uno das Bild gibt und dann geschaut wird, welche Kugel eingelocht wurde. Diese Daten (welche Billardkugel) sollen dann zu einem Bildschirm gesendet werden. Hast du vielleicht eine andere Lösung dafür?
Das ist viel einfacher. Da habe ich ad hoc mehrere Lösungsansätze für dich:
- Bau in jeder Billardkugel einen RFID-Chip ein und in die einzelnen Pit je ein Lesegerät
- treffe folgende Vereinbarung: Der Verlierer zahlt dem Referee, der die Tasten für die Anzeige betätigt ein Bier
- Untersuche das Bild auf Farbklekse, denn jede Kugel hat eigene eigene Farbe. Wenn du mit einer zentralen Kamera den ganzen Tisch überwachst, kann das Programm diesen in Quadraten, die dem Kugeldurchmesser entsprechen, nach den Kugeln durchsuchen. Ist eine Quadrat nicht vollständig samtgrün (< (1-Pi/16) [%]) hast du eine oder mehrere Kugeln gefunden (Kugel liegt genua auf der Ecke des Suchquadrates). Anhand der gefundenen Farben machst du eine Vorauswahl (in Feld können maximal vier Kugeln zu sehen sein und prüfst die Nachbarfelder. Nach Vergleich der Farbgewichte weißt du wo die Kugeln liegen. Du musst dabei die in schwarz auf weißem Kreis aufgedruckten Ziffern berücksichtigen, die je nach Lage der Kugel zu 0.100% sichtbar sind. Sprich weiße und schwarze Pixel gehören zu jeder Farbe, vorher es sei denn der %Anteil von weiß und Schwarz am Gesamtanteil der farbigen Pixel ist so groß, dass die weiße resp. die schwarze Kugel im Bild sein muss. Pixel die du schon einer Kugel zugeordnet hast, werden aus der nachfolgenden Bewertung ausgeschlossen! Den Mittelpunkt der Kugel findest du, wenn du die Farbgewichte der fünf Quadrate betrachtest und den Mittelpunkt des mittleren Quadrates um die Werte der einzelnen Farbgewichte verschiebst. Die halbe Kugeln sind ein Problem, da zwei Halbe bestenfalls genau so viel oder schlimmstenfalls doppelt so viel Weiß zeigen wie die Weiße selbst. Du musst also im ersten Durchlauf die vollen Kugeln suchen und sehen, was übrig bleibt. Besonders schwierig wird es, wenn eine Halbe Kugel exakt Quer liegt und nur die Weiße Seite in die Kamera hält. Dann bleibt dir nur das Ausschlussverfahren oder die Auswertung von zwischengespeicherten Bilder aus der Bewegung.
https://pimage.sportime.de/detail-fillscale-webp/sportime-billardkugeln-pool-sport/350-9630
Viel Erfolg
Ich habe da noch was gefunden
https://wiki.hshl.de/wiki/index.php/Pool-Billard_Assistenz
https://stackoverflow.com/questions/18933430/image-recognition-detecting-billiard-balls-on-android
https://gocardless.com/blog/hacking-on-side-projects-the-pool-ball-tracker/
https://kastner.ucsd.edu/ryan/wp-content/uploads/sites/5/2014/03/admin/pool-aid.pdf
und hier eine ganz nette Bildverarbeitung
https://stackoverflow.com/questions/34157710/edge-detection-on-pool-table
Einfach die letzte layer von mobilenet selbst trainieren.
Bullshit. Ganz normales mobilenet backbone benutzen und dann die letzte layer selbt trainieren. Fertig