车牌识别系统easyPR自带的demo基于win32控制台,个人认为可操作性不如可视化的操作界面。为了更好的学习这个系统和openCV,我尝试建立了一个MFC的可视化界面,目前已初步实现,现开始记录实现过程中个人认为值得分享的内容。
我初步规划的easyPR的MFC可视化界面功能如下:用户可以指定当前需要识别的图片,在界面中可以观察到源图像,识别结果,可以选择观察车牌识别的中间过程,中间过程可以显示在源图片的左上角,例如车牌定位,车牌分割,字符分割等等,界面如下图所示。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//Get the recognition result of the loaded plate
void
CtestPRDlg
:
:
OnBnClickedButton
(
)
{
CPlateRecognize
pr
;
pr
.
setLifemode
(
true
)
;
pr
.
setDebug
(
false
)
;
pr
.
setMaxPlates
(
4
)
;
pr
.
setDetectType
(
easypr
:
:
PR_DETECT_CMSER
)
;
vector
<
CPlate
>
plateVec
;
Mat
src
=
imread
(
m_srcPath
)
;
//m_srcPath是std::string类型,记录用户当前选中的待识别图片的路径
int
result
=
pr
.
plateRecognize
(
src
,
plateVec
)
;
if
(
result
==
0
)
{
size_t
num
=
plateVec
.
size
(
)
;
CString
resultStr
;
for
(
size_t
j
=
0
;
j
<
num
;
j
++
)
{
resultStr
+=
plateVec
[
j
]
.
getPlateStr
(
)
.
c_str
(
)
;
//string to constant char*
}
SetDlgItemText
(
RESULT_EDIT2
,
resultStr
)
;
//RESULT_EDIT2是用于显示识别结果的编辑框
}
}
我在MFC的picture control控件中实现显示图片时,用到了CvvImage类,该类在openCV3.0中已经不存在,不过可以下载CvvImage.h和CvvImage.cpp来实现该功能,具体的代码会发布在Github的easyPR的仓库中。
2.3 picture control控件和对话框随加载图片的尺寸来更改自身的尺寸。
目前源图加载时,对话框和picture control的尺寸会根据源图尺寸来进行调整;对话框中的其他控件并不会调整。在加载图片时,MFC对话框会触发一次重绘事件,此时获取对话框句柄是空。因此需要在界面初始化时,获取到对话框的尺寸,加载图片时直接根据图片尺寸更新对话框尺寸,具体的代码会发布在Github的easyPR的仓库中。
你好,我猜你想问的是:EasyPR中用的是哪一种人工神经网络模型?很抱歉,我对人工神经网络模型并没有研究,不过EasyPR的作者有一篇博客是关于神经网络的
神经网络浅讲:从神经元到深度学习
,你可以参考一下
谢谢,我现在想问一下,从github下载你的EasyPR_MFC-master,在EasyPR_MFC-masterEasyPRx64Debug的testPR.exe打开的话会出现应用程序无法正常启动 ,该怎么办啊
请问,点击result按钮后没有显示结果,显示线程均已退出,并且在plate_recognize.cpp中showDectectResults显示未定义,我也没有找到这个函数的定义在哪里。VS2017+Opencv3.2.0.求指教。不胜感激
您好,首先谢谢您试用EasyPR_MFC。showDectectResults函数的定义在src\core\core_func.cpp中,core_func.cpp和plate_recognize.cpp属于同一个命名空间namespace easypr,正常情况下不会显示未定义。
不过很抱歉,我使用的是VS2013+opencv3.1,状况可能和您不一样,建议您按照如下方式确认一下:
1. 随意找一个opencv3.2自带的例程,按照配置TestPR的方式配置该例程的opencv3.2,确认是否可以正常运行。若例程无法运行,那么您的Opencv配置可能有问题。
2. 若第1步没有问题,您可以单独运行libeasypr,看看是否能成功。若不成功,那么有可能时当前的libeasypr不兼容opencv3.2。
在5月中旬,EasyPR的作者更新了1.6 alpha版本,宣称兼容了opencv3.2,5月下旬,我也对EasyPR_MFC进行了相应的更新,您可以下载新的程序再试试。
感谢回复,更新EasyPR原作者的代码后上述问题解决。运行原作者Demo为出现问题,运行MFC后kv.cpp中assert(reader)引发断点,char_identifi.cpp中 ann_->predict(featureRows, output)引发断点:将一个无效参数传递给了将无效参数视为严重错误的函数。这是版本问题吗?百度无果。。。
你好,按照你的步骤配置新添加的项目的时候还是会报无法解析的外部符号这个错误
error LNK2019: 无法解析的外部符号 “public: __cdecl easypr::CPlateDetect::~CPlateDetect(void)” (??1CPlateDetect@easypr@@QEAA@XZ),该符号在函数 “public: __cdecl easypr::CPlateRecognize::~CPlateRecognize(void)” (??1CPlateRecognize@easypr@@QEAA@XZ) 中被引用
这是为什么呢?
博主你好,我用到LOAD_ANN_MODEL(ann_, kDefaultAnnPath);的时候总是报错
C2275 “cv::ml::ANN_MLP”: 将此类型用作表达式非法 libeasypr
用的是VS2017 + OpenCV341 方便解答一下吗? 不胜感激
严重性 代码 说明 项目 文件 行 禁止显示状态
错误 C2275 “cv::ml::ANN_MLP”: 将此类型用作表达式非法
LOAD_ANN_MODEL(ann_, kDefaultAnnPath); 这个地方总报错
请问博主这是怎么回事啊
博主你好,我用到LOAD_ANN_MODEL(ann_, kDefaultAnnPath);的时候总是报错
C2275 “cv::ml::ANN_MLP”: 将此类型用作表达式非法 libeasypr
用的是VS2017 + OpenCV341 方便解答一下吗? 不胜感激
你好,参考这里:https://github.com/liuruoze/EasyPR/issues/244
https://github.com/liuruoze/EasyPR/issues/226
我下载的您上传的这个,https://github.com/livezingy/EasyPR_MFC。下载下来一直说破损了,或者说加载不出来。如果您方便的话,可以发一份压缩包么。邮箱:1596162941@qq.com
“channels”: 不是“cv::DataType”的成员 以及 “depth”: 不是“cv::DataType”的成员 ,出现这种问题要怎么处理呢?本人用的VS2017 + opencv4.0.0