!7

cmodule TrainChessRecognizer > DynSingleFunctionWithPrintLog {
  transient new ChessOCR_SquareImagesCollector squareImagesCollector;

  start-thread {
    //temp dm_tempDisableAllButtons();
    squareImagesCollector.loadImagesFromAGIBlue();
  }
  
  void doIt {
    LPair<S, BufferedImage> images = squareImagesCollector.allImages();
    new ChessPieceRecognizer pieceRecognizer;
    pieceRecognizer.load();
    new Best<Double> best;
    for (double exp = -6; exp <= -2; exp += 0.02) {
      double factor = pow(10, exp);
      print("Factor: " + factor);
      best.put(factor, scoreForFactor(images, pieceRecognizer, factor));
    }
    print(best);
  }
  
  double scoreForFactor(LPair<S, BufferedImage> images, ChessPieceRecognizer pieceRecognizer, double factor) {
    try {
      pieceRecognizer.magicCombineFactor = factor;
      
      new Scorer scorer;
      for (unpair S piece, BufferedImage img : images) {
        scorer.add(eqic(pairA(pieceRecognizer.recognize(img)), piece));
      }
  
      print(scorer);
      ret scorer.score();
    } catch print e {
      print("RECOGNIZER TOTAL FAIL");
      ret 0;
    }
  }
}