Instead of using the machine learning module (ML) of OpenCV, I also investigated another popular machine learning library for Java, Weka, from the University of Waikato. The first trial was to load an external CSV file into the proper data structure of the Weka library. The content of the CSV file is as follows. The first column will be the index of the records.
A,1,2,3,4
B,2,3,4,1
C,3,4,1,2
D,4,1,2,3
E,4,3,2,1
The first thing to do was to download the latest Weka distribution, currently 3.8 and placed the weka.jar file into the code folder of the Processing sketch.
The complete codes
import weka.core.converters.CSVLoader;
import weka.core.Instances;
import weka.core.Instance;
import java.util.Enumeration;
import java.io.File;
Instances data;
// Name of the CSV data file
String csv;
void setup() {
size(600, 600);
csv = "Testing.csv";
try {
loadData();
}
catch (Exception e) {
e.printStackTrace();
}
noLoop();
}
void draw() {
background(0);
}
void loadData() throws Exception {
CSVLoader loader = new CSVLoader();
loader.setNoHeaderRowPresent(true);
loader.setSource(new File(dataPath(csv)));
data = loader.getDataSet();
data.setClassIndex(0);
println("Attributes : " + data.numAttributes());
println("Instances : " + data.numInstances());
println("Name : " + data.classAttribute().toString());
// To scan through all the records of the CSV file
Enumeration all = data.enumerateInstances();
while (all.hasMoreElements()) {
Instance rec = (Instance) all.nextElement();
println("Instance : " + rec.classValue() + ": " + rec.toString());
}
} |
import weka.core.converters.CSVLoader;
import weka.core.Instances;
import weka.core.Instance;
import java.util.Enumeration;
import java.io.File;
Instances data;
// Name of the CSV data file
String csv;
void setup() {
size(600, 600);
csv = "Testing.csv";
try {
loadData();
}
catch (Exception e) {
e.printStackTrace();
}
noLoop();
}
void draw() {
background(0);
}
void loadData() throws Exception {
CSVLoader loader = new CSVLoader();
loader.setNoHeaderRowPresent(true);
loader.setSource(new File(dataPath(csv)));
data = loader.getDataSet();
data.setClassIndex(0);
println("Attributes : " + data.numAttributes());
println("Instances : " + data.numInstances());
println("Name : " + data.classAttribute().toString());
// To scan through all the records of the CSV file
Enumeration all = data.enumerateInstances();
while (all.hasMoreElements()) {
Instance rec = (Instance) all.nextElement();
println("Instance : " + rec.classValue() + ": " + rec.toString());
}
}
The console output
Attributes : 5
Instances : 5
Name : @attribute att1 {A,B,C,D,E}
Instance : 0.0: A,1,2,3,4
Instance : 1.0: B,2,3,4,1
Instance : 2.0: C,3,4,1,2
Instance : 3.0: D,4,1,2,3
Instance : 4.0: E,4,3,2,1