Bild-Filter

Beim Nutzen des Medienzugriffs können die von der Kamera gelesenen Bilder durch einen Filter optimiert werden. Dadurch können zum Beispiel Bilder vor dem Vergleichen in Schwarz-Weiß-Bilder umgewandelt werden.

Folgende Filter sind bereits in ecu.test enthalten:

Blur - Mit diesem Filter kann das Bild verwischt werden. Dies kann in einigen Fällen die Objekterkennung verbessern.

Black / White Filter - Dieser Filter ermöglicht das Hervorheben von Bereichen, die einen bestimmten Helligkeitswert überschreiten. Das resultierende Bild wird nur schwarz/weiß dargestellt.

Color Filter - Mit diesem Filter werden Bereiche, die eine bestimmte Farbe haben, hervorgehoben. Das resultierende Bild wird schwarz/weiß dargestellt. Zur Verbesserung der Texterkennung könnten hier etwa eine (oder mehrere) Textfarben angegeben werden.

Contrast & Brightness - Mit diesem Filter können Kontrast und Helligkeit des Bildes manipuliert werden.

HSV - Mit diesem Filter können Farbwert (Hue), Sättigung (Saturation) und Helligkeitswert (Value) manipuliert werden. Ermöglicht beispielsweise eine Graustufendarstellung des Bildes wenn die Sättigung 0 ist.

Invert - Invertiert das Bild.

Benutzerdefinierte Bild-Filter

Die ausgelieferten Filter können um eigens definierte Filter erweitert werden. Diese können dann über die interne API oder im Bild-Lesen-Dialog verwendet werden.

Bei einem benutzerdefinierten Bild-Filter handelt es sich um ein Python-Script, welches innerhalb des UserPyModules-Ordners des Workspace abgelegt sein muss.

Damit es als gültiger Filter erkannt wird, muss das Python-Script bestimmte Voraussetzungen erfüllen:

  • Das Script muss sich unterhalb des UserPyModules-Ordners im Workspace befinden

  • Auf oberster Ebene muss MODULE_TYPE = ‚ImageFilter‘ definiert sein.

  • Die Datei muss eine Klasse „Filter“ enthalten, die von ImageFilter erbt.

  • Diese Klasse muss die Methoden GetDocumentation und ProcessImage implementieren.

  • Es darf nicht zwei Filter mit demselben Dateinamen geben

Neu erstellte Scripte sind nach dem Aktualisieren der Benutzerbibliotheken verfügbar. Dies können Sie in ecu.test im Menü „Extras“ tun.

Minimaler Filter anhand eines Beispieles

Dies ist ein Beispiel für einen minimalen Nutzerfilter

import cv2

from tts.testModule.multimedia.dataElements.UserFilters import ImageFilter

MODULE_TYPE = 'ImageFilter'

class Filter(ImageFilter):

    @classmethod
    def GetDocumentation(cls):
        doc = super().GetDocumentation()
        doc.SetName('Blurring')
        argument = doc.AppendArgument('Type')
        argument.SetDescription('"AVERAGING", "GAUSS" oder "MEDIAN"')
        argument.SetDefaultValue('"GAUSS"')

        argument = doc.AppendArgument('Kernelsize')
        argument.SetDescription('Size of the kernel matrix. Has to be an odd value.')
        argument.SetDefaultValue('55')

        return doc

    def ProcessImage(self, imageData, parameters):
        # b, g, r, a = cv2.split(imageData)
        type = parameters['Type']
        size = parameters['Kernelsize']
        if type == "AVERAGING":
            blur = cv2.blur(imageData, (size, size))
        elif type == 'GAUSS':
            blur = cv2.GaussianBlur(imageData, (size, size), 0)
        elif type == 'MEDIAN':
            blur = cv2.medianBlur(imageData, size)
        else:
            raise RuntimeError()
        return blur

    @classmethod
    def GetId(cls):
        # Diese Methode sollte implementiert werden und eine eindeutige UUID zurückgeben.
        # UUIDs können mit einem beliebigen Generator erstellt werden.
        return "YOUR-GENERATED-UUID"

Erklärung der verfügbaren Methoden

Klasse „Filter“

Diese Klasse muss vom Python-Skript implementiert werden.

ProcessImage

Die Funktion muss implementiert werden. Sie hat zwei Argumente:

  • Ein OpenCV-Numpy-Array (numpy.ndarray) mit dem gelesenen und maskierten Bild. Das Array hat vier Unterarrays für die vier Kanäle: Blau, Grün, Rot, Alpha.

  • ein Dictionary von dem die unter GetDocumentation() hinzugefügten Parameter abgefragt werden können.

  • Die Funktion muss ein OpenCV-Numpy-Array (numpy.ndarray) mit den vier Farbkanälen Blau, Grün, Rot, Alpha zurückgeben.

GetDocumentation

Die Methode kann verwendet werden, um die Parameter des Filters zu definieren. Verwendung: Siehe Codebeispiel.

GetId

Diese Methode sollte überschrieben werden und eine eindeutige Filter-ID zurückgeben. Filter werden anhand dieser ID im Testfall referenziert.

Standardmäßig wird die ID anhand des Dateipfades unterhalb des UserPyModule-Ordners generiert. Wenn die Datei in einen anderen Ordner verschoben wird, verändert sich die ID und Referenzen auf den Filter in bestehenden Packages werden ungültig. Daher wird empfohlen, eine eigene ID zu generieren und zurückzugeben.

Zwei Filter dürfen niemals dieselbe ID besitzen.

Objekt „FilterDocumentation“

Dieses Objekt wird in der Methode Filter.GetDocumentation zurückgegeben, wenn super().GetDocumentation() aufgerufen wird. Mit der Filterdokumentation können einzelne Parameter definiert werden.

SetName

Setzt den Anzeigenamen des Filters.

AppendArgument (name)

Fügt ein Argument namens „name“ hinzu, das in ecu.test im Bild-Lesen-Dialog angezeigt wird. Gibt das FilterArgument als Objekt zurück.

Objekt „FilterArgument“

Dieses Objekt wird durch die Methode FilterDocumentation.AppendArgument(‚Ein Argument‘) zurückgegeben. Es definiert einen einzelnen Parameter auf einem Filter.

SetRequired (value)

Markiert einen Filter als Pflichtangabe. Der Parameter „value“ kann dabei True oder False sein.

SetDescription (description)

Setzt die Beschreibung des Filters

SetDefaultValue (defaultValue)

Setzt den Standardwert des Arguments