Користувальницькькі налаштування

Налаштування сайту


Сайдбар

Розділи

Загальний опис
Історія змін
Рекомендації щодо оновлення
Плани на майбутнє
Відомі проблеми
Онлайн демо
Люди
Трохи про безпеку

FAQ



Редагувати сайдбар

wroptrecogmeters

Це стара версія документу!


Оптичне розпізнавання

Припустимо, на нашому WolfRecorder ведеться запис однієї з наших камер. Нехай, на ній зображено якийсь такий пейзаж.

Як не складно помітити, в поле зору камери потрапляють декілька амперметрів на щитовій. Припустимо, що одні з них, відображають якісь значення, за наявності міської мережі, що виглядає приблизно так

а інший приходить в дію та щось відображає, після заведення генератора, що на практиці виглядає якось так

Ви ж розумієте, що Ubilling може без проблем, на основі цих даних розпізнавати факт заведення генератора з метою автоматичного моніторингу, одним простеньким скриптиком OnePunch скриптом?

    $wolfRecorderHost='yourwolfrecorderhost.ua';
    $cameraChannel='camerachannelid';
    $debugMode=false;
    $powerAvailabilityThreshold=90;
 
    //describes region of interest on the image
    $controlRegion=array(
        'x1'=>1038,
        'y1'=>455,
        'x2'=>42,
        'y2'=>25
    );
 
    $cameraScreenshotUrl='http://'.$wolfRecorderHost.'/wr/howl/chanshots/'.$cameraChannel.'.jpg';
 
    $watchdogCallbackResult='';
    $generatorState=0;
    $remoteHost=new OmaeUrl($cameraScreenshotUrl);
    $originalImage=$remoteHost->response();
 
    if ($remoteHost->httpCode()==200 and $remoteHost->error()==false) {
        if (!empty($originalImage)) {
        $imageHash=md5($cameraScreenshotUrl,json_encode($controlRegion));
        $originalImagePath='exports/'.$imageHash.'.jpg';
        file_put_contents($originalImagePath, $originalImage);
 
        $powerMeter=new PixelCraft();
        $powerMeter->loadImage($originalImagePath);
        $powerMeter->cropRegion($controlRegion['x1'], $controlRegion['y1'], $controlRegion['x2'], $controlRegion['y2']);
 
        $powerMeterColorMap=$powerMeter->getColorMap(false);
        $sceneBrightness=0;
        $pixelCount=0;
        foreach ($powerMeterColorMap as $y => $x) {
            foreach ($x as $x => $color) {
                $pixelCount++;
                $sceneBrightness+=$powerMeter->rgbToBrightness($color);
            }
        }
 
        $sceneBrightness=round($sceneBrightness/$pixelCount,2);
 
        if ($debugMode) {
            $previewImage=new PixelCraft();
            $previewImage->loadImage($originalImagePath);
            $previewImage->setLineWidth(5);
            $regionPoints = array(
                $controlRegion['x1'], $controlRegion['y1'],
                $controlRegion['x1'] + $controlRegion['x2'], $controlRegion['y1'],
                $controlRegion['x1'] + $controlRegion['x2'], $controlRegion['y1'] + $controlRegion['y2'],
                $controlRegion['x1'], $controlRegion['y1'] + $controlRegion['y2']
            );
 
            $previewImage->drawPolygon($regionPoints, 'green');
            $previewImageBase64=$previewImage->getImageBase('jpeg', true);
 
            $base64CroppedImage=$powerMeter->getImageBase('jpeg', true);
 
            $debugOutput='';
            $debugOutput.='Scene brightness: '.$sceneBrightness.' Pixel count: '.$pixelCount.wf_tag('br');
            $debugOutput.= wf_img_sized($base64CroppedImage, '', '200').wf_tag('br');
            $debugOutput.= wf_img_sized($previewImageBase64, '', '900').wf_tag('br');
 
            deb($debugOutput);
        }
 
        if ($sceneBrightness>$powerAvailabilityThreshold) {
            $watchdogCallbackResult='генератор здається запущений';
            $generatorState=1;
        } else {
            $watchdogCallbackResult='генератор виглядає зупиненим';
        }
        } else {
            $watchdogCallbackResult='ERROR: отримано порожнє зображення';
        }
    } else {
        $watchdogCallbackResult='ERROR: не вдалося завантажити зображення з віддаленого хоста';
    }
 
    deb($watchdogCallbackResult);
wroptrecogmeters.1765304085.txt.gz · Востаннє змінено: 2025/12/09 20:14 повз nightfly