!7 replace Submission with BackgroundPlus. module BoxFinder > DynImageSurface { int nBoxes = 1; transient new Best best; transient Thread recognizerThread; start { onNewImage = voidfunc(BufferedImage image) { startRecognition(image) }; } void startRecognition(BufferedImage image) { cancelThread(recognizerThread); recognizerThread = startThread(r { new AIStrategy_RandomWithVariation strategy; strategy.best = best; strategy.submit = f1_scorePreciseRecognizer(trainingList); strategy.random = func -> Recognizer { nu(VAD_1, streakLength := random(1, clipLength/2), threshold := randomFloat(), band := audio_randomBand()) }; strategy.vary = func(Recognizer r) -> Recognizer { if (r cast VAD_1) ret nu(VAD_1, streakLength := varyInt(r.streakLength), threshold := varyFloat(r.threshold), band := audio_varyBand(r.band)); null; }; runStrategyWhileImprovement(best, strategy); }); } visualize { ret jvsplit(super.visualize(), dm_printLogComponent()); } }