Mic*_*iru 6 file-io matlab yaml
我想在Matlab中阅读.yml文件.这些文件包含面部图像上关键点的坐标x和y.我寻找不同的工具,但我似乎没有找到任何答案.
我的.yml文件看起来像这样
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
Run Code Online (Sandbox Code Playgroud)
......
等等
注意00032009.jpg是面部x的图像,y是面部上的点的坐标例如:眼睛的右角等
你能指出一种方法来阅读文件,然后在脸部图像上显示点吗?
编辑1:这是我得到的错误
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);
Run Code Online (Sandbox Code Playgroud)
令人不解的是ReadYamlRaw.m中的第14行
[pth,~,~]= fileparts(mfilename('fullpath'));
Parse error at ','(second one) and ']' usage appears to be invalid matlab syntax.
Run Code Online (Sandbox Code Playgroud)
那么在那里有什么用途?为什么会有错误?
Edit2:我用虚拟变量替换了上面的〜然后我得到了这个错误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);
Run Code Online (Sandbox Code Playgroud)
我也试过了一个看起来像这样的不同的yml文件
%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
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
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);
Run Code Online (Sandbox Code Playgroud)
也许某人可以用这些东西制作出一些东西,或者你可以指出另一套可行的功能?我搜索了但除了这个之外没有发现任何东西.
yuk*_*yuk 10
它确实是YAML文件(正如@DavidBrown在他的评论中提到的,扩展无关紧要).但它有一些问题.不知道是由于错误的YAML格式还是MATLAB实现.
我安装了YAMLMATLAB并对你的文件稍微玩了一下.
YamlStruct = ReadYaml(yaml_file);
Run Code Online (Sandbox Code Playgroud)
如果文件按原样输入,YAMLMATLAB将返回错误.仅当我对第一行进行注释并从字段名称中删除空格时,它才有效.所以文件的开头看起来像这样:
#YAML:1.0
Imagefile: 00032009.jpg
Contourscount: 8
...skipped the rest...
Run Code Online (Sandbox Code Playgroud)
然后我得到了正确的结构.例如,您可以访问第一个点的x坐标
YamlStruct.Contours{1}.Points{1}.x
ans =
682.5947
Run Code Online (Sandbox Code Playgroud)
UPDATE
字段名称中的空格实际上是YAMLMATLAB中的已知问题.在此处查看报告和可能的解决方案.
更新2
根据@Jirka_cigler(YAMLMATLAB开发人员组织)的评论:
在程序版本0.4.3中,我们在字段名称中添加了对空格的支持,因此问题不应再次出现.
大!
我还删除了之前的开发人员在第一次UPDATE中对问题的评论,因为它不再是真的.