Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.
| Порівняння попередніх версій Попередня ревізія Наступна ревізія | Попередня ревізія | ||
|
wroptrecogmeters [2025/12/09 20:08] nightfly |
wroptrecogmeters [2025/12/11 00:50] (поточний) nightfly |
||
|---|---|---|---|
| Рядок 1: | Рядок 1: | ||
| ====== Оптичне розпізнавання ====== | ====== Оптичне розпізнавання ====== | ||
| - | Припустимо, | + | Припустимо, |
| {{: | {{: | ||
| - | Як не складно помітити, | + | Як не складно помітити, |
| + | {{: | ||
| - | {{: | ||
| - | а інший приходить в дію та щось відображає, | + | а інший приходить в дію та щось відображає, |
| - | {{: | + | {{: |
| + | Ви ж розумієте, | ||
| + | <code php> | ||
| + | $wolfRecorderHost=' | ||
| + | $cameraChannel=' | ||
| + | $powerAvailabilityThreshold=90; | ||
| + | $debugMode=false; | ||
| + | // описує координати сцени, яка буде аналізуватись | ||
| + | $controlRegion=array( | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ); | ||
| + | $cameraScreenshotUrl=' | ||
| + | | ||
| + | $watchdogCallbackResult=''; | ||
| + | $generatorState=0; | ||
| + | $remoteHost=new OmaeUrl($cameraScreenshotUrl); | ||
| + | $originalImage=$remoteHost-> | ||
| + | | ||
| + | if ($remoteHost-> | ||
| + | if (!empty($originalImage)) { | ||
| + | $imageHash=md5($cameraScreenshotUrl.json_encode($controlRegion)); | ||
| + | $originalImagePath=' | ||
| + | file_put_contents($originalImagePath, | ||
| + | |||
| + | $powerMeter=new PixelCraft(); | ||
| + | $powerMeter-> | ||
| + | $powerMeter-> | ||
| + | | ||
| + | $powerMeterColorMap=$powerMeter-> | ||
| + | $sceneBrightness=0; | ||
| + | $pixelCount=0; | ||
| + | foreach ($powerMeterColorMap as $y => $x) { | ||
| + | foreach ($x as $x => $color) { | ||
| + | $pixelCount++; | ||
| + | $sceneBrightness+=$powerMeter-> | ||
| + | } | ||
| + | } | ||
| + | |||
| + | $sceneBrightness=round($sceneBrightness/ | ||
| + | |||
| + | if ($debugMode) { | ||
| + | $previewImage=new PixelCraft(); | ||
| + | $previewImage-> | ||
| + | $previewImage-> | ||
| + | $regionPoints = array( | ||
| + | $controlRegion[' | ||
| + | $controlRegion[' | ||
| + | $controlRegion[' | ||
| + | $controlRegion[' | ||
| + | ); | ||
| + | | ||
| + | $previewImage-> | ||
| + | $previewImageBase64=$previewImage-> | ||
| + | |||
| + | $base64CroppedImage=$powerMeter-> | ||
| + | | ||
| + | $debugOutput=''; | ||
| + | $debugOutput.=' | ||
| + | $debugOutput.= wf_img_sized($base64CroppedImage, | ||
| + | $debugOutput.= wf_img_sized($previewImageBase64, | ||
| + | | ||
| + | deb($debugOutput); | ||
| + | } | ||
| + | |||
| + | if ($sceneBrightness> | ||
| + | $watchdogCallbackResult=' | ||
| + | $generatorState=1; | ||
| + | } else { | ||
| + | $watchdogCallbackResult=' | ||
| + | } | ||
| + | } else { | ||
| + | $watchdogCallbackResult=' | ||
| + | } | ||
| + | } else { | ||
| + | $watchdogCallbackResult=' | ||
| + | } | ||
| + | |||
| + | deb($watchdogCallbackResult); | ||
| + | </ | ||
| + | |||
| + | Як відбувається аналіз сцени? Дуже просто. Зі сцени вирізається ось ця область, | ||
| + | |||
| + | {{: | ||
| + | |||
| + | |||
| + | після чого міряється її загальний рівень яскравості | ||
| + | |||
| + | {{: | ||
| + | |||
| + | на основі чого робиться висновок | ||
| + | |||
| + | {{: | ||
| + | |||
| + | по швидкості, | ||
| + | |||
| + | {{: | ||
| + | |||
| + | Так, звичайно, | ||
| + | |||
| + | <code php> | ||
| + | $controlRegion=array( | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ); | ||
| + | </ | ||
| + | |||
| + | ось якось так: | ||
| + | |||
| + | {{: | ||
| + | |||
| + | і відповідно визначати, | ||
| + | |||
| + | {{: | ||
| + | |||
| + | Звичайно, | ||