Warning: session_start(): open(/var/lib/php/sessions/sess_sv59o2540d8psgtk109s19cv83, 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
cmodule DiscordFan > DynPrintLogAndEnabled {
transient Map protos = syncCIMap();
ISegmenter segmenter;
transient new ScreenShooter shooter;
transient ReliableSingleThread rstSegment = dm_rst(module(), r segment);
transient ReliableSingleThread rstAOA = dm_rst(module(), r aoa);
transient ImageInfo info;
transient ImageInfo latestWithAOA;
transient ImageSurface isThings;
transient double minScore = 95;
sclass Segment {
Rect r;
BWImage bw;
*() {}
*(Rect *r) {}
}
sclass ImageInfo {
BufferedImage image;
L segments;
new AOA_CompareImagesToProtos aoa;
Map foundProtos;
}
visual jvsplit(
jCenteredSection("Things found on screen", jscroll_center(isThings = jImageSurface())),
super);
start-thread {
dm_watchFieldAndNow enabled(r { set(shooter, +enabled) });
if (empty(protos))
putAll(protos, mapValues loadBWImage(imageSnippetIDsForNames(llQuoted("Open", "Open discord"))));
print("Have " + n2(protos, "proto"));
if (segmenter == null)
setField(segmenter := segmenterFromAGIBlue("Find things on discordapp.com #1"));
print("Have segmenter: " + segmenter);
shooter.onNewImage.add(rstSegment);
shooter.start(enter := f enter);
doEvery(1.0, r shootScreen2);
}
void segment {
BufferedImage img = shooter.latestImage;
if (!enabled || img == null || segmenter == null) ret; // man weiß ja nie...
// Have picture!!
long time = sysNow();
new ImageInfo info;
info.image = img;
info.segments = map(segmenter.get(img), r -> new Segment(r));
this.info = info;
done2_always(time, "Make " + nSegments(info.segments));
rstAOA.trigger();
}
void aoa {
ImageInfo info = this.info;
if (info == null) ret; // man weiß ja nie...
long time = sysNow();
AOA_CompareImagesToProtos aoa = info.aoa;
aoa.addProtos(protos);
for (Segment s : info.segments)
s.bw = toBWImage(bufferedImageClip(info.image, s.r));
aoa.addImages(iotaKeys_str(collect bw(info.segments)));
stepAll(aoa);
Map> bestImageForProto = aoa.bestImageForProto;
Map> foundProtos = filterMapByValuePredicate(bestImageForProto, v -> score(v) >= minScore/100);
info.foundProtos = mapToValues(keys(foundProtos), p -> _get(info.segments, parseInt(p)-1));
print(info.foundProtos);
if (isThings != null) isThings.setImage(
mergeBWImagesHorizontally(map bwInverted(collect bw(values(foundProtos)))));
print(mapValues doubleScoreAsIntPercent(bestImageForProto));
latestWithAOA = info;
done2_always("AOA", time);
}
void cleanMeUp {
dispose shooter;
}
}