<?php
//error_reporting(0);

//shell_exec('fswebcam -r 160x120 -S 10 --jpeg 95 --set sharpness=15 --set contrast=60% --set brightness=50% --set "White Balance Temperature"=0 --no-banner --save /tmp/power.jpg 2>&1');

$img imagecreatefromjpeg('power.jpg');

$treshold 33;
 
$display = array( 
        
=> 'ABCDEF',
        
=> 'BC',
        
=> 'ABDEG',
        
=> 'ABCDG',
        
=> 'BCFG',
        
=> 'ACDFG',
        
=>'ACDEFG',
        
=> 'ABC',
        
=> 'ABCDEFG',
        
=> 'ABCDFG',
        );


$digits[0] = array(
        
'A' => [26,46],
        
'B' => [18,24],
        
'C' => [14,47],
        
'D' => [26,46],
        
'E' => [26,46],
        
'F' => [26,46],
        
'G' => [26,46],
        
'ref' => [30,50],
     );

$digits[1] = array(
        
'A' => [54,11],
        
'B' => [65,23],
        
'C' => [62,47],
        
'D' => [49,60],
        
'E' => [38,48],
        
'F' => [38,23],
        
'G' => [51,35],
        
'ref' => [76,20],
     );


$digits[2] = array(
        
'A' => [101,10],
        
'B' => [113,20],
        
'C' => [112,48],
        
'D' => [98,59],
        
'E' => [86,47],
        
'F' => [88,22],
        
'G' => [99,34],
        
'ref' => [100,20],
     );

$segments = array();
$codes array_flip($display);
$return '';

foreach(
$digits as $digit => $coord) {
    foreach(
$coord as $segment => $pixel) {
        
$r $g $b $z 0;
        for (
$x = -2$x !=2$x++) {
             for (
$y = -2$y !=2$y++) {
                
$rgb imagecolorat($img$pixel[0]+$x$pixel[1]+$y);
                
imagesetpixel($img$pixel[0]+$x$pixel[1]+$yimagecolorallocate($img25500));
                
$r += ($rgb >> 16) & 0xFF;
                
$g += ($rgb >> 8) & 0xFF;
                
$b += $rgb 0xFF;
                
$z++;
            }
        }
        
$segments[$segment] = array($r/$z,$g/$z,$b/$z);
    }

    
$code '';
    
    foreach(
$segments as $segment => $rgb) {
        if ((
$segments['ref'][0] - $rgb[0]) > $treshold 
        
&& ($segments['ref'][1] - $rgb[1]) > $treshold
        
&& ($segments['ref'][2] - $rgb[2]) > $treshold) {
            
$code .= $segment;
        }
    }
    if (isset(
$codes[$code])) {
        
$return .= $codes[$code];
    } else {
        die(
'Error');
    }
    
    if (empty(
$_GET['silent'])) {
        echo 
"<h1>$digit</h1>";
        echo 
"$code = $codes[$code]<br>";
    }
}

if (!empty(
$_GET['silent'])) die ($return);

ob_start();
imagejpeg($imgnull100);
$img base64_encode(ob_get_clean());
echo 
'<img alt="OCR pixels" src="data:image/jpeg;base64,'.$img.'">';