yaml.scanner.ScannerError:扫描指令时

问题描述 投票:0回答:4

我使用PyYAML读取文件,python代码是:

with open('demo.yml') as f:
    dataMap = yaml.load(f)

演示.yml:

%YAML:1.0
my_svm: !!opencv-ml-svm
  svm_type: C_SVC
  kernel: { type:LINEAR }
  C: 1.

那么错误是:

yaml.scanner.ScannerError: while scanning a directive
  in "demo.yml", line 1, column 1
expected alphabetic or numeric character, but found ':'
  in "demo.yml", line 1, column 6

有人帮助我吗?

yaml pyyaml
4个回答
4
投票

指令应为

%YAML 1.0
(不带冒号)。您还需要一个“文档开始”(
---
) 将指令与文档分开。例如:

%YAML 1.0
---
my_svm: !!opencv-ml-svm
  svm_type: C_SVC
  kernel: { type: LINEAR }
  C: 1.

1
投票

可以修改opencv 3.0创建的yaml文件 来自 opencv 的文件 1:

1 %YAML:1.0
2 my_svm: !!opencv-ml-svm
3   svm_type: C_SVC
4   kernel: { type:LINEAR }
5   C: 1.
6 ...

文件2:

1 my_svm: opencv-ml-svm
2   svm_type: C_SVC
3   kernel: { type: LINEAR }
4   C: 1.
5 ...

文件1 -> 文件2:

  1. 删除第1行
  2. 删除“!!opencv-ml-svm”
  3. 第 4 行“type:”后添加空格

然后您可以使用

yaml.load(filename)
加载数据。


0
投票

使用cv2.FileStorage

import cv2    
fs = cv2.FileStorage(file_path, cv2.FILE_STORAGE_READ)
fn = fs.getNode("my_svm")
print(fn) # use fn.mat() it contains matrix

-1
投票

这对我有用:

from cv2 import cv
import numpy as np

filepath = "test.yml"
matrixA = np.array( cv.Load(filepath, cv.CreateMemStorage(), "matrixA") )
matrixB = np.array( cv.Load(filepath, cv.CreateMemStorage(), "matrixB") )
print "matrixA:", matrixA
print "matrixB:", matrixB

见: http://xudongai.blogspot.jp/2013/08/how-to-use-python-to-load-opencv-yml.html

© www.soinside.com 2019 - 2024. All rights reserved.