Forum: Digitale Signalverarbeitung / DSP / Machine Learning hardware software bilderkenneung/verarbeitung


von bildverarbeitung (Gast)


Lesenswert?

hallo,

ich bin gerade dabei ein projekt zu erstellen.

es geht um die erkennung von löchern in werkstücken.

ich hab mir vorgestellt:
eine kombination aus FPGA(zur auswertung), verbindung (günstigerweise): 
ethernet und ein PC(HMI,JAVA?,Python?, plattformunabhängig)

......lassen wir die kamera, FPGA und die zugehörige beleuchtung einmal 
weg.
meine frage "an die runde" wäre jetzt, welche software/sprache(bzgl PC) 
sich dazu eignen würde ?


danke

: Verschoben durch Admin
von Pegel (Gast)


Lesenswert?

Würde sowohl in Matlab als auch C++ gehen...

von Pegel (Gast)


Lesenswert?

Achso, für Matlab gibts die Image Acquisition Toolbox:
http://www.mathworks.de/products/imaq/

Und in C++ z.B. die Bib OpenCV:
http://de.wikipedia.org/wiki/OpenCV

Grüße

von bildverarbeitung (Gast)


Lesenswert?

hallo,

vielen dank für deine antwort !!

die sache mit matlab/simulink sieht ziemlich verlockend aus(hab ich mir 
gerade angeschaut)
günstiger weise könnt ich mir da ja auch gleich ein gui zusammenbasteln


frage zu opencv: wenn ich das richtig verstanden hab sind das ja 
"c/py-files" die man vereinfacht gesagt entsprechend plattform und 
funktion adaptieren(kompilieren etc...) muss oder ?
wie kommt man in diesen fall zu einem gui, Qt oder ähnliches ?

danke

von Pegel (Gast)


Lesenswert?

bildverarbeitung schrieb:
> die sache mit matlab/simulink sieht ziemlich verlockend aus(hab ich mir
> gerade angeschaut)
> günstiger weise könnt ich mir da ja auch gleich ein gui zusammenbasteln

Jupp, das kann man.
Allerdings muss man dazu sagen dass OpenCV bei mir seither immer 
schneller war als Matlab (z.B. beim Tracking von Fahrzeugen).

bildverarbeitung schrieb:
> wenn ich das richtig verstanden hab sind das ja
> "c/py-files" die man vereinfacht gesagt entsprechend plattform und
> funktion adaptieren(kompilieren etc...) muss oder ?

OpenCV ist eine Bibliothek für die Bildverarbeitung in der Sprache 
C/C++.
Unter anderem für Kantendetektion (Sobel, Canny, ...), 
Gesichts-/Objektdetektion (Haar-Classifier), uvm.

bildverarbeitung schrieb:
> wie kommt man in diesen fall zu einem gui

Naja...das muss dann natürlich noch (getrennt) geschrieben werden und 
dementsprechend Dein Code für die Bildverarbeitung in das GUI 
implementiert werden.

bildverarbeitung schrieb:
>Qt oder ähnliches ?

Blöde Frage...was ist Qt?

von ... (Gast)


Lesenswert?

Pegel schrieb:
> Blöde Frage...was ist Qt?

Ist das ernst gemeint?
"Qt - Cross-platform application and UI framework"
http://qt.nokia.com/

von Pegel (Gast)


Lesenswert?

GUI in Matlab oder .NET (mit Forms) ist eigentlich so ziemlich das 
selbe.
Einfach Buttons usw. zusammenklicken, Parameter festlegen und Code für 
Bildverarbeitung im erstellten m/c-File implementieren.

Bei Matlab ruft man das Ganze über "guide" auf.

von Pegel (Gast)


Lesenswert?

... schrieb:
> Ist das ernst gemeint?
> "Qt - Cross-platform application and UI framework"

Da ich nicht Informatiker sondern Nachrichtentechniker bin, ja.

von M. K. (avr-frickler) Benutzerseite


Lesenswert?

Qt ist eine Plattform übergreifendes C++-Framework.
http://qt.nokia.com/products/

OpenCV 2.2 liefert auch bereits Widgets für Qt.
http://opencv.willowgarage.com/documentation/cpp/highgui_qt_new_functions.html

Wenn Interesse besteht kann ich dir morgen ein kleine Qt-Projekt posten 
was ich letzte Woche schnell zusammengeschrieben habe.

von Pegel (Gast)


Lesenswert?

Danke...jetzt weis ich das auch.


M. K. schrieb:
> Wenn Interesse besteht kann ich dir morgen ein kleine Qt-Projekt posten
> was ich letzte Woche schnell zusammengeschrieben habe.

Wenn es Dir nichts ausmacht, mich würde das auch interessieren.
Wäre also nett von Dir wenn Du mir das auch schicken könntest.
paul.herbinger (add) gmx.net

Grüße

von bildverarbeitung (Gast)


Lesenswert?

hallo,

1.)danke für eure antworten
2.)blöde fragen gibts nicht !!

wäre sehr nett wenn du dein projekt posten könntest !!

danke!

von M. K. (avr-frickler) Benutzerseite


Angehängte Dateien:

Lesenswert?

Die Software habe ich letzte Woche schnell geschrieben gehabt um zu 
sehen wie Qt und OpenCV zusammen zu bekommen sind.

So zu sagen Grundlagenforschung für Bewertung von Displays.

Die Bilder kommen von der ersten Webcam im System.
1
// MainWnd.cpp - Zeile 7
2
cam = cvCreateCameraCapture(0);
Die Zeile müsste angepasst werden falls die Software keine Kamera 
findet.

Die Software verwendet einen Gaußfilter um Rauschen zu unterdrücken und 
einen Cannyfilter um Kanten zu erkennen.

Die Filter lassen sich über die Schieberegler am rechten Rand 
einstellen.
Leider hatte ich noch keine Zeit den Reglern Bezeichnungen zu verpassen 
und die Werte anzeigen zu lassen.

Gaußfilter:
Regler 1: Breite des Filters in x-Richtung
Regler 2: Breite des Filters in y-Richtung
Regler 3: Stärke des Filters in x-Richtung
Regler 4: Stärke des Filters in y-Richtung

Cannyfilter:
Regler 1: Threshold 1
Regler 2: Threshold 2

Ich hoffe ich habe dem bin-zip jetzt alle benötigten Bibliotheken 
beigepackt.

Wer sich die OpenCV Biblitheken selber bauen möchte kann nach der 
Anleitung auf http://opencv.willowgarage.com/wiki/MinGW vorgehen.

Die Software macht noch keinen gebrauch von den Qt-Widgets aus OpenCV. 
Die Pixel werden in einer verschachtelten Schleife einzeln in ein QImage 
kopiert. Nicht besonders schnell und elegant aber für einen ersten 
Versuch reicht es. :D
Die Idee dazu stammt von 
http://qt-apps.org/content/show.php?content=89995&forumpage=0&PHPSESSID=c4976a4cee24a9fdba731ad19ff2fadd

von Pegel (Gast)


Lesenswert?

M. K. schrieb:
> Ich hoffe ich habe dem bin-zip jetzt alle benötigten Bibliotheken
> beigepackt.

Jupp, funzt ohne Probleme.
Hatte grad kein 7-Segment zur Hand. Aber ein Bleistift tuts auch.

M. K. schrieb:
> Nicht besonders schnell und elegant aber für einen ersten
> Versuch reicht es. :D

Naja, unten das ist doch die Samplingfrequenz, oder?
Dann wären es ja 67 Bilder/sek? (15ms)


Vielen Dank auf jeden Fall, dass Du Deinen Code zur Verfügung gestellt 
hast.
Werde mich da mal demnächst einarbeiten in die Materie...man lernt 
schließlich nie aus.

Grüße

von M. K. (avr-frickler) Benutzerseite


Lesenswert?

Pegel schrieb:
> Naja, unten das ist doch die Samplingfrequenz, oder?
> Dann wären es ja 67 Bilder/sek? (15ms)

Nicht ganz, das ist die Zeit die vom auslesen des Kamerabildes über alle 
Filter bis hin zur Kontuerkennung benötigt wird.

Die Samplingfrequenz habe ich auf 8,33 Bilder/sek (120ms) fest 
eingestellt weil mein Rechner so ca. 100ms benötigt. Entweder brauche 
ich einen neuen Rechner oder eine schnellere Kamera :/

Wenn du eine höhere Samplingfrequnez haben möchtest muss du in der Datei 
MainWnd.cpp in Zeile 118 den Wert ändern.

von Pegel (Gast)


Lesenswert?

M. K. schrieb:
> Entweder brauche
> ich einen neuen Rechner oder eine schnellere Kamera :/

Bei mir läuft Dein Programm gerade auch auf meinem bereits in die Jahre 
gekommenen Laptop (Core2Duo, 2Ghz, 4GB RAM).
Also auch nicht mehr "up to date".

Als Kamera hatte ich eine Logitech C500 Webcam.

Finde selbst die 15ms etwas lange, oder?
Für das bischen Filterung, Canny und detektion?


Grüße

von M. K. (avr-frickler) Benutzerseite


Lesenswert?

Pegel schrieb:
> Bei mir läuft Dein Programm gerade auch auf meinem bereits in die Jahre
> gekommenen Laptop (Core2Duo, 2Ghz, 4GB RAM).

Heul .. AMD Athlon 64 3000+ (1,8Ghz) 2GB RAM sind es bei mir also noch 
nicht einmal Mehrkern-Prozessor, so was habe ich bei mir zuhause schon 
vor 5 Jahren entsorgt!

Pegel schrieb:
> Finde selbst die 15ms etwas lange, oder?
> Für das bischen Filterung, Canny und detektion?

Das ist schon ok, ich denke die Kamera bzw USB-Buss wird hier der 
Flaschenhals sein. könnte man testen wenn man einfach ein Bild nimmt.

Edit: Im angehängtem Programm habe ich die Zeitmessung mal hinter dem 
laden des Bildes gestartet. Samplingfrequenz ist jetzt 25 Bilder/sek

von M. K. (avr-frickler) Benutzerseite


Angehängte Dateien:

Lesenswert?

Beim Editieren lassen sich keine neuen Anhänge posten :/

von Pegel (Gast)


Lesenswert?

M. K. schrieb:
> Im angehängtem Programm habe ich die Zeitmessung mal hinter dem
> laden des Bildes gestartet. Samplingfrequenz ist jetzt 25 Bilder/sek

Macht keinen Unterschied. Sind weiterhin 15ms, nur bei starken 
Bewegungen der Kamera springt er ab und zu auf 36ms.
Müsste also wirklich an der Filterung/Kantenerkennung liegen!?

M. K. schrieb:
> Heul .. AMD Athlon 64 3000+ (1,8Ghz) 2GB RAM sind es bei mir also noch
> nicht einmal Mehrkern-Prozessor, so was habe ich bei mir zuhause schon
> vor 5 Jahren entsorgt!

Ja, so ist es halt mit den "Geschäfts-Gurken".
Bis da noch die ganzen Hintergrunddienste laufen geht nichts mehr auf 
dem System.

Grüße

von M. K. (avr-frickler) Benutzerseite


Lesenswert?

Pegel schrieb:
> Macht keinen Unterschied. Sind weiterhin 15ms, nur bei starken
> Bewegungen der Kamera springt er ab und zu auf 36ms.
> Müsste also wirklich an der Filterung/Kantenerkennung liegen!?

Jo, sieht dann wohl so aus. Wobei 15ms schon sehr ordentlich sind finde 
ich. Auf der Software-Seite gibt es ja noch genug Möglichkeiten das zu 
steigern wenn man es denn wirklich schneller braucht. Bei der Hardware 
sieht es da sicher schon anders aus.

von Pegel (Gast)


Lesenswert?

M. K. schrieb:
> Wobei 15ms schon sehr ordentlich sind finde ich.
Jou...und bei Dir sind es ja dann immernoch 100ms.
Und das nur für Kantenerkennung & Filterung?

Das kann ja fast nicht sein für das bischen Ableiten...
Wäre ja ne Ewigkeit.

Wobei ich wie gesagt seither mit OpenCV immer die schnelleren Ergebnisse 
hatte als bei Matlab.

von M. K. (avr-frickler) Benutzerseite


Lesenswert?

Ich hab das geänderte Programm gerade mal gestartet, jetzt schwankt der 
Wert zwischen 0ms und 16ms. Bei mir liegt es also an der Kamera.

Bei einem Arbeitskollegen mit AMD Athlon 64 3500+ bleibt die Zeit sogar 
bei 0ms stehen.

von Hugi (Gast)


Lesenswert?

M. K. schrieb:
> Bei einem Arbeitskollegen mit AMD Athlon 64 3500+ bleibt die Zeit sogar
> bei 0ms stehen.

Mit der gleichen Kamera?
Dann schließt Aussage 1 nämlich Aussage 2 irgendwie aus...denn entweder 
es liegt an der Kamera, oder am Algorithmus.

von M. K. (avr-frickler) Benutzerseite


Lesenswert?

Ja bei gleicher Kamera. Die beiden Aussagen schliessen sich nicht 
gegenseitig aus. Die 100ms sind bei meinem Rechner die Zeitmessung mit 
Kamera, 0/16ms ohne Kamera bei dem Arbeitskollegen habe ich nur die 
Messung ohne Kamera.

Die 15ms kommen schon vom Algorithmus. Glaubt man nun AMD mit ihren 
angeblichen 3Ghz passen die Zeiten auch:

Core2Duo 2Ghz (es wird nur ein Core verwendet) < Athlon 64 3Ghz < Athlon 
64 3,5Ghz

Allerdings würde ich das mit den Zeiten nicht sooo genau nehmen, die 
sind mit Windows ermittelt. xD

von Zonk-8000 (Gast)


Lesenswert?

Eigentlich kannste den GaussianBlur Schritt rausnehmen der Canny sollte 
das schon drin haben - jedenfalls ist der Algo so definiert ob das 
OpenCV auch so macht weiss ich nicht.


> Das kann ja fast nicht sein für das bischen Ableiten...

Momentan ists ja scheinbar folgendes:
Bild laden -> Gauss -> Farbe konvertieren -> Gauss -> Sobel X+Y -> 
NonMax Surpression -> Konturen finden

Wenns dann auch nicht wirklich optimal übersetzt wird und paar mal im 
Speicher hin und herkopiert wird... dauerts halt paar Millisekunden für 
die 76800 Pixel.

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.