Example #1
0
  /*
   * Method to write to file
   */
  public void write(File baseFile) {
    // Cross platform new line character
    String newLine = System.getProperty("line.separator");

    String fileName = baseFile.getName();
    if (fileName.endsWith("." + Utils.MODEL_EXT)) fileName = Utils.removeExtension(fileName);

    File file = new File(baseFile.getParent(), fileName + "_" + label + "." + Utils.MODEL_EXT);
    try {
      // FileWriter baseFileWriter = new FileWriter(baseFile);
      // baseFileWriter.write(file.getPath() + newLine + "EOF");
      // baseFileWriter.flush();

      BufferedWriter writer = new BufferedWriter(new FileWriter(file));
      // Write comment section
      writer.write("# Image Set: " + imageSet + newLine);
      if (this.testingSet != null) {
        writer.write("# Testing Set: " + testingSet + newLine);
      }
      writer.write("# Image Size: " + imageSize + newLine);
      writer.write("# Mode: " + mode + newLine);
      writer.write("# Channel: " + channel + newLine);
      writer.write("# Result: " + result * 100 + "%" + newLine);
      writer.write("# Label: " + label + newLine);

      if (classNames != null && classNames.size() > 0) {
        writer.write("# Classes: ");
        for (String key : classNames.keySet()) {
          writer.write(key + ":" + classNames.get(key) + "   ");
        }
        writer.newLine();
      }

      writer.newLine();

      setProgress(5);

      // Write feature extractor
      for (Extractor ex : extractors) {
        writer.write("[FEATURE_EXTRACTOR]" + newLine);
        writer.write("Name=" + ex.getName() + newLine);
        writer.write("ClassName=" + ex.getClassName() + newLine);
        writer.write("Path=" + ex.getExternalPath() + newLine);
        writer.write("[PARAMETER_START]" + newLine);
        for (String parameter : ex.getParams().keySet()) {
          writer.write(parameter + "=" + ex.getParams().get(parameter) + newLine);
        }
        writer.write("[PARAMETER_END]" + newLine);
      }

      setProgress(15);

      // Write feature selector
      for (Selector sel : selectors) {
        writer.write("[FEATURE_SELECTOR]" + newLine);
        writer.write("Name=" + sel.getName() + newLine);
        int[] selectedIndices = sel.getSelectedIndices();
        if (selectedIndices != null) {
          writer.write("[SELECTED_INDICES_START]" + newLine);
          for (int i = 0; i < selectedIndices.length; i++) {
            writer.write(selectedIndices[i] + newLine);
          }
          writer.write("[SELECTED_INDICES_END]" + newLine);
        }
      }

      setProgress(30);

      // Write classifier
      for (ClassifierInfo classifierInfo : classifiersInfo) {
        writer.write("[CLASSIFIER]" + newLine);
        writer.write("Name=" + classifierInfo.getName() + newLine);
        writer.write("ClassName=" + classifierInfo.getClassName() + newLine);
        writer.write(
            "Path="
                + classifierInfo.getExternalPath()
                + newLine); // External classifier (i.e. plugin) or null

        // Write classifier parameters
        writer.write("[PARAMETER_START]" + newLine);
        for (String parameter : classifierInfo.getParams().keySet()) {
          writer.write(parameter + "=" + classifierInfo.getParams().get(parameter) + newLine);
        }
        writer.write("[PARAMETER_END]" + newLine);
      }

      String modelfileName = getUniqueFileName(file.getParent(), fileName + "_" + label + "_model");
      String modelPath = file.getParent() + File.separatorChar + modelfileName;
      ((SavableClassifier) classifier)
          .saveModel(((SavableClassifier) classifier).getModel(), modelPath);
      writer.write("Path=" + modelfileName + newLine);
      /*
      //Write Ensemble
      writer.write("[Ensemble]" + newLine);
      writer.write("Name=" + ensembleName + newLine);
      writer.write("EnsName=" + ensembleClass + newLine);
      writer.write("Path=" + ensemblePath + newLine); //External Ensemble (i.e. plugin) or null
      //Write classifier parameters
      writer.write("[PARAMETER_START]" + newLine);
      for (String parameter : ensParams.keySet()) {
      	writer.write(parameter + "=" + ensParams.get(parameter) + newLine);
      }
      writer.write("[PARAMETER_END]" + newLine);
      */
      /* Removed 1/16/2014
      //Write classifier
      writer.write("[CLASSIFIER]" + newLine);
      writer.write("Name=" + classifierName + newLine);
      writer.write("ClassName=" + classifierClass + newLine);
      writer.write("Path=" + classifierPath + newLine); //External classifier (i.e. plugin) or null
      //Write classifier parameters
      writer.write("[PARAMETER_START]" + newLine);
      for (String parameter : classParams.keySet()) {
      	writer.write(parameter + "=" +classParams.get(parameter) + newLine);
      }
      writer.write("[PARAMETER_END]" + newLine);

      //Save trained model of the classifier
      if(classifier != null) {
      	if(classifier instanceof SavableClassifier) {
      		String modelfileName = getUniqueFileName(file.getParent(), fileName + "_" + label + "_model");
      		String modelPath = file.getParent() + File.separatorChar + modelfileName;
      		((SavableClassifier)classifier).saveModel(((SavableClassifier)classifier).getModel(), modelPath);
      		writer.write("Path=" + modelfileName + newLine);
      	}
      }
      */

      setProgress(80);

      writer.flush();
      writer.close();

      setProgress(100);
    } catch (IOException ex) {
      System.out.println("Exception occured while writing file: " + file.getName());
      System.out.println("Exception: " + ex.getMessage());
      ex.printStackTrace();
    }
  }