6

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

……

等々

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

奇妙なのは、ReadYamlRaw.m の 14 行目です。

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

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

では、~ は何に​​使用され、なぜエラーが発生するのでしょうか?

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

このような別の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

そして、次のエラーが表示されます

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

たぶん、誰かがこれらから何かを作ることができますか、それとも機能する別の機能セットを指摘できますか? 探しましたが、これ以外は見つかりませんでした。

4

2 に答える 2

10

それは確かにYAMLファイルです(@DavidBrownがコメントで述べたように、拡張子は関係ありません)。しかし、それにはいくつかの問題があります。間違った YAML 形式または MATLAB 実装が原因かどうかはわかりません。

YAMLMATLABをインストールして、ファイルを少しいじりました。

YamlStruct = ReadYaml(yaml_file);

ファイルをそのままフィードすると、YAMLMATLAB はエラーを返します。最初の行をコメントし、フィールド名からスペースを削除した場合にのみ機能します。したがって、ファイルの先頭は次のようになります。

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

次に、正しい構造を取得します。たとえば、次のように最初のポイントのx座標にアクセスできます。

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

ans =

  682.5947

アップデート

ファイル名のスペースは、実際には YAMLMATLAB の既知の問題です。こちらのレポートと考えられる解決策を参照してください

更新 2

@Jirka_cigler (YAMLMATLAB 開発者グループ) からのコメントによると:

プログラム リリース 0.4.3 では、フィールド名に空白のサポートを追加したため、この問題は再発しません。

すごい!

また、最初の更新で問題に関する以前の開発者のコ​​メントを削除しました。これはもはや真実ではないためです。

于 2012-04-05T13:50:55.320 に答える
0

ZozaniDB データベース ツールボックスには、ここで .yml ファイルを処理する Matlab ネイティブの YAML 実装が付属しています。文字列またはファイルを解析するには、次を使用します。

>> yaml_parse ( str )
>> yaml_read ( filename )
于 2015-03-14T07:34:19.807 に答える