Warning: session_start(): open(/var/lib/php/sessions/sess_on7hjqqtlb7nfj18j46bd8rq4u, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
!7
set flag BWIntegralImage_brightnessCheat.
cmodule2 IILineFinder > DynImageSurfaceAndEnabled {
switchable int imageSize = 1000;
switchable int warmups = 10; // per round
switchable int initialWarmups = 100000;
ExpectedAndActual> lastError;
transient Pair actual, recognized;
transient BWIntegralImage ii;
transient ImageSurface isReconstructed;
transient S status, errorStatus;
transient new Scorer scorer;
transient new Average conversionTime, recTime;
transient NotTooOften clearRecTime = nto_everyTenSeconds();
transient long rounds;
visualize {
JComponent c = centerAndSouthWithMargin(
jhgrid(jCenteredSection_fontSizePlus(10, "Input", super.visualize()),
jCenteredSection_fontSizePlus(10, "Recognition", jscroll_centered(isReconstructed = doubleBufferedImageSurface()))),
jvstack(fontSizePlus(10, dm_centeredLabel status()), fontSizePlus(5, dm_centeredLabel errorStatus())));
enableDoubleBuffering();
ret c;
}
start {
thread "Calc" enter {
while (true) {
if (deleted()) ret;
if (!enabled) continue with sleepSeconds(1);
pcall {
if (clearRecTime!) {
recTime.clear();
conversionTime.clear();
}
makeImage();
recognize();
score();
reconstruct();
status();
}
}
}
}
void makeImage {
Pt a = randomPt(imageSize), b = randomPt(imageSize);
LineWithColor line = new(a, b, Color.black, 1);
BufferedImage img = renderBackgroundPlusLines(imageSize, imageSize, new BackgroundPlus(Color.white, line));
setImage(img);
long time = nanoTime();
ii = new BWIntegralImage(img);
conversionTime.add(nanoTime()-time);
actual = sortedPair(a, b);
}
void recognize {
int w = rounds == 0 ? initialWarmups : warmups;
++rounds;
repeat w { bwii_detectSingleLine(ii); }
long time = nanoTime();
Pair output = bwii_detectSingleLine(ii);
recTime.add(nanoTime()-time);
recognized = sortedPair(output);
}
void score {
bool ok = eq(actual, recognized);
scorer.add(ok);
if (!ok) setField(lastError := ExpectedAndActual(actual, recognized));
}
void reconstruct {
BufferedImage img = renderBackgroundPlusLines(imageSize, imageSize, new BackgroundPlus(Color.white, LineWithColor(actual.a, actual.b, Color.black, 1)));
isReconstructed.setImage(img);
}
void status {
setFields(
status := joinNemptiesWithComma(
"Image size: " + toMillion(sqr(imageSize), 1) + " MP, conversion time: " + n2_iround(conversionTime!) + " ns",
"recognition time: " + n2_iround(recTime!) + " ns",
scorer),
errorStatus := lastError == null ?: "last error: " + lastError);
}
}