Uses 1059K of libraries. Click here for Pure Java version (12314L/66K).
!7 set flag BWIntegralImage_brightnessCheat. set flag BWIntegralImage_useVectorAPI. cmodule2 IILineFinder > DynImageSurfaceAndEnabled { switchable int imageSize = 1000; switchable int warmups = 10; // per round switchable int initialWarmups = 100000; switchable int stripes = 2; // how many threads to use for making integral image ExpectedAndActual<Pair<Pt>> lastError; transient Pair<Pt> actual, recognized; transient IBWIntegralImage 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; transient autoDispose ThreadPoolExecutor executor = defaultThreadPoolExecutor(); 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 = stripedBWIntegralImage(executor, stripes, 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<Pt> 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); } }
Began life as a copy of #1030512
download show line numbers debug dex old transpilations
Travelled to 4 computer(s): bhatertpkbcr, mqqgnosmbjvj, pyentgdyhuwx, vouqrxazstgt
No comments. add comment
Snippet ID: | #1030524 |
Snippet name: | Microsecond Line Finder v1, JDK 16 version with vector API |
Eternal ID of this version: | #1030524/8 |
Text MD5: | 7911cab1cf2f01f0331fbb4e6e2c5708 |
Transpilation MD5: | 64b4a91c2403c40ceebcdebf29f4c412 |
Author: | stefan |
Category: | javax / image recognition |
Type: | JavaX source code (Dynamic Module) |
Public (visible to everyone): | Yes |
Archived (hidden from active list): | No |
Created/modified: | 2021-01-07 03:01:16 |
Source code size: | 3123 bytes / 92 lines |
Pitched / IR pitched: | No / No |
Views / Downloads: | 201 / 546 |
Version history: | 7 change(s) |
Referenced in: | [show references] |