2012-04-04 30 views
5

Me gustaría leer archivos .yml en Matlab. Estos archivos contienen las coordenadas xey de los puntos clave en una imagen de la cara. Busqué diferentes herramientas, pero parece que no encuentro ninguna respuesta.leer archivos .yml en matlab

Mis archivos .yml ven así

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 

......

y así sucesivamente

Nota 00032009.jpg es una imagen de una cara x e y son coordenadas de un punto en una cara Ejemplo: la esquina derecha de un ojo, etc.

¿Podría indicar una forma de leer el archivo y luego mostrar los puntos en la imagen de la cara?

Edición 1: Aquí está el error que consigo

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); 

Lo que es raro es la línea 14 en ReadYamlRaw.m

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

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

Entonces, ¿cuál es el uso de ~ allí y por qué ¿Hay un error?

Edit2: He sustituido el ~ en la línea anterior con variables ficticias cuando me siento esta errores 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); 

También probé con un archivo yml diferente que tiene este aspecto

%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 

Y obtengo los siguientes errores

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); 

¿Tal vez alguien pueda hacer algo con esto o podría señalar otra serie de funciones que funcionarían? Busqué pero no encontré ninguno excepto este.

+1

que se parece mucho a mí yaml –

+1

¿Ha intentado [yamlmatlab] (http://code.google.com/p/yamlmatlab/)? – yuk

+0

@ David Brown File es yml. Podría estar confundido ya que no conozco la diferencia entre .yml y .yaml. He descargado y agregado yamlmatlab, pero no sé cómo usarlo en mi caso yaml_file = 'test.yaml'; >> YamlStruct = ReadYaml (yaml_file); ¿Debería funcionar si reemplazo a yaml con yml? – Michiru

Respuesta

8

De hecho, es un archivo YAML (como @DavidBrown mencionó en su comentario, la extensión no importa). Pero tiene algunos problemas. No sé si se debe a un formato YAML incorrecto o a la implementación de MATLAB.

He instalado YAMLMATLAB y jugué un poco con su archivo.

YamlStruct = ReadYaml(yaml_file); 

YAMLMATLAB devuelve un error si los archivos se alimentan como están. Funciona solo si comento la primera línea y elimino espacios de los nombres de campo. Así que el comienzo del archivo se ve así:

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

Luego obtengo la estructura correcta. Por ejemplo, puede acceder primero de x el punto de coordenadas como

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

ans = 

    682.5947 

ACTUALIZACIÓN

espacio de nombres presentados en realidad es un problema conocido en YAMLMATLAB. Consulte el informe y la posible solución here.

ACTUALIZACIÓN 2

Según comentan desde @Jirka_cigler (YAMLMATLAB grupo de desarrolladores):

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

Gran!

También eliminé comentarios anteriores de desarrolladores sobre el problema en la primera ACTUALIZACIÓN ya que no es cierto.

+0

Gracias por su respuesta. Aparece este error Error: Archivo: ReadYamlRaw.m Línea: 14 Columna: 11 La expresión o declaración es incorrecta, posiblemente desbalanceada (, {, o [.Error en ==> ReadYaml en 38 ry = ReadYamlRaw (nombre de archivo, 0, nosuchfileaction); puse 0032009.yml en la variable yaml_file, eliminé los espacios y comencé la primera línea como dijiste y luego la leí, pero ocurre este error. La carpeta y las subcarpetas se agregan a la ruta de MATLAB. Entonces, ¿me falta algo? ! – Michiru

+0

Podría agregar que trabajo con la versión r2007b porque eso es lo que mi profesor me dijo que instalara no porque yo quisiera. Quizás eso sea lo que ocasiona el error – Michiru

+0

El error es extraño. Probablemente el yamlmatlab estaba dañado de alguna manera. vuelva a descargar e instale la última versión. ¿Puede cargar su archivo yml en algún lugar? ¿Algún sitio público para compartir puede ser? Lo echaré un vistazo. – yuk

0

ZozaniDB Database Toolbox viene con una implementación YAML nativa de Matlab que maneja el archivo .yml aquí. Para analizar una cadena o un archivo, utilice:

>> yaml_parse (str) 
>> yaml_read (filename) 
Cuestiones relacionadas