EasyPR编译指南

2023-11-14

1、下载源码

https://github.com/liuruoze/EasyPR

Download ZIP或者git(https://github.com/liuruoze/EasyPR.git)将代码解压到硬盘目录下。 例如F:\车牌识别\EasyPR(车牌识别)\EasyPR

2、双击解决方案文件EasyPR.sln,用VS IDE(这里使用VS2019)打开,提示

点击确定。

3、选择libeasypr项目,编译出现如下错误

这是因为没有配置OpenCV环境所致。

4、配置OpenCV环境,这里选用最新版本OpenCV4.2版本

包含目录:

F:\OpenCV\OpenCV v4.2.0\build\include

引用目录:

F:\OpenCV\OpenCV v4.2.0\build\x64\vc15\lib

再次编译,出现如下错误

5、双击第1条错误信息

进入到chars_identify.cpp,选择宏定义LOAD_ANN_MODEL(cv::ml::ANN_MLP是在此宏定义里面定义的) 按F12或右键菜单“转到定义”,这个时候会自动打开config.h文件,看到如下代码:

#ifdef CV_VERSION_THREE_TWO
  #define LOAD_SVM_MODEL(model, path) \
    model = ml::SVM::load(path);
  #define LOAD_ANN_MODEL(model, path) \
    model = ml::ANN_MLP::load(path);
#else
  #define LOAD_SVM_MODEL(model, path) \
    model = ml::SVM::load<ml::SVM>(path);
  #define LOAD_ANN_MODEL(model, path) \
    model = ml::ANN_MLP::load<ml::ANN_MLP>(path);
#endif

修改代码如下:

将
#ifdef CV_VERSION_THREE_TWO
改为如下
#if ((CV_MAJOR_VERSION > 3) || (CV_MAJOR_VERSION==3 && CV_MINOR_VERSION>=2))
// 作者当初设计这套组件的时候,OpenCV最高版本才3.2

即:

#if ((CV_MAJOR_VERSION > 3) || (CV_MAJOR_VERSION==3 && CV_MINOR_VERSION>=2))
  #define LOAD_SVM_MODEL(model, path) \
    model = ml::SVM::load(path);
  #define LOAD_ANN_MODEL(model, path) \
    model = ml::ANN_MLP::load(path);
#else
  #define LOAD_SVM_MODEL(model, path) \
    model = ml::SVM::load<ml::SVM>(path);
  #define LOAD_ANN_MODEL(model, path) \
    model = ml::ANN_MLP::load<ml::ANN_MLP>(path);
#endif

6、再次编译,出现如下错误:

提示找不到第3方组件库,由于libeasypr工程文件libeasypr.vcxproj和thirdparty不在同一级目录下,再次修改包含目录添加包含目录,添加thirdparty目录相对于libeasypr.vcxproj文件的相对路径,修改后的包含目录如下:

..\
F:\OpenCV\OpenCV v4.2.0\build\include

7、再次编译,出现如下错误:

这是由于OpenCV升级后,规范化常量命名所致,修改规则如下:

CV_WINDOW_AUTOSIZE	->		WINDOW_AUTOSIZE
CV_RGB2GRAY		->		COLOR_RGB2GRAY
CV_THRESH_OTSU		->		THRESH_OTSU
CV_THRESH_BINARY	->		THRESH_BINARY
cvSize			->		Size

除了颜色转换,是将CV_改为COLOR_,其它错误基本上是将CV_前缀删除即可。

请注意:CV_TERMCRIT_ITER不用修改。

8、再次编译,出现如下错误:

请在源文件或头文件里面,前面添加引用

#include "opencv2/core/types_c.h" 

9、再次编译,出现如下错误:

 请在helper.hpp源码前面添加

using namespace cv::Error;

10、再次编译,出现如下错误:

 双击错误行,选中DataType,按F12或者右键菜单“转到定义”,自动打开traits.hpp文件,发现

DataType的属性因为宏定义的原因并没有开放出来,打开libeasypr属性,添加OPENCV_TRAITS_ENABLE_DEPRECATED预处理器宏定义

11、再次编译,出现如下错误:

无法实现抽象化示例类?从错误输出我们可以看出,是函数trainAuto和getUncompressedSupportVectors这2个存虚函数没有实现引起的(早期的OpenCV版本并没有这2个纯虚函数)。

CV_WRAP virtual bool trainAuto(InputArray samples,
        int layout,
        InputArray responses,
        int kFold = 10,
        Ptr<ParamGrid> Cgrid = SVM::getDefaultGridPtr(SVM::C),
        Ptr<ParamGrid> gammaGrid  = SVM::getDefaultGridPtr(SVM::GAMMA),
        Ptr<ParamGrid> pGrid      = SVM::getDefaultGridPtr(SVM::P),
        Ptr<ParamGrid> nuGrid     = SVM::getDefaultGridPtr(SVM::NU),
        Ptr<ParamGrid> coeffGrid  = SVM::getDefaultGridPtr(SVM::COEF),
        Ptr<ParamGrid> degreeGrid = SVM::getDefaultGridPtr(SVM::DEGREE),
        bool balanced=false) = 0;
CV_WRAP virtual Mat getUncompressedSupportVectors() const = 0;

既然知道是纯虚函数没有实例化,那么就简单多了。打开corrected_svm.cpp文件,将这2个纯虚函数简单实例化就行了。

CV_WRAP virtual bool trainAuto(InputArray samples,
        int layout,
        InputArray responses,
        int kFold = 10,
        Ptr<ParamGrid> Cgrid = SVM::getDefaultGridPtr(SVM::C),
        Ptr<ParamGrid> gammaGrid = SVM::getDefaultGridPtr(SVM::GAMMA),
        Ptr<ParamGrid> pGrid = SVM::getDefaultGridPtr(SVM::P),
        Ptr<ParamGrid> nuGrid = SVM::getDefaultGridPtr(SVM::NU),
        Ptr<ParamGrid> coeffGrid = SVM::getDefaultGridPtr(SVM::COEF),
        Ptr<ParamGrid> degreeGrid = SVM::getDefaultGridPtr(SVM::DEGREE),
        bool balanced = false)
{
    return false;
}

CV_WRAP virtual Mat getUncompressedSupportVectors() const
{
    return getSupportVectors();
}

添加位置如下(类SVMImpl):

12、继续编译,出现如下错误:

双击错误行,将NULL改为nullptr,将所有出错的NULL改为nullptr

13、再次编译,出现如下信息:

至此,终于可以歇口气了!!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

EasyPR编译指南 的相关文章

  • VC++ GDI+将CDC保存为图片文件(bmp、jpg、png)

    int GetEncoderClsid const wchar t format CLSID pClsid UINT num 0 UINT size 0 ImageCodecInfo pImageCodecInfo NULL GetImag
  • VC++ MapWinGis篇(创建图层)

    MapWinGis控件的引用 import MapWinGIS ocx rename IImage gisIImage rename ImageType gisImageType rename Point gisPoint using na
  • OpenGL GLFW入门篇 - 画凸多边形

    效果图 主体代码 void DrawPolygon void glPushMatrix glLoadIdentity glTranslatef 0 0 0 0 0 f 蓝色 glColor3f 0 f 0 f 1 f glBegin GL
  • GPAC MP4文件写入(支持H264、H265)

    1 GPAC模块下载链接https github com gpac gpac或https gpac wp imt fr downloads 2 编译指导https github com gpac gpac wiki Build Introd
  • C++ 正则表达式regex(一)

    匹配字符串的基本规则 1 匹配固定的字符串 regex e abc 2 匹配固定字符串 不区分大小写 regex e abc regex constants icase 3 匹配固定字符串之外多一个字符 不区分大小写 regex e abc
  • C++类上使用属性(__declspec property)

    原始代码如下 class A private int m nIndex public int getIndex return m nIndex void setIndex int value m nIndex value 如果采用属性方式实
  • VC++ 程序启动即隐藏

    所谓的隐藏是程序启动后不显示主窗体 网上介绍了很多方法 是否达到效果 众说纷纭 这里只介绍一种在项目中实际应用到的切实可行的方法 这里假设主窗体为CMainDialog 1 变量声明 BOOL m bShowWindow 2 给变量赋初始值
  • VC++ 源码实现通达信公式管理器

    效果图 前段时间 因业务需要 写了这样一个软件 同样的页面已经是第2次写了 第1次大约5年前的事情了 因为代码遗失 于是重新写 页面看似复杂 实现起来非常简单 第一步 参照通达信的公式管理器核心文件TCalc dll 导出资源文件 TCal
  • VC++ 在任务栏图标上显示进度条效果

    该功能主要是通过COM接口ITaskbarList3 来实现进度效果显示功能 头文件定义 CSWTaskBarList h pragma once include
  • VC++ OpenCV4.x二维码识别

    自OpenCV4 x开始 二维码识别已经悄然进入 再也不用看zbar脸色了 以下是官网发布的源码 include opencv2 objdetect hpp include opencv2 imgproc hpp include openc
  • VC++ UI布局管理器

    程序从codeproject上下载的 功能类似QT的QLayout 有了它界面缩放再也不会乱套了 具体使用方法可参考源码示例 资源下载链接地址 https download csdn net download u012156872 1926
  • Node.js EventEmitter事件

    Node js EventEmitter Node js 所有的异步 I O 操作在完成时都会发送一个事件到事件队列 Node js 里面的许多对象都会分发事件 一个 net Server 对象会在每次有新连接时触发一个事件 一个 fs r
  • vim/vi常用命令集

    格式 指令 或指令 参数 指令解释 文件操作 vim vi 打开一个空文件 vim vi a txt 打开当前目录中的a txt文件 若文件不存在则创建一个名为a txt的文件 指定保存位置为当前目录 vim vi home a txt 打
  • EAN13条形码绘制(Delphi版)

    单元声明 unit UnitEAN https wenku baidu com view d61eec0dc4da50e2524de518964bcf84b9d52d0d html 共有95 18 113条数据模块 1表示黑 0表示白 左侧
  • VC++ 文件操作封装类

    头文件声明 SysUtils h pragma once include
  • VC++ 源码实现通达信公式管理器2

    前面我们介绍了如何加载显示公式列表 本篇章介绍如何格式化显示公式内容 常用的CEdit或CRichEdit是不支持这种格式显示的 这里需要借助第三方控件SciLexer 没错 Notepad 就是使用的这个控件 它支持不同的文本内容支持不同
  • CFileDialog 多文件选择注意事项

    当选择文件数量比较多的时候 发现CFileDialog返回文件名并不完整 翻阅MSDN发现文件名长度是有限制的 解决思路 CFileDialog dlgOpen TRUE T txt NULL OFN HIDEREADONLY OFN RE
  • C++ xml库的选择

    自从触及xml文件的读写 一直以来都是用的tinyxml2 接口简单 然而近期项目频繁出错 跟踪调试发现 问题出在了xml文件的读写上 当节点数超过百万级别的时候 内存暴增到G的当量 很显然程序会由于内存申请不足崩掉了 果断寻找替代品 百度
  • MetaEditor 编译原理之MQ4文件语法解析

    语法解析 顾名思义就是将一个文件或者一段代码 按照语法结构拆分为一个一个的单词 比如 extern int TakeProfit 50 int start int i 0 while i lt TakeProfit i return i 正
  • C++ StrCmpLogicalW文件名排序

    打开资源管理器 文件列表如下 搜索文件列表 include

随机推荐

  • css中::before ::after的用法

    一 介绍 before和 after是伪元素 css3中为了与伪类做区别 伪元素采用双冒号的写法 但因为兼容性的问题 所以现在大部分还是统一的单冒号 比如 first line first letter before after等 但新的在
  • 算法的时间复杂度、空间复杂度

    文章目录 数据结构 算法 数据结构与算法的关系 时间复杂度 O 1 O n O 1 O n O n O n 2 O log2 n 空间复杂度 O 1 O n O n 2 常用算法的时间 空间复杂度 数据结构 数据结构是计算机存储 组织数据的
  • Spring Colud Alibaba

    一 SpringColudAlibaba Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案 此项目包含开发分布式应用微服务的必需组件 方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布
  • SHA256WithRSA

    在上文中了解到SHA和RSA 工作中恰好用到扩展应用 SHA256WithRSA 本文总结下学习过程 备忘 再提供另外一种方法 实现Java版pem密钥和 Net版xml密钥相互转换的方法 密钥转换 准备 引入BouncyCastle Cr
  • java类添加属性_Java 类动态添加属性字段的操作

    说明 做项目中遇到一种场景 需要根据查询时间段 获取时间段中中每个月份对应的金额 费用统计 如截图中的两列 因为列是动态的 首先想到的就是后天拼接json格式字符串 然后返回到前台 组装表头及内容 但是当前系统中easyui版本为1 2 并
  • 【华为OD机试】需要打开多少监控器(C++ Python Java)2023 B卷

    时间限制 C C 1秒 其他语言 2秒 空间限制 C C 262144K 其他语言524288K 64bit IO Format lld 语言限定 C clang11 C clang 11 Pascal fpc 3 0 2 Java jav
  • 海思芯片部署MPP并验证功能

    1 前期准备 1 1搭建好开发环境 1 这里说的是以个人电脑进行开发 安装好虚拟机 在虚拟机中搭建好nfs服务器 确保开发板可以挂载上虚拟机 2 确保开发板和PC可以通过串口通信 1 2熟悉海思芯片的SDK开发包 1 SDK开发包里有mpp
  • 安全开发-PHP应用&留言板功能&超全局变量&数据库操作&第三方插件引用&后台模块&Session&Cookie&Token&身份验证&唯一性

    文章目录 开发环境 数据导入 mysql架构 库表列 数据库操作 mysqli函数 增删改查 数据接收输出 html混编 超全局变量 第三方插件引用 js传参 函数对象调用 身份验证 Cookie使用 身份验证 Session使用 唯一性判
  • 如何提高会员管理系统的使用效率

    在现代商业竞争激烈的环境下 会员管理系统成为许多企业提升用户体验 加强客户关系的关键工具 然而 要充分发挥会员管理系统的作用 提高其使用效率至关重要 本文将探讨如何有效地提升会员管理系统的使用效率 从而实现更好的业务成果 1 精准的系统定位
  • 如何理解区块链的运行原理?

    如何理解区块链的运行原理 上文 我们介绍了区块链的概念 今天就稍微深入一下 尽可能通俗地介绍一下 区块链的运行原理 通过上文的小故事 我们知道了区块链的概念 它的本质就是解决信任问题 降低信任成本的技术方案 目的就是为了去中心化 去信用中介
  • EasyUI Accordion 折叠面板默认不展示

    最近使用easyui做一套后台管理系统 左侧菜单使用的是Accordion折叠面板 需求是打开页面默认不展示子菜单 在网上找了一些博客 大多数都是说把 jquery easyui min js 中第多少行给注释了 我没有找到相应的代码 我使
  • Figma插件开发

    目的 介绍 Figma 插件 figma 插件开发从 0 到 1 分享自己开发的想法 一 Figma 是什么 figma 插件是什么 Figma 初印象 figma 是一个 基于浏览器 的协作式 UI 设计工具 figma 插件初印象 加强
  • 【解决方法】INF file txtsetup.sif is corrupt or missing

    今天帮别人装一个系统 一个上网本 先描述一下环境 上网本 没有光驱 只有一个分区 C 使用UltraISO制作的启动盘 所以 只能用U盘安装 或者说我只会 可是做好了启动盘之后安装确出现上面的问题 解决方法 使用WinSetupFromUS
  • kali下微信的使用dochat(盒装微信)

    一 dochat是什么 DoChat 盒装微信 是docker封装好的微信客户端 WeChat PC Windows Client for Linux 主要解决在linux下使用微信的问题 二 安装方法 官方介绍 GitHub huan d
  • 2023-9-14 石子合并

    题目链接 石子合并 include
  • Alibaba Druid简单介绍及使用

    文章目录 概要 Druid 的主要特点和功能 Druid 的使用 一 添加依赖 二 配置数据源 三 配置 Druid 监控和过滤器 四 启动应用程序 五 访问监控页面 小结 概要 Alibaba Druid 以下简称 Druid 是阿里巴巴
  • ppt to html5 sdk,kinvey-html5-sdk

    Kinvey JavaScript SDK for HTML5 applications Kinvey HTML5 SDK Installation From the command prompt go to your app s root
  • JavaObject类初识

    Java所有的类都继承Object类 Object类中的方法 Object类中的方法一般都需要重写 Sting toString 默认的 toString 返回的是对象的堆内存地址 重写 toString一般用于输出对象的属性 class
  • csdn测试

    测试
  • EasyPR编译指南

    1 下载源码 https github com liuruoze EasyPR Download ZIP或者git https github com liuruoze EasyPR git 将代码解压到硬盘目录下 例如F 车牌识别 Easy