From 634f2f41093e0f89abb0b656074e79cd2d437abb Mon Sep 17 00:00:00 2001 From: Sebastian Nohn Date: Thu, 8 Feb 2024 00:02:53 +0100 Subject: [PATCH 1/2] catch tesseract exceptions allowing to configure watermeter in case ocr fails while configuring --- classes/Reader.php | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/classes/Reader.php b/classes/Reader.php index 7d1da14..af48eb3 100644 --- a/classes/Reader.php +++ b/classes/Reader.php @@ -29,6 +29,7 @@ use Imagick; use nohn\AnalogMeterReader\AnalogMeter; use thiagoalessio\TesseractOCR\TesseractOCR; +use thiagoalessio\TesseractOCR\TesseractOcrException; class Reader extends Watermeter { @@ -85,7 +86,7 @@ private function readDigits($post_decimal = false) foreach ($digits_to_read as $digit) { $rawDigit = clone $digitalSourceImage; - if(isset($digit['width']) && $digit['width'] >0 && isset($digit['height']) && $digit['height'] >0) { + if (isset($digit['width']) && $digit['width'] > 0 && isset($digit['height']) && $digit['height'] > 0) { $rawDigit->cropImage($digit['width'], $digit['height'], $digit['x'], $digit['y']); $targetImage->addImage($rawDigit); if ($this->debug) { @@ -107,20 +108,24 @@ private function readDigits($post_decimal = false) } $numberDigitalImage->setImageFormat("png"); $numberDigitalImage->borderImage('white', 10, 10); - - $ocr = new TesseractOCR(); - $ocr->imageData($numberDigitalImage, sizeof($numberDigitalImage)); - $ocr->allowlist(range('0', '9')); - $numberOCR = $ocr->run(); + try { + $ocr = new TesseractOCR(); + $ocr->imageData($numberDigitalImage, sizeof($numberDigitalImage)); + $ocr->allowlist(range('0', '9')); + $numberOCR = $ocr->run(); + } catch (TesseractOcrException $e) { + $numberOCR = 0; + $this->errors[] = $e->getMessage(); + } $numberDigital = preg_replace('/\s+/', '', $numberOCR); // There is TesseractOCR::digits(), but sometimes this will not convert a letter do a similar looking digit but completely ignore it. So we replace o with 0, I with 1 etc. $numberDigital = strtr($numberDigital, 'oOiIlzZsSBg', '00111225589'); // $numberDigital = '00815'; if ($this->debug) { - $numberDigitalImage->writeImage('tmp/'.$cachePrefix.'_digital.jpg'); + $numberDigitalImage->writeImage('tmp/' . $cachePrefix . '_digital.jpg'); echo "Raw OCR: $numberOCR
"; echo "Clean OCR: $numberDigital"; - echo 'Digital Preview
'; + echo 'Digital Preview
'; } if (is_numeric($numberDigital)) { @@ -139,7 +144,7 @@ private function readDigits($post_decimal = false) echo ''; echo ''; } return $numberRead; @@ -196,4 +201,4 @@ public function getErrors() { return $this->errors; } -} \ No newline at end of file +} From 0150e7ab3b72e5f572297815bc4382d2bf8ecb7e Mon Sep 17 00:00:00 2001 From: Sebastian Nohn Date: Thu, 8 Feb 2024 00:05:26 +0100 Subject: [PATCH 2/2] prepare release --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d24aa82..b681c64 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +# 2024-02-08 v1.2.21 +- don't fail configuration if OCR fails (#113) + # 2023-02-19 v1.2.20 - update PHP to 8.2.3
'; $digitalSourceImage->writeImage('tmp/input.jpg'); - $numberDigitalImage->writeImage('tmp/'.$cachePrefix.'_digital.png'); + $numberDigitalImage->writeImage('tmp/' . $cachePrefix . '_digital.png'); echo '