Erstellung eines Blocks für Eyesweb anhand eines Beispiel-Blocks

Aus toolbox_interaktion
Version vom 5. November 2014, 22:19 Uhr von Bruenig (Diskussion | Beiträge)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

In diesem Beispiel sind die wichtigsten Bestandteile eines Blocks zusammengeführt und sollen hauptsächlich das Prinzip veranschaulichen. Es wird mit Funktionen aus der Bibliothek OpenCV gearbeitet.


Mit diesem Block kann man die Helligkeit eines Bildes / Videos verändern. Diese Änderung kann durch zwei skalare Inputs erfolgen, die den Typ int und den Typ double (in Eyesweb: real) besitzen. Durch zwei Parameter, ebenfalls des Typs int und double kann das Gleiche erzielt werden. Es gibt neben dem Bildausgang noch zwei weitere Ausgänge, die einfach die skalaren Eingangswerte wieder ausgeben und anzeigen.


Dieses Beispiel soll also zeigen, wie mit Image, int und double beim Erstellen eines Blocks umgegangen werden soll. Es macht natürlich keinen großen Sinn, dass die Eingänge das gleiche steuern wie die Parameter, soll also einfach das Prinzip verdeutlichen.


Übersicht:

Beispiel-Block 1 1.png

Inputs:

Image (Bild/Video)

Skalar 1 (int)

Skalar 2 (double)


Parameter:

Skalar 1 (int)

Skalar 2 (double)


Outputs:

Image (Bild/Video)

Skalar 1 (int)

Skalar 2 (double)


beispielblock.eyw

Schnelleinstieg Blockerstellung in Visual C++ 6.0

Bitte vorher den Artikel Erstellung eigener Blöcke für EyesWeb anschauen - wichtige Hinweise zur Software und Vorbereitung!


Eyesweb Block Creater Symbol
  1. Datei → Neu → Projekte → Eyesweb Module Library AppWizard
  2. EyesWeb Block Creator aufrufen (vorhin eingefügtes Symbol) und Dialog durchlaufen:
    1. Dialog: Blocknamen vergeben -> BeispielBlock
    2. Dialog: egal
    3. Dialog: OpenCV-Include-Datei(en) einbinden -> (z.B. 'cv.h', 'cxcore.h')
    4. Dialog: Block-Typ (in der Regel passiv: Block wird jedesmal aktiviert, wenn Input stattfindet)
    5. Dialog: Paramter des Blocks definieren -> Integer, Double
      Hinweis: Beim Hinzufügen von Inputs/Outputs/Parametern als Interface immer 'IDT<Datentyp>' wählen
    6. Dialog: Eingänge des Blocks defnieren -> Image, Skalar, Skalar
    7. Dialog: Ausgänge des Blocks definieren -> Image, Skalar, Skalar
      Möchte man ein eingehendes Bild zu einem ausgehendem durchschleifen, kann hier beim entsprechenden Output der Parameter In-place Index auf die Position des Eingangsbildes im Inputarray gesetzt werden (bei einem Eingangsbild 0).
    8. Dialog: egal
  3. Bibliotheken verlinken:
    Projekt → Einstellungen → Linker
    Objekt-/Bibliothek-Module: 'EyesWebSDKd.lib cv.lib cvaux.lib cvcam.lib cvhaartraining.lib cxcore.lib cxts.lib highgui.lib trs.lib'
  4. Eigenen Code einbinden. Die Funktion 'Execute()' bildet hierbei die zentrale Methode, da sie bei jedem "Anstoßen" des Blocks aufgerufen wird.
  5. .dll-Datei erstellen:
    Erstellen → <Blockname>.dll erstellen
  6. .dll als Steuerelement registrieren (bei diesem Vorgang muss EyesWeb geschlossen sein):
    Extras → Steuerelement registrieren
  7. In EyesWeb ist ein neuer Ordner mit dem Namen des Blocks verfügbar. Darin befindet sich der erstellte Block.


Arbeiten in Visual C++ 6.0 (Code)

Tip: Im Fenster Klassen kann man den Seitenbaum öffnen, indem man schneller auf die Methoden zugreifen kann, wie z.B. Init und Execute

schnellerer Zugriff durch Seitenbaum










Include und Define

Als erstes sollte man alle benötigten Klassen inkludieren wie z.B. cv.h, cxcore.h oder math.h für mathematischen Berechnungen und Funktionen wie sin und cos.

Der EyesWeb Block Creator hat die vorher eingebeben Werte schon definiert. Beginnend bei 0 zählt er jeden Input, Output und Parameter um 1 hoch.


Beispiel-Block 1.png


Initialisierung

Hier werden der BildInput mit entsprechender Fehlermeldung, der BildOutput und der DoubleInput initialisiert.

Beispiel-Block 5.png


Execute

Hier spielt sich eigentlich alles ab, dass heißt hier werden alle Funktionen geschrieben. Man programmiert hier das, was der Block machen soll - das Herzstück sozusagen.

In diesem Screenshot sind die ersten Schritte zu sehen: Deklarieren, Ein- und Ausgänge locken, Zuweisen und es wird die Variable colorVal initialisiert. Mit dieser hat es Folgendes auf sich:

Wir erinnern uns, das dieser Beispiel-Block die Helligkeit eines Bildes oder Videos verändert. Die Variable colorVal spiegelt sozusagen die Helligkeit wider, denn in ihr werden alle Farbwerte, also die des Eingangsbildes, der Eingangswerte (int, double) und die der Parameter (int, double) aufaddiert.

Aber mehr dazu im nächsten Screenshot...

Beispiel-Block 6.png


Hier sind 2 For-Schleifen zu sehen, die die Pixel eines Bildes einmal in der Höhe und einmal in der Breite durchlaufen.

Man kann hier auch deutlich unsere vier Stererelemente erkennen, die unser Bild verändern:

(iAddValue; dAddValue; m_IntPara; m_DoublePara)


Tip: Wie das Bild aufgebaut bzw. mit welchen Methoden ihr es verändern könnt, solltet ihr in der OpenCV Bibliothek einfach nachlesen.

Falls ihr den Parameter-Namen verändern wollt, scrollt einfach etwas nach unten zur Methode GetParam


Das Aufaddieren muss für jeden Farbwert (Blau 0, Grün 1, Rot 2) gemacht werden.

Beispiel-Block 7.png


Danach übergeben wir einfach die zwei Skalar-Inputwerte an den Output und unlocken alle Inputs und Outputs.

... fertig

Beispiel-Block 8.png


Der oben beschriebene Programm-Block steht als komplettes Projekt für Visual Studio 6 im internen Bereich zum Download zur Verfügung (beispielblock.rar bzw. beispielblock.zip)

Ergebnisse in Eyesweb

Das normale Bild:

Beispiel-Block 1.jpg


Das Bild ist dunkler, weil der Input-Int-Wert auf -134 steht:

Beispiel-Block 2.jpg


Das Bild ist heller, weil der Parameter-Double-Wert auf 200 steht:

Beispiel-Block 3.jpg

Probleme und Lösungen

Wenn Visual Studio die .dlls nicht findet

Es kam schon vor, dass eine unpräzise Fehlermeldung erschien, nachdem man auf 'Steuerelement Registrieren' gedrückt hat. Irgendwie fand das Programm die passenden .dlls nicht.

Falls dies auftreten sollte, kopiert folgende .dlls von 'C:/OpenCV/bin/' dahin wo sie der Rechner auf jeden Fall findet - am Besten in 'C:\Windows\System32':

- cxcore100.dll

- libguide40.dll

Wenn in Eyesweb nur ein schwarzes Bild angezeigt wird

Es kann also vorkommen, dass im Eyesweb nur ein schwarzes Ausgangsbild angezeigt wird - dieses wird behoben, indem man im Konstuktor den Bildausgang statt auf -1, -1 auf 0, -1 setzt. Eyesweb beschwert sich zwar eventuell, man kann dies aber einfach ignorieren. Hier im Konstruktor kann man übrigens die Namen verändern, wenn man mit den eingegebenen Namen nicht zufrieden ist.

Beispiel-Block 4.png

Tip: Bei Veränderungen in Visual Studio muss nur F7 gedrückt werden, wenn der Block einmal registriert ist. Eyesweb erkennt die Veränderung automatisch - muss aber während der Kompilierung geschlossen sein.


Artikel zu Anwendungen mit EyesWeb

Die Artikel enthalten auch Vorgehensweisen und Beispiele zum Schreiben eigener EyesWeb-Blöcke