Zitat:
Das ist richtig, ich habe es auch in Erwägung gezogen, an der Stelle mit einem SW-Bild zu arbeiten.
Die Objekte sind bereits isoliert. Die Bilder sind in Farbe, Umwandlung ist nat. kein Problem.
Die extra Umwandlung kostet Zeit. Du solltest nicht vergessen, auch in Bezug auf die Problematik Canvas.Pixels und Scanline, das bei sagen wir mal 50 Frames / Sec und 50 Objekten je Frame immer noch 2500 kleine Bilder zusammenkommen. Die sind genauso optimierenswert wie es einige große sind
Was ich meinte ist das an irgendeinem Punkt deiner Bildverarbeitungspipeline wahrscheinlich schon ein Graustufen und / oder SW Bild vorliegt das Du verwenden könntest.
Wenn deine Routine anstatt auf Bildern auf rechteckigen Bildausschnitten arbeiten würdest, könntest Du auch ansteller eines kleinen Bildes auf dem Gesamtbild arbeiten und immer nur die Ausschnitte betrachten die ein isoliertes Objekt darstellen. Da dann auch der Overhead zum allokieren, kopieren der Ausschnitte und evtl. wieder freigeben entfällt dürfte das schon etwas ausmachen.
Ich würde Dir, zumindest langfristig, aber ohnehin empfehlen Bildverarbeitung mit dafür optimierten Libs zu machen. Also entweder die zu Deiner Kamera angebotene Lib oder beispielsweise OpenCV und/oder OpenVino. Für OpenCV gibt es eine Anbindung an Delphi (wenn auch nur bis zur Version 2.4, aktuell ist 4.)
https://github.com/Laex/Delphi-OpenCV
die aber alles hat was Du brauchst. Die Lernkurve ist steil aber es sind jede Menge Beispiele dabei und Literatur, auch zu dem Problemkreis den Du hier betrachtet gibt es tonnenweise (allerdings praktisch immer für Python oder C++)
Beispielsweise könntest Du mittels Contour Matching deine Objekte finden und die Längsachse dann innerhalb des gefundenen Objektes, welches als Polygon vorliegt, suchen. Da die Verarbeitung von 5, 10 oder 50 Vektorpunkten viel schneller geht als die Verarbeitung von hunderten Pixeln ist ein solcher Ansatz natürlich performanter.
Zitat:
Jedes Objekt wird klassifiert, dann ist es weg.
Schau die mal Yolo (insbesondere V3) an
https://pjreddie.com/darknet/yolo/
https://www.youtube.com/watch?v=MPU2HistivI
das ist ein neurales Netz das gleichzeitig die Detection durchführt und das Objekt klassifiziert. Natürlich ginge das auch mit anderen Modellen (z.B. mit allen Modellen welche die Tensorflow object detection
API unterstützen), aber für Yolo gibt es einen Windows Port der als
DLL eingebunden werden kann.
https://github.com/AlexeyAB/darknet
Bindings für Delphi / Paskal müsstest Du aber selbst erstellen. Falls Du also Implementierungsdeteils verbergen willst ginge das ganz gut. Falls Du Fragen zum Training hast oder zur Auszeichnung von Objekten auf Bildern kannst Du dich gerne an mich wenden.
Auf der Site findest Du auch noch andere interessante Repositaries die sich mit Objekt-Erkennung und Isolation beschäftigen.
https://github.com/AlexeyAB
Mir fallen noch eine Reihe anderer Dinge ein, aber für heute mache ich erst mal Schluss.
cu Ha-Jö