error: (-212:Parsing error) Missing or invalid SVM type in function ‘cv::ml::SVMImpl::read_params‘

问题:在使用Python做车牌识别项目,打包完发现执行到SVM字符识别的时候用OpenCV库里的load()保存模型时出错。

我使用的解决方案:

1.如果确定待加载的SVM模型文件和训练数据集没问题,检查load()里的路径是不是带中文,该函数不支持中文路径。

搜索到的其他解决方案:

从字面意思上看出现的错误在于SVM类型的缺失或无效,因此有可能是:

1.SVM模型没导入进去,检查一下路径。

2.xml格式的模型文件出了问题。有以下几种方案:

        1).用记事本打开xml格式的模型文件,找到开头的<opencv_ml_svm>,删除这一行。

         
Save and Load SVM in OpenCV in Python - Stack Overflowhttps://stackoverflow.com/questions/54662467/save-and-load-svm-in-opencv-in-python        2).把self.model = self.model.load(fn)换成:

        file = cv2.FileStorage(fn, cv2.FILE_STORAGE_READ)         

        self.model.read(fn=file.getNode('opencv_ml_svm'))
踩坑记录:TypeError: Expected cv::FileNode for argument ‘fn‘ cv2.read()报错_春田花花幼稚园优秀毕业生的博客-CSDN博客knn.read(‘knn.xml’)修改为file = cv2.FileStorage('knn.xml', cv2.FILE_STORAGE_READ)self.knn.read(fn=file.getNode('opencv_ml_knn'))getNode后面带的文件内的命名https://blog.csdn.net/weixin_44544354/article/details/115872499        3).用了OpenCV高版本库的调用函数调用OpenCV低版本库所生成的xml分类器导致的。

        例如用了opencv3.2的调用函数调用opencv2.x所生成的xml分类器,其中opencv2.x所生成的xml有<my_svm> tag,而opencv3.2中的xml没有这个tag。

        用"my_svm_model.xml"加载模型即可。

使用Opencv时调用svm->load和VideoCapture报错的问题分析_lifei092的博客-CSDN博客问题 1:调用svm-&gt;load("SVM_HOG.xml"));时出现“Parsing error (Missing or invalid SVM type) in cv::ml::SVMImpl::read_params ... ...”的报错。原因分析:可能使用了opencv3.2的调用函数调用opencv2.x所生成的xml分类器导致的,其中opencv2.x所生成的xml有&l...https://blog.csdn.net/lifei092/article/details/86737338https://github.com/opencv/opencv/issues/6572https://github.com/opencv/opencv/issues/6572题外话:

找了一下午,还以为自己的代码有什么藏得特别深的bug。由于我在程序开头指定了模型的保存路径SVM_MODEL_PATH以及训练数据集的保存路径DATA_PATH默认在程序运行路径下,所以一开始我以为是获取程序运行路径的方法不对,搜索一番后发现打包完的程序解包时会解包到C盘的一个临时文件夹,用FILEPATH = os.path.dirname(os.path.abspath(__file__)获取到的路径好像会出问题,于是换成FILEPATH = sys._MEIPASS。关于sys._MEIPASS可以参考:Python中 sys._MEIPASS 是什么_maozexijr的博客-CSDN博客用pyinstaller 打包生成的 exe 文件,在运行时动态生成依赖文件,sys._MEIPASS 就是这些依赖文件所在文件夹的路径通常C:\Windows\Temp\_MEIxxxx或C:\Users\用户名\AppData\Local\Temp\_MEIxxxx仅在 exe 运行时有效,IDE运行时报错:AttributeError: module 'sys...https://blog.csdn.net/MAOZEXIJR/article/details/91971027

后来发现不加载SVM模型直接利用数据集生成新的模型时会闪退,找了一下发现运行到self.model.save(SVM_MODEL_PATH)语句的时候闪退了,这时候我还是以为解包后获取路径出了问题,于是我就把模型保存的路径名称改成了'.\svm.xml',结果发现运行是能运行了,打包完的程序运行后始终找不到生成的模型在哪,于是每一次初始化程序的时候都会重新生成模型。又找了一下发现模型生成到了C:\Users\USERNAME(USERNAME是你自己的用户名)文件夹下,我真的是哭笑不得,只能把路径改了回去。

后来我把SVM识别字符模块单独拿出来打包到另外的文件夹,结果发现莫名其妙没问题了。再次检查了一番之后发现现在的打包路径没中文名了,这才想起来Python环境下OpenCV库的一些加载保存函数是不支持中文路径的。重新把整个程序打包到了英文路径下,运行成功。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值