2015-07-20 2 views
0

Для моего проекта я хочу прочитать yml-файл в matlab, используя YAMLMatlab. Мои .yml-файлы выглядят так. Я показываю часть файла .yml. Мой файл составляет около 29 МБ.читать .yml файлы в matlab issue

%YAML:1.0 
Block size: [ 16, 16 ] 
Block stride: [ 8, 8 ] 
Cell size: [ 8, 8 ] 
block hist size: 36 
block per img: [ 63, 63 ] 
Total elements in array: 142884 
nbins: 9 
Scale: 1. 
Level: 0 
Width: 512 
Height: 512 
features: 
    - 1.5302167832851410e-01 
    - 1.0552208870649338e-01 
    - 1.6659785807132721e-01 
    - 2.3539969325065613e-01 
    - 2.0810306072235107e-01 
    - 1.2627227604389191e-01 
    - 8.0759152770042419e-02 
    - 6.4930714666843414e-02 
    - 6.1364557594060898e-02 
    - 2.1614919602870941e-01 
    - 1.4714729785919189e-01 

При чтении файла .yml у меня возникла следующая ошибка.

Error using ReadYamlRaw>load_yaml (line 78) 
Java exception occurred: 
java.lang.OutOfMemoryError: Java heap space 
    at java.util.Arrays.copyOf(Unknown Source) 
    at java.lang.AbstractStringBuilder.expandCapacity(Unknown Source) 
    at java.lang.AbstractStringBuilder.ensureCapacityInternal(Unknown Source) 
    at java.lang.AbstractStringBuilder.append(Unknown Source) 
    at java.lang.StringBuilder.append(Unknown Source) 
    at org.yaml.snakeyaml.reader.StreamReader.<init>(StreamReader.java:51) 
    at org.yaml.snakeyaml.Yaml.load(Yaml.java:399) 

Error in ReadYamlRaw (line 42) 
    result = load_yaml(filename, nosuchfileaction, treatasdata); 


Error in ReadYaml (line 48) 
    ry = ReadYamlRaw(filename, 0, nosuchfileaction, treatasdata); 


Error in untitled (line 2) 
YamlStruct = ReadYaml(yaml_file); 

Я считаю, что эта ошибка возникает из-за большого размера файла, поскольку я могу читать простой файл .yml. Может кто-то помочь мне решить эту ошибку. Я также прочитал это post.

P.S: Here является .yml файлу

EDIT:
Он работает с ниже ответ, но я получил следующее сообщение об ошибке в настоящее время. Как только я удаляю %YAML:1.0. Он работает нормально.

Error using ReadYamlRaw>load_yaml (line 78) 
Java exception occurred: 
while scanning a directive 
in "<string>", line 1, column 1: 
    %YAML:1.0 
    ^
expected alphabetic or numeric character, but found :(58) 
in "<string>", line 1, column 6: 
    %YAML:1.0 
     ^

    at org.yaml.snakeyaml.scanner.ScannerImpl.scanDirectiveName(ScannerImpl.java:1028) 
    at org.yaml.snakeyaml.scanner.ScannerImpl.scanDirective(ScannerImpl.java:990) 
    at org.yaml.snakeyaml.scanner.ScannerImpl.fetchDirective(ScannerImpl.java:534) 
    at org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:251) 
    at org.yaml.snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:179) 
    at org.yaml.snakeyaml.parser.ParserImpl$ParseImplicitDocumentStart.produce(ParserImpl.java:198) 
    at org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:161) 
    at org.yaml.snakeyaml.parser.ParserImpl.checkEvent(ParserImpl.java:146) 
    at org.yaml.snakeyaml.composer.Composer.getSingleNode(Composer.java:105) 
    at org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseConstructor.java:121) 
    at org.yaml.snakeyaml.Yaml.loadFromReader(Yaml.java:480) 
    at org.yaml.snakeyaml.Yaml.load(Yaml.java:399) 

Error in ReadYamlRaw (line 42) 
    result = load_yaml(filename, nosuchfileaction, treatasdata); 


Error in ReadYaml (line 48) 
    ry = ReadYamlRaw(filename, 0, nosuchfileaction, treatasdata); 


Error in untitled (line 2) 
YamlStruct = ReadYaml(yaml_file); 

ответ

3

В MATLAB выберите «Настройки» из меню/панели инструментов. Найдите раздел MATLAB> General> Java Heap Memory и увеличьте размер кучи Java.

После изменения этого параметра вам необходимо перезапустить MATLAB, чтобы он вступил в силу.

+0

Это работает, но у меня была новая ошибка. Я редактировал свой вопрос. @Sam – shah

+1

Я не эксперт YAML, но я считаю, что это означает '% YAML 1.0', а не'% YAML: 1.0'. Вставка двоеточия внутри делает YAML недействительным, и я думаю, что удаление его должно решить проблему (конечно, вырезание всей строки, как вы пробовали, также должно это сделать). –

+0

фактически автоматически генерируется, когда я делаю ymle-файл в OpenCV, и у меня есть около 8000 yml-файлов. Поэтому мне нужно это прочитать. – shah

Смежные вопросы