Ich versuche Opencv's .yml-Datei in ArrayLists Mittelwert, Projektion und Etiketten zu laden. Ich habe diese drei Arraylisten erstellt und versuche die Elemente aus der .yml-Datei zu analysieren. Ich habe snakeYAML documentation gefunden. Allerdings habe ich keinen richtigen Weg gefunden. Ich versucheLoad .yml-Datei in Hashmaps mit Snakeyaml (Import Junit-Bibliothek)
final String fileName = "train.yml";
opencvmatrix mat = new opencvmatrix();
Yaml yaml = new Yaml();
try {
InputStream ios = new FileInputStream(new File(fileName));
// Parse the YAML file and return the output as a series of Maps and Lists
Map<String,Object> result = (Map<String,Object>)yaml.load(ios);
System.out.println(result.toString());
Collection<Object> file = result.values();
} catch (Exception e) {
e.printStackTrace();
}
}
ich als Fehler erhalte verwenden die folgenden:
Exception in thread "main" while scanning a directive
in 'reader', line 1, column 1:
%YAML:1.0
^
expected alphabetic or numeric character, but found :(58)
in 'reader', line 1, column 6:
%YAML:1.0
^
at org.yaml.snakeyaml.scanner.ScannerImpl.scanDirectiveName(ScannerImpl.java:1269)
at org.yaml.snakeyaml.scanner.ScannerImpl.scanDirective(ScannerImpl.java:1221)
at org.yaml.snakeyaml.scanner.ScannerImpl.fetchDirective(ScannerImpl.java:614)
at org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:306)
at org.yaml.snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:226)
at org.yaml.snakeyaml.parser.ParserImpl$ParseImplicitDocumentStart.produce(ParserImpl.java:195)
at org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:158)
at org.yaml.snakeyaml.parser.ParserImpl.checkEvent(ParserImpl.java:143)
at org.yaml.snakeyaml.composer.Composer.getSingleNode(Composer.java:104)
at org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseConstructor.java:120)
at org.yaml.snakeyaml.Yaml.loadFromReader(Yaml.java:481)
at org.yaml.snakeyaml.Yaml.load(Yaml.java:412)
at projectCV.main(projectCV.java:33)
Java Result: 1
EDIT1: Ich habe bemerkt, dass meine Probleme für assertEquals steht, die eine Funktion der ist Klasse aktiviert einen Teil der Junit-Bibliothek. Ich kann keinen Weg finden, die Bibliothek korrekt in meinen Klassenpfad zu importieren. Ich versuche zwei Dinge, download .jar Datei und ADD/Jar-Ordner und aus Projekteigenschaften-> Bibliotheken-> Tests kompilieren-> Bibliothek hinzufügen -> Junit 4.10. Aber ich habe immer noch Probleme.
EDIT2: Ich ändere die YAML 1.0 zu YAML 1.1, aber nichts ändert sich. Ich versuche immer noch, einen geeigneten Weg zu finden, die Yml-Datei zu lesen.
final String fileName = "train.yml";
opencvmatrix mat = new opencvmatrix();
Yaml yaml = new Yaml();
try {
InputStream ios = new FileInputStream(new File(fileName));
// Parse the YAML file and return the output as a series of Maps and Lists
Map<String,Object> result = (Map<String,Object>)yaml.load(ios);
System.out.println(result.toString());
Collection<Object> file = result.values();
} catch (Exception e) {
e.printStackTrace();
}
}
, als ich diesen Code auszuführen versuche ich erhalte:
Exception in thread "main" Can't construct a java object for tag:yaml.org,2002:opencv-
matrix; exception=Class not found: opencv-matrix
in 'reader', line 3, column 7:
mean: !!opencv-matrix
^
EDIT3: Ich habe eine Klasse opencvmatrix erstellt (wie der Name .yml Eigenschaften), mit die Eigenschaften rows, cols, dt, ArrayList-Daten. Die .yml Datei ist wie:
num_components: 19
num_components: 19
mean: !!opencvmatrix
rows: 1
cols: 3600
dt: d
data: [ 9.6842105263157890e+01, 1.0257894736842104e+02,
1.0557894736842104e+02, 1.0794736842105263e+02,
1.1752631578947367e+02, 1.1631578947368421e+02,
1.1084210526315789e+02, 1.0373684210526315e+02,
1.0052631578947368e+02, 9.5263157894736835e+01,
9.0421052631578945e+01, 8.5631578947368411e+01,
7.8684210526315780e+01, 7.2105263157894740e+01,
6.9315789473684205e+01, 6.9105263157894740e+01,
7.1052631578947370e+01, 7.9631578947368411e+01,
9.0894736842105260e+01, 1.0121052631578947e+02,
....]
projections:
- !!opencvmatrix
rows: 1
cols: 19
dt: d
data: [ 1.6852352677811423e+03, -1.0112905042030820e+03,
-1.3152188243875064e+03, 4.8298990155435700e+02,
9.1980535900698968e+01, 6.5624763621018792e+02,
-1.2380244625181117e+03, -1.8800931631152707e+02,
-4.1473232893431384e+02, 5.7197035514178856e+02,
4.9990276749703435e+02, 4.9062987890888604e+02,
6.1928710580829818e+02, -1.2842392693864540e+03,
2.4907719466932619e+01, 8.0299588479341844e+02,
1.1621501008120421e+02, 1.0410492864645674e+02,
8.5302163830384785e+01 ]
- !!opencvmatrix
rows: 1
cols: 19
dt: d
data: [ -1.0313663745467784e+03, 1.9900404646205566e+03,
-1.2844533156050284e+02, -4.3700867528097513e+02,
6.6145551346834259e+02, -2.0562483671734990e+03,
-1.9643774942432364e+02, 4.9329679854416281e+02,
-2.0003326324501427e+02, 1.0737995038485865e+03,
5.4161214984553695e+01, 4.7932826490658994e+02,
8.6307152262273064e+02, 6.7413046532276610e+02,
6.3835284527337114e+02, 4.1663169960066972e+02,
3.5883912817427905e+01, -1.2935687563770381e+02,
-1.6471877227400194e+03 ]
...
labels: !!opencvmatrix
rows: 1
cols: 19
dt: i
data: [ 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3 ]
Nun, ohne den Haupt-Code zu ändern ich folgende Fehlermeldung erhalte:
Can't construct a java object for tag:yaml.org,2002:opencvmatrix; exception=No single
argument constructor found for class opencvmatrix
in 'reader', line 1, column 7:
mean: !!opencvmatrix
^
Nichts ist gleich.Ich habe die erste Zeile in% YAML: 1.1 geändert, allerdings wurde nichts geändert. –
"% YAML 1.1" nicht "% YAML: 1.1". Basierend auf deiner 2. Bearbeitung sind sie falsch. Ausnahme hat sich geändert. Es begann schließlich, den Inhalt Ihrer yaml-Datei zu analysieren. Jetzt haben Sie einen anderen Fehler. Wie es sagt "Klasse nicht gefunden: opencv-matrix" SnakeYaml versucht, ein Objekt des Typs opencv-matrix zu erzeugen, ausgelöst durch !! opencv-matrix Tag. – maslovalex
Also habe ich jedes Element der .yml-Datei in separate Objekte analysieren? –