PHP Bibliothek einbinden / Tesseract

Hallo zusammen, ich würde gerne die tesseract OCR Erkennung in IPS nutzen. Ich erinnere mich ganz grob, dass ich die Bibliothek in IPS einbinden muss. Aber wie ging das doch gleich? Und sind die auf der gleichen PHP Version, so dass das problemlos läuft oder zerschieße ich mir dann mein System…? :slight_smile:
Danke schon mal für die Hilfe…

https://tesseract-ocr.github.io

Gibt es denn niemanden, der hier mal einen Tipp für mich hat? Oder einen Verweis auf entsprechende Doku o.ä.? Vielen Dank im Voraus…

Naja, das ist halt keine typische IPS Anwendung. Zunächst muss tesseract ins Betriebssystem installiert werden. Dann gibt es ein paar Wrapper für PHP, wobei die meistens nur mit dem System-PHP funktionieren, aber nicht mit IPS, weil dafür oft Extensions benötigt werden, die unter IPS nicht installiert werden können.
ein Beispiel findet sich z.B. hier:

@tommi : Vielen Dank! D.h., ich kann das eigentlich nicht ohne Unterstützung des IT – Symcon Entwicklerteams nutzen? Gibt es denn eine andere Möglichkeit, OCR auf JPEG – Bilder von IP-Symcon aus anzuwenden?

Verstehe nicht, warum man das unbedingt aus Symcon heraus machen will. Normalerweise kommen in Symcon keine eingescannte Dokumente an.
Man kann natürlich versuchen, mit den PHP Funktionen die Tesseract Binaries auf der Kommandozeile anzusteuern. Siehe auch die Unterscheidung in command - PHP exec() vs system() vs passthru() - Stack Overflow und die Zeitlimits von PHP

Stimmt :wink: aber ich würde gerne einige ältere Kameras nutzen, um zum Beispiel meinen Gaszähler auszulesen. Ein Code-Beispiel in PHP für Tessearct habe ich bereits in der Dokumentation gefunden:

<?php

require_once ‚vendor/autoload.php‘; // Pfade anpassen, um die Tesseract-Bibliothek zu laden

use thiagoalessio\TesseractOCR\TesseractOCR;

// Pfad zur Bild-Datei
$imagePath = ‚pfad/zum/bild.jpg‘;

// OCR durchführen
$tesseract = new TesseractOCR($imagePath);
$result = $tesseract->run();

// Extrahierte Zahlen anzeigen
echo "Extrahierte Zahlen: " . $result;

?>

Auch gibt es von der Uni Mannheim ein Executable für Windows, dass ich installiert habe.

Wo ist bei mir Hakt, ist die Verbindung zwischen der Tesseract Runtime und dem aufrufenden Code aus IP – Symcon beziehungsweise PHP…

Nachdem ich jetzt verstanden habe, wie man andere PHP Bibliotheken in IPS einbindet, habe ich nochmal einen neuen Anlauf mit Tesseract gemacht.

Den Wrapper für PHP gibt es bekanntermaßen hier: GitHub - thiagoalessio/tesseract-ocr-for-php: A wrapper to work with Tesseract OCR inside PHP.

Die Tesseract Bibliothek für Windows habe ich von hier installiert: Introduction | tessdoc

Mit dem folgenden Code läuft die Erkennung. Allerdings ist das Ergebnis nicht ganz korrekt: Extrahierte Zahlen: 1773) 918 1 obwohl das Bild wie folgt aussieht:

image

<?php

    // TESSERACT PHP WRAPPER INSTALLIERT VON https://github.com/thiagoalessio/tesseract-ocr-for-php/tree/main
    // DIE SRC DATEIEN STEHEN IM IPS VERZEICHNIS scripts/TesseractOCR
    // DIE IMPLEMENTIERUNG FINDET MAN UNTER https://github.com/tesseract-ocr/tesseract
    // ODER ALS WINDOWS INSTALLER UNTER https://tesseract-ocr.github.io/tessdoc/Installation.html

    use thiagoalessio\TesseractOCR\TesseractOCR;
    use thiagoalessio\TesseractOCR\TesseractOcrException;
    use thiagoalessio\TesseractOCR\Tests\Common\TestCase;

    require("./TesseractOCR/TesseractOCR.php");
    require("./TesseractOCR/Process.php");
    require("./TesseractOCR/TesseractOcrException.php");
    require("./TesseractOCR/Command.php");
    require("./TesseractOCR/FriendlyErrors.php");
    require("./TesseractOCR/TesseractNotFoundException.php");
    require("./TesseractOCR/ImageNotFoundException.php");
    require("./TesseractOCR/UnsuccessfulCommandException.php");
    
    // 
    $filename = 'c:\\programdata\\symcon\\cams\\18129.jpg';

    // Load
    $source = imagecreatefromjpeg($filename);

    // Resize
    $thumb = imagecrop($source, ['x' => 830, 'y' => 330, 'width' => 115, 'height' => 30]);

    // Filter
    imagefilter($thumb, IMG_FILTER_GRAYSCALE); 
    imagefilter($thumb, IMG_FILTER_BRIGHTNESS, +50); 
    imagefilter($thumb, IMG_FILTER_CONTRAST, -60); 

    // Output
    imagejpeg($thumb, 'c:\\programdata\\symcon\\cams\\image.jpg');

    // New file
    $imagePath = 'c:\\programdata\\symcon\\cams\\image.jpg';

    // Conduct OCR
    $tesseract = new TesseractOCR($imagePath);
    $result = $tesseract->run();

    // Result
    echo "Extrahierte Zahlen: " . $result;

?>

Hat jemand von Euch Erfahrung mit Tesseract? Wie bekommt man in meinem Fall den Gaszähler korrekt erkannt? Kennt jemand eine PHP Funktion, mit der man das Bild von Grauwerten in Schwarz-Weiß umwandeln kann?

Ach ja: So sieht das Original aus: