2012-04-04 8 views
5

Mi piacerebbe leggere i file .yml in Matlab. Questi file contengono le coordinate xey dei punti chiave su un'immagine del volto. Ho cercato strumenti diversi ma non trovo risposte.leggere i file .yml in MATLAB

miei file .yml simile a questa

YAML:1.0 
Image file: "00032009.jpg" 
Contours count: 8 
Contours: 
    - 
     Name: FO 
     Count: 41 
     Closed: 0 
     Points: 
     - 
      x: 682.5947265625000000 
      y: 743.1998901367187500 
     - 
      x: 685.9638061523437500 
      y: 771.3800659179687500 

......

e così via

Nota 00032009.jpg è l'immagine di un volto X e Y sono coordinate di un punto su una faccia Ad esempio: l'angolo destro di un occhio ecc.

Potrebbe indicare un modo per leggere il file e quindi visualizzare i punti sull'immagine del viso?

Edit 1: Qui è l'errore che ottengo

Error: File: ReadYamlRaw.m Line: 14 Column: 11 
Expression or statement is incorrect--possibly unbalanced (, {, or [. 
Error in ==> ReadYaml at 38 
    ry = ReadYamlRaw(filename, 0, nosuchfileaction); 

Ciò che è strano è la linea 14 in ReadYamlRaw.m

[pth,~,~]= fileparts(mfilename('fullpath')); 

Parse error at ','(second one) and ']' usage appears to be invalid matlab syntax. 

Allora, qual è l'uso di ~ in là e perché c'è un errore?

Edit2: ho sostituito il ~ nella riga sopra con variabili dummy allora ottengo questo errore O_O

Error using ==> ReadYamlRaw>scan at 81 
Unknown data type: logical 

Error in ==> ReadYamlRaw>scan_map at 138 
      result.(ich) = scan(r.get(java.lang.String(ich))); 

Error in ==> ReadYamlRaw>scan at 79 
     result = scan_map(r); 

Error in ==> ReadYamlRaw>scan_list at 116 
     result{ii} = scan(i); 

Error in ==> ReadYamlRaw>scan at 77 
     result = scan_list(r); 

Error in ==> ReadYamlRaw>scan_map at 138 
      result.(ich) = scan(r.get(java.lang.String(ich))); 

Error in ==> ReadYamlRaw>scan at 79 
     result = scan_map(r); 

Error in ==> ReadYamlRaw>load_yaml at 48 
     result = scan(yaml.load(fileread([filename, fileext]))); 

Error in ==> ReadYamlRaw at 19 
    result = load_yaml(filename, nosuchfileaction); 

Error in ==> ReadYaml at 38 
    ry = ReadYamlRaw(filename, 0, nosuchfileaction); 

Ho provato anche con un file yml diverso che assomiglia a questo

%YAML:1.0 
RE-C: 
    x: 919 
    y: 580 
LE-C: 
    x: 1209 
    y: 597 
N-C: 
    x: 1063 
    y: 698 
FO-B: 
    x: 1045 
    y: 1114 
REL-O: 
    x: 852 
    y: 597 
REL-I: 
    x: 986 
    y: 600 
REL-T: 
    x: 918 
    y: 564 

E ottengo i seguenti errori

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>load_yaml at 48 
     result = scan(yaml.load(fileread([filename, fileext]))); 

Error in ==> ReadYamlRaw at 19 
    result = load_yaml(filename, nosuchfileaction); 

Error in ==> ReadYaml at 38 
    ry = ReadYamlRaw(filename, 0, nosuchfileaction); 

Forse qualcuno può ricavarne qualcosa o potresti indicare un'altra serie di funzioni che funzionerebbero? Ho cercato ma non ho trovato nessuno tranne questo.

+1

che assomiglia molto a YAML per me –

+1

Hai provato [yamlmatlab] (http://code.google.com/p/yamlmatlab/)? – yuk

+0

@ David Brown File è yml. Potrei essere confuso poiché non conosco la differenza tra .yml e .yaml. Ho scaricato e aggiunto yamlmatlab ma non so come usarlo nel mio caso yaml_file = 'test.yaml'; >> YamlStruct = ReadYaml (yaml_file); dovrebbe funzionare se sostituisco yaml con yml? – Michiru

risposta

8

È un file YAML (come @DavidBrown menzionato nel suo commento, l'estensione non ha importanza). Ma ha alcuni problemi. Non so se è dovuto al formato YAML sbagliato o all'implementazione di MATLAB.

Ho installato YAMLMATLAB e ho giocato un po 'con il tuo file.

YamlStruct = ReadYaml(yaml_file); 

YAMLMATLAB restituisce errore se i file si nutrono come è. Funziona solo se commento la prima riga e rimuovo gli spazi dai nomi dei campi. Così l'inizio del file è simile al seguente:

#YAML:1.0 
Imagefile: 00032009.jpg 
Contourscount: 8 
...skipped the rest... 

allora ottengo la struttura corretta. Per esempio è possibile accedere al 1 ° del x punto di coordinate come

YamlStruct.Contours{1}.Points{1}.x 

ans = 

    682.5947 

UPDATE

spazio nei nomi depositati è in realtà un problema noto in YAMLMATLAB. Vedere il report e la possibile soluzione here.

UPDATE 2

Secondo commento da @Jirka_cigler (YAMLMATLAB gruppo sviluppatori):

In the program release 0.4.3 we added support for whitespaces in field names, so the problem should not appear again.

Grande!

Ho anche rimosso precedenti commenti degli sviluppatori sul problema nel primo UPDATE poiché non è più vero.

+0

Grazie per la risposta. Ottengo questo errore Errore: File: ReadYamlRaw.m Riga: 14 Colonna: 11 Espressione o istruzione non corretta - probabilmente non bilanciata (, {oppure [.Errore in ==> ReadYaml a 38 ry = ReadYamlRaw (nomefile, 0, nosuchfileaction), ho inserito 0032009.yml nella variabile yaml_file, ho rimosso gli spazi e ho commentato la prima riga come hai detto, quindi l'ho letto, ma questo errore si verifica La cartella e le sottocartelle vengono aggiunte al percorso MATLAB Quindi mi manca qualcosa? ! – Michiru

+0

Potrei aggiungere che lavoro con la release r2007b perché è quello che la mia insegnante mi ha detto di installare non perché volevo. Forse è quello che causa l'errore – Michiru

+0

L'errore è strano Probabilmente lo yamlmatlab è stato corrotto in qualche modo. Scarica nuovamente e installa la versione più recente. Puoi caricare il tuo file yml da qualche parte? Qualche sito di condivisione pubblica potrebbe essere? Vado a dare un'occhiata. – yuk

0

ZozaniDB Database Toolbox viene fornito con un'implementazione YAML nativa di Matlab che gestisce il file .yml qui. Per analizzare una stringa o un file, uso:

>> yaml_parse (str) 
>> yaml_read (filename)