Verwendung von Bildkorrekturfiltern

This article was translated from English: Does it need improvement?
Translated
View the article in English

von Hairil Hasyimi Bin Omar

Seien wir ehrlich. Nicht jedes Bild ist perfekt, und es ist auch einer der Hauptfaktoren, dass ein Barcodebild von IronBarcode nicht gelesen werden kann. Das ist nicht allein die Schuld des Nutzers. Anstatt sich die Mühe zu machen, das Bild neu zu erfassen oder eine andere Software zur Bildverbesserung zu verwenden, hat IronBarcode eine Funktion entwickelt, mit der der Benutzer programmatisch Filter auf das Bild anwenden kann. Dies würde IronBarcode helfen, das Bild zu lesen und die Genauigkeit zu verbessern.

Lesen Sie weiter, um mehr über die verfügbaren Bildkorrekturfilter in IronBarcode, ihre Auswirkungen auf Bilder und ihre Anwendung zu erfahren.

Erste Schritte mit IronBarcode

Beginnen Sie noch heute mit der Verwendung von IronBarcode in Ihrem Projekt mit einer kostenlosen Testversion.

Erster Schritt:
green arrow pointer


Verwendung von Bildfiltern zur Verbesserung der Lesbarkeit Beispiel

Um den Filter anzuwenden, instanziieren Sie die Klasse ImageFilterCollection und erstellen Sie Instanzen der einzelnen Filter. Weisen Sie das Objekt dann der Eigenschaft ImageFilters des Objekts BarcodeReaderOptions zu. das Optionsobjekt zusammen mit dem Beispielbild an die Methode "Read" übergeben.

Verwenden wir das unten stehende Bild als Beispielbild.

Beispielbild

Auf den ersten Blick scheint das Bild ziemlich unscharf zu sein. Die Helligkeit ist jedoch akzeptabel, und die Farben Weiß und Schwarz sind gut unterscheidbar. Daher müssen wir mindestens den SharpenFilter und den ContrastFilter anwenden, um die Lesbarkeit des Strichcodes zu verbessern. Im folgenden Codeschnipsel können Sie die Filter auf das Bild anwenden, es lesen und in der Konsole anzeigen.

:path=/static-assets/barcode/content-code-examples/how-to/image-correction-apply-filter.cs
using IronBarCode;
using System;

BarcodeReaderOptions options = new BarcodeReaderOptions()
{
    // Choose which filters are to be applied (in order)
    ImageFilters = new ImageFilterCollection()
    {
        new SharpenFilter(3.5f),
        new ContrastFilter(2)
    },
};

// Apply options and read the barcode
BarcodeResults results = BarcodeReader.Read("sample.png", options);

// Write the result value to console
foreach (BarcodeResult result in results)
{
    Console.WriteLine(result.Text);
}
Imports IronBarCode
Imports System

Private options As New BarcodeReaderOptions() With {
	.ImageFilters = New ImageFilterCollection() From {
		New SharpenFilter(3.5F),
		New ContrastFilter(2)
	}
}

' Apply options and read the barcode
Private results As BarcodeResults = BarcodeReader.Read("sample.png", options)

' Write the result value to console
For Each result As BarcodeResult In results
	Console.WriteLine(result.Text)
Next result
VB   C#

Aus dem obigen Codeausschnitt geht hervor, dass wir neben der Anwendung von Filtern und dem Lesen des Strichcodes auch das gefilterte Bild auf die Festplatte exportiert haben. Der Vergleich zwischen dem Muster und den gefilterten Bildern ist unten zu sehen.

Beispielbild
Gefilterte Probe

Bildkorrekturfilter erkunden

IronBarcode bietet mehrere Bildfilter, die speziell für die Bildkorrektur entwickelt wurden. Diese Filter können beim Lesen unvollkommener Barcode-Bilder helfen und die Lesegenauigkeit verbessern. Die Benutzer müssen jedoch verstehen, wie diese Filter funktionieren, um

geeigneten Filter auswählen und Leistungsprobleme durch zu viel oder falschen Filter vermeiden. Nachfolgend finden Sie alle verfügbaren Filter:

  • AdaptiveThresholdFilter
  • BinaryThresholdFilter
  • HelligkeitsFilter
  • ContrastFilter
  • InvertFilter
  • SharpenFilter
  • Unschärfe-Filter

    GaussianBlurFilter

    • Bilateralfilter

    MedianBlurFilter

    Die Reihenfolge, in der diese Filter angewendet werden, richtet sich nach ihrer Platzierung innerhalb der ImageFilterCollection.

Adaptiver Schwellenwertfilter

der AdaptiveThresholdFilter** ist einer der in IronBarcode verfügbaren Filter, der Folgendes anwendetBradley Adaptiver Schwellenwert technik auf das Bild, die automatisch den Schwellenwert für die Binarisierung eines Bildes bestimmt. Dieser Filter ist ideal für Bilder mit ungleichmäßiger Beleuchtung und unterschiedlicher Hintergrundintensität.

:path=/static-assets/barcode/content-code-examples/how-to/image-correction-adaptive-threshold.cs
using IronBarCode;

BarcodeReaderOptions options = new BarcodeReaderOptions()
{
    // Choose which filters are to be applied (in order)
    ImageFilters = new ImageFilterCollection(true) {
        new AdaptiveThresholdFilter(0.9f),
    },
};

// Apply options and read the barcode
BarcodeResults results = BarcodeReader.Read("sample.png", options);

// Export file to disk
results.ExportFilterImagesToDisk("adaptiveThreshold_0.9.png");
Imports IronBarCode

Private options As New BarcodeReaderOptions() With {
	.ImageFilters = New ImageFilterCollection(True) From {New AdaptiveThresholdFilter(0.9F)}
}

' Apply options and read the barcode
Private results As BarcodeResults = BarcodeReader.Read("sample.png", options)

' Export file to disk
results.ExportFilterImagesToDisk("adaptiveThreshold_0.9.png")
VB   C#

Nachfolgend sind die Ergebnisse der Anwendung des Filters mit verschiedenen Werten dargestellt.

Standardmäßiger adaptiver Schwellenwert
0.9 Adaptiver Schwellenwert

Der Konstruktor akzeptiert auch zusätzliche Parameter für die Konfiguration:

  • Oben: Obere(weiß) farbe für die Schwellenwertbildung.
  • Tiefer: Unter(schwarz) farbe für die Schwellenwertbildung.
  • Schwellenwert: Schwellenwert(0.0-1.0) für die Binarisierung zu berücksichtigen.
  • Rechteck: Rechteckiger Bereich, auf den der Prozessor angewendet werden soll.

    Wie im obigen Ausgabebild zu sehen ist, wird das Bild binarisiert, so dass es nur noch schwarze und weiße Farben hat. Für das Lesen von Strichcodes scheint es jedoch noch nicht ideal zu sein, da Filter in Kombination verwendet werden müssen. Die Benutzer müssen mit der Empfindlichkeit der Parameter experimentieren, um die besten Ergebnisse zu erzielen.

Binärer Schwellenwertfilter

Der BinaryThresholdFilter filtert ein Bild, indem er die Pixel am angegebenen Schwellenwert aufteilt, wobei er zum Vergleich der Leuchtdichte einer Farbkomponente verwendet wird. Ähnlich wie der AdaptiveThresholdFilter kann dieser Filter neues oder unerwünschtes Rauschen einbringen, wenn er nicht korrekt verwendet wird. IronBarcode hat jedoch Standardwerte für die Eigenschaften des Filters festgelegt.

Ähnlich wie der AdaptiveThresholdFilter akzeptiert der BinaryThresholdFilter die gleichen zusätzlichen Parameter zur Konfiguration.

  • Oben: Obere(weiß) farbe für die Schwellenwertbildung.
  • Tiefer: Unter(schwarz) farbe für die Schwellenwertbildung.
  • Schwellenwert: Schwellenwert(0.0-1.0) für die Binarisierung zu berücksichtigen.
  • Rechteck: Rechteckiger Bereich, auf den der Prozessor angewendet werden soll.
:path=/static-assets/barcode/content-code-examples/how-to/image-correction-binary-threshold.cs
using IronBarCode;

BarcodeReaderOptions options = new BarcodeReaderOptions()
{
    // Choose which filters are to be applied (in order)
    ImageFilters = new ImageFilterCollection(true) {
        new BinaryThresholdFilter(0.9f)
    },
};

// Apply options and read the barcode
BarcodeResults results = BarcodeReader.Read("sample.png", options);

// Export file to disk
results.ExportFilterImagesToDisk("binaryThreshold_0.9.png");
Imports IronBarCode

Private options As New BarcodeReaderOptions() With {
	.ImageFilters = New ImageFilterCollection(True) From {New BinaryThresholdFilter(0.9F)}
}

' Apply options and read the barcode
Private results As BarcodeResults = BarcodeReader.Read("sample.png", options)

' Export file to disk
results.ExportFilterImagesToDisk("binaryThreshold_0.9.png")
VB   C#

Nachfolgend sehen Sie ein Beispiel für die Anwendung von Filtern auf das Beispielbild.

Standard-Binärschwelle
0.9 Binärer Schwellenwert

Wenn man sich das obige Ausgabebild ansieht, kann man erkennen, dass die Probe in Schwarz und Weiß binarisiert wurde. Es ist jedoch zu erkennen, dass dieser Filter für dieses Bild eindeutig ungeeignet ist, da die Striche des Barcodes entfernt wurden und neues Rauschen hinzukam.

Helligkeitsfilter

BrightnessFilter ist ein weiterer wichtiger Filter in der Bildfiltersammlung von IronBarcode. Wie der Name schon sagt, passt dieser Filter die Helligkeit des Barcode-Bildes an. Die Eingabe in diesen Konstruktor kann den Anteil der Helligkeit im Ausgabebild verändern. Der Standardwert ist 1, wodurch das Bild unverändert bleibt. Bei einem Wert von 0 wird ein komplett schwarzes Bild erzeugt, während Werte über 1 das Bild heller machen.

:path=/static-assets/barcode/content-code-examples/how-to/image-correction-brightness.cs
using IronBarCode;

BarcodeReaderOptions options = new BarcodeReaderOptions()
{
    // Choose which filters are to be applied (in order)
    ImageFilters = new ImageFilterCollection(true) {
        new BrightnessFilter(1.5f),
    },
};

// Apply options and read the barcode
BarcodeResults results = BarcodeReader.Read("sample.png", options);

// Export file to disk
results.ExportFilterImagesToDisk("brightness_1.5.png");
Imports IronBarCode

Private options As New BarcodeReaderOptions() With {
	.ImageFilters = New ImageFilterCollection(True) From {New BrightnessFilter(1.5F)}
}

' Apply options and read the barcode
Private results As BarcodeResults = BarcodeReader.Read("sample.png", options)

' Export file to disk
results.ExportFilterImagesToDisk("brightness_1.5.png")
VB   C#

Nachfolgend sehen Sie das Ausgabebild nach Anwendung dieses Filters auf das Eingabebeispiel.

Standard-Helligkeit
1.5 Helligkeit

Kontrast-Filter

Der Kontrastfilter wird verwendet, um den Kontrast in einem Bild einzustellen. Der Bildkontrast bezieht sich auf den Unterschied in der Farbintensität zwischen verschiedenen Elementen eines Bildes. Eine Erhöhung des Kontrasts verbessert die Sichtbarkeit von Details und lässt das Bild lebendig und eindrucksvoll erscheinen, während eine Verringerung des Kontrasts das Bild weicher und gedämpfter erscheinen lässt.

Der Standardwert ist 1, wodurch das Bild unverändert bleibt. Bei einem Wert von 0 wird ein vollständig graues Bild erzeugt, während Werte über 1 den Bildkontrast erhöhen.

:path=/static-assets/barcode/content-code-examples/how-to/image-correction-contrast.cs
using IronBarCode;

BarcodeReaderOptions options = new BarcodeReaderOptions()
{
    // Choose which filters are to be applied (in order)
    ImageFilters = new ImageFilterCollection(true) {
        new ContrastFilter(1.5f),
    },
};

// Apply options and read the barcode
BarcodeResults results = BarcodeReader.Read("sample.png", options);

// Export file to disk
results.ExportFilterImagesToDisk("contrast_1.5.png");
Imports IronBarCode

Private options As New BarcodeReaderOptions() With {
	.ImageFilters = New ImageFilterCollection(True) From {New ContrastFilter(1.5F)}
}

' Apply options and read the barcode
Private results As BarcodeResults = BarcodeReader.Read("sample.png", options)

' Export file to disk
results.ExportFilterImagesToDisk("contrast_1.5.png")
VB   C#

Die Anwendung dieses Filters auf das Eingabebeispiel ergibt das folgende Bild.

Standard-Kontrast
1.5 Kontrast

Filter invertieren

Dieser Filter wird verwendet, um die Farben innerhalb eines Bildes zu invertieren, d. h., Weiß wird zu Schwarz und Schwarz zu Weiß. Er ist besonders nützlich, wenn Benutzer versuchen, ein Barcode-Bild mit einer Hintergrundfarbe zu lesen. Anders als der BinaryThresholdFilter invertiert dieser Filter die Farben direkt, ohne dass die Empfindlichkeit angegeben werden muss. Außerdem kann dieser Filter mit einem CropRectangle verwendet werden, um die Stelle im Bild zu bestimmen, an der die Farbe invertiert werden soll, anstatt die Farben für das gesamte Bild zu invertieren.

:path=/static-assets/barcode/content-code-examples/how-to/image-correction-invert.cs
using IronBarCode;

BarcodeReaderOptions options = new BarcodeReaderOptions()
{
    // Choose which filters are to be applied (in order)
    ImageFilters = new ImageFilterCollection(true) {
        new InvertFilter(),
    },
};

// Apply options and read the barcode
BarcodeResults results = BarcodeReader.Read("sample.png", options);

// Export file to disk
results.ExportFilterImagesToDisk("invert.png");
Imports IronBarCode

Private options As New BarcodeReaderOptions() With {
	.ImageFilters = New ImageFilterCollection(True) From {New InvertFilter()}
}

' Apply options and read the barcode
Private results As BarcodeResults = BarcodeReader.Read("sample.png", options)

' Export file to disk
results.ExportFilterImagesToDisk("invert.png")
VB   C#

Das nachstehende Ausgabebild ist das Ergebnis der Anwendung dieses Filters auf das Beispiel-Eingabebild.

Originalbild
Umgekehrt

Filter schärfen

Der letzte Bildkorrekturfilter in IronBarcode ist der SharpenFilter. Dieser Filter verbessert die Schärfe eines Bildes und ist sehr nützlich bei unscharfen Bildern. Der Benutzer kann mit diesem Filter die Schärfe eines Bildes einstellen, indem er den Wert Sigma beim Instanziieren des Filterobjekts anpasst. Der Standardwert ist 3. Erhöhen Sie die Sigma-Werte, um die Bildschärfe zu verbessern.

:path=/static-assets/barcode/content-code-examples/how-to/image-correction-sharpen.cs
using IronBarCode;
using System;

BarcodeReaderOptions options = new BarcodeReaderOptions()
{
    // Choose which filters are to be applied (in order)
    ImageFilters = new ImageFilterCollection(true) {
        new SharpenFilter(0.5f),
    },
};

// Apply options and read the barcode
BarcodeResults results = BarcodeReader.Read("sample.png", options);

// Export file to disk
results.ExportFilterImagesToDisk("sharpen_0.5.png");
Imports IronBarCode
Imports System

Private options As New BarcodeReaderOptions() With {
	.ImageFilters = New ImageFilterCollection(True) From {New SharpenFilter(0.5F)}
}

' Apply options and read the barcode
Private results As BarcodeResults = BarcodeReader.Read("sample.png", options)

' Export file to disk
results.ExportFilterImagesToDisk("sharpen_0.5.png")
VB   C#

Das folgende Bild zeigt die geschärft version des Beispiel-Eingabebildes.

Standard Schärfen
0.5 Schärfen

Vergleicht man das obige Bild mit dem Originalbild, scheint es schärfer zu sein und würde definitiv beim Lesen von Barcodes mit IronBarcode helfen. In den meisten Fällen wird SharpenFilter immer zusammen mit anderen Filtern aus der Klasse ImageFilterCollection angewendet.

Unschärfe-Filter

GaussianBlur-Filter

Der GaussianBlurFilter wird verwendet, um einen Gaußschen Weichzeichner auf ein Bild anzuwenden. Dieser Filter wird häufig verwendet, um Bildrauschen zu reduzieren.

Der Filter funktioniert, indem er die benachbarten Pixelwerte im Bild mit einer Gauß-Funktion mittelt. Die Methode beruht auf zwei anpassbaren Faktoren:

  • Kernel: eine Matrix, die zur Durchschnittsbildung der Pixel verwendet wird.
  • Sigma: ein Wert, der die Intensität der Unschärfe steuert.

    Die Standardkerngröße beträgt 3x3 Pixel und der Standardwert für Sigma ist 3,0, was einen mäßigen Unschärfeeffekt erzeugt. Eine Erhöhung des Sigma-Werts führt zu einem stärkeren Unschärfeeffekt. Sie können auch den Kernel anpassen, um die Größe der Nachbarschaft zu steuern, die der Unschärfefilter durchschnittlich berechnet.

:path=/static-assets/barcode/content-code-examples/how-to/image-correction-gaussianblur.cs
using IronBarCode;

BarcodeReaderOptions myOptionsExample = new BarcodeReaderOptions()
{
    // Choose which filters are to be applied (in order)
    ImageFilters = new ImageFilterCollection(true) {
        new GaussianBlurFilter(3, 3, 3.0f),
    },
};

// Apply options and read the barcode
BarcodeResults results = BarcodeReader.Read("sharpen.webp", myOptionsExample);

// Export file to disk
results.ExportFilterImagesToDisk("gaussianBlur.png");
Imports IronBarCode

Private myOptionsExample As New BarcodeReaderOptions() With {
	.ImageFilters = New ImageFilterCollection(True) From {New GaussianBlurFilter(3, 3, 3.0F)}
}

' Apply options and read the barcode
Private results As BarcodeResults = BarcodeReader.Read("sharpen.webp", myOptionsExample)

' Export file to disk
results.ExportFilterImagesToDisk("gaussianBlur.png")
VB   C#

Die Anwendung dieses Filters auf das Eingabebeispiel ergibt das folgende Bild.

Standard Schärfen
GaussianBlur-Bild

Bilaterale Filter

Der BilateralFilter wird verwendet, um Bilder zu glätten, während Kanten erhalten bleiben. Im Gegensatz zu einfachen Unschärfetechniken, die alle Pixel gleichmäßig beeinflussen, berücksichtigt der Bilateralfilter sowohl Farbunterschiede als auch den Pixelabstand, was ihn effektiv für kantenbewahrende Glättung macht.

Die Methode beruht auf drei anpassbaren Faktoren:

  • NeighborhoodDiameter: Gibt den Durchmesser der Pixelnachbarschaft an, die für die Filterung verwendet wird. Ein größerer Durchmesser umfasst mehr umliegende Pixel im Filter. Der Standardwert ist 5.
  • SigmaColor: Dies repräsentiert den Farbeinfluss. Es bestimmt, wie stark der Farbunterschied zwischen benachbarten Pixeln die Filterung beeinflusst. Ein höherer Wert bedeutet, dass Pixel mit unterschiedlichen Farben sich stärker gegenseitig beeinflussen. Der Standardwert ist 75,0.
  • SigmaSpace: Dies repräsentiert den räumlichen Einfluss. Es bestimmt, wie stark der Abstand zwischen den Pixeln die Filterung beeinflusst. Ein höherer Wert bedeutet, dass weiter auseinanderliegende Pixel einander stärker beeinflussen werden. Der Standardwert ist 75,0.
:path=/static-assets/barcode/content-code-examples/how-to/image-correction-bilateral.cs
using IronBarCode;

BarcodeReaderOptions myOptionsExample = new BarcodeReaderOptions()
{
    // Choose which filters are to be applied (in order)
    ImageFilters = new ImageFilterCollection(true) {
        new BilateralFilter(5, 75, 75),
    },
};

// Apply options and read the barcode
BarcodeResults results = BarcodeReader.Read("sharpen.webp", myOptionsExample);

// Export file to disk
results.ExportFilterImagesToDisk("bilateral.png");
Imports IronBarCode

Private myOptionsExample As New BarcodeReaderOptions() With {
	.ImageFilters = New ImageFilterCollection(True) From {New BilateralFilter(5, 75, 75)}
}

' Apply options and read the barcode
Private results As BarcodeResults = BarcodeReader.Read("sharpen.webp", myOptionsExample)

' Export file to disk
results.ExportFilterImagesToDisk("bilateral.png")
VB   C#

Die Anwendung dieses Filters auf das Eingabebeispiel ergibt das folgende Bild.

Standard Schärfen
Bilaterales Bild

MedianBlur-Filter

Der MedianBlurFilter ist ein Filter, der zur Reduzierung von Bildrauschen verwendet wird, indem der Wert jedes Pixels mit dem Medianwert der umliegenden Pixel ersetzt wird. Dieser Filter ist besonders effektiv beim Erhalt von Kanten, während er Rauschen entfernt.

  • KernelSize: Definiert die Größe der Nachbarschaft um jedes Pixel, die zur Berechnung des Medians verwendet wird. Der Wert muss eine ungerade Zahl größer als 0 sein. Der Standardwert ist 5.
:path=/static-assets/barcode/content-code-examples/how-to/image-correction-medianblur.cs
using IronBarCode;

BarcodeReaderOptions myOptionsExample = new BarcodeReaderOptions()
{
    // Choose which filters are to be applied (in order)
    ImageFilters = new ImageFilterCollection(true) {
        new MedianBlurFilter(5),
    },
};

// Apply options and read the barcode
BarcodeResults results = BarcodeReader.Read("sharpen.webp", myOptionsExample);

// Export file to disk
results.ExportFilterImagesToDisk("medianBlur.png");
Imports IronBarCode

Private myOptionsExample As New BarcodeReaderOptions() With {
	.ImageFilters = New ImageFilterCollection(True) From {New MedianBlurFilter(5)}
}

' Apply options and read the barcode
Private results As BarcodeResults = BarcodeReader.Read("sharpen.webp", myOptionsExample)

' Export file to disk
results.ExportFilterImagesToDisk("medianBlur.png")
VB   C#

Die Anwendung dieses Filters auf das Eingabebeispiel ergibt das folgende Bild.

Standard Schärfen
MedianBlur-Bild

Iterationen speichern

Wenn mehrere Filter auf den Barcode angewendet werden, kann es schwierig sein, das Ergebnis nach jeder Filtermethode zu sehen. Diese Funktion ermöglicht das Speichern des gefilterten Bildes nach jeder Anwendung eines Filters, in der Reihenfolge, in der sie verarbeitet werden. Um diese Funktion zu aktivieren, übergeben Sie zunächst true an den ImageFilterCollection-Konstruktor. Verwenden Sie dann die Methode ExportFilterImagesToDisk, um den Pfad und Namen für die Ausgabebilder bereitzustellen.

:path=/static-assets/barcode/content-code-examples/how-to/image-correction-save-iterations.cs
using IronBarCode;

BarcodeReaderOptions myOptionsExample = new BarcodeReaderOptions()
{
    // Choose which filters are to be applied (in order)
    ImageFilters = new ImageFilterCollection(true) {
        new SharpenFilter(3.5f),
        new AdaptiveThresholdFilter(0.5f),
        new ContrastFilter(2)
    },
};

// Apply options and read the barcode
BarcodeResults results = BarcodeReader.Read("sample.webp", myOptionsExample);

// Export file to disk
results.ExportFilterImagesToDisk("filteredImage.png");
Imports IronBarCode

Private myOptionsExample As New BarcodeReaderOptions() With {
	.ImageFilters = New ImageFilterCollection(True) From {
		New SharpenFilter(3.5F),
		New AdaptiveThresholdFilter(0.5F),
		New ContrastFilter(2)
	}
}

' Apply options and read the barcode
Private results As BarcodeResults = BarcodeReader.Read("sample.webp", myOptionsExample)

' Export file to disk
results.ExportFilterImagesToDisk("filteredImage.png")
VB   C#

Die Filter werden in der Reihenfolge des Codes angewendet, und die Ausgabebilder spiegeln die Ergebnisse jeder Iteration wider.

  • Schärfen -> Nach dem Schärfen
  • Schärfen + Adaptiver Schwellenwert -> Nach adaptivem Schwellenwert
  • Schärfen + Adaptiver Schwellenwert + Kontrast -> Nach Kontrast
    Beispielbild
    1.5 Kontrast
    Beispielbild
    1.5 Kontrast

    Abgesehen von ImageFilters eigenschaften können Benutzer auch andere Eigenschaften in BarcodeReaderOptions für genauere Ablesung, siehe dies artikel für weitere Informationen.

Hairil related to Iterationen speichern

Hairil Hasyimi Bin Omar

Software-Ingenieur

Wie alle großartigen Ingenieure ist Hairil ein eifriger Lerner. Er verfeinert seine Kenntnisse in C#, Python und Java und nutzt dieses Wissen, um den Teammitgliedern von Iron Software einen Mehrwert zu bieten. Hairil kam von der Universiti Teknologi MARA in Malaysia zum Iron Software-Team, wo er einen Bachelor-Abschluss in Chemie- und Verfahrenstechnik erwarb.