liuruoze / EasyPR

(CGCSTCD'2017) An easy, flexible, and accurate plate recognition project for Chinese licenses in unconstrained situations. CGCSTCD = China Graduate Contest on Smart-city Technology and Creative Design
Apache License 2.0
6.36k stars 2.51k forks source link

可否自动判断opencv版本? #257

Open qwIvan opened 6 years ago

qwIvan commented 6 years ago
[x] feature request

对于Opencv3.2或以上版本,如果碰到编译问题,例如“ANN_MLP”相关的错误,尝试将config.h中将#define CV_VERSION_THREE_ZERO改为#define CV_VERSION_THREE_TWO试试.

这里可否自动判断?

liuruoze commented 6 years ago

我也希望可以这样,如果方便的话可以提供一些code作为参考么?

JokerShao commented 6 years ago

有个不太成熟的想法啊,在build.sh里面加几行查看opencv版本的语句,然后调用python改写config.h应该就可以了吧?有时间了我写写看。

JokerShao commented 6 years ago

写了一个逻辑比较简单的python脚本,在build.sh里加一条调用脚本的语句就可以了,在我这里试了一下,没什么问题(ubuntu16.04 + python2)。

#-*- coding:utf-8 -*-
# AUTHOR:   joker
# FILE:     autoconfig.py
# ROLE:     select opencv version & modify config.h 
# CREATED:  2017-12-07 15:58:03
# MODIFIED: 2017-12-07 17:20:24

import os
import re

version = os.popen('pkg-config --modversion opencv').readline().strip('\n')
number = filter(str.isdigit, version)
number_f3 = number[0:3]
diff = int(number_f3) - 320

if diff >= 0:
    configfile = open('./include/easypr/config.h', 'r')
    alllines = configfile.readlines()
    configfile.close()
    # print alllines
    configfile = open('./include/easypr/config.h', 'w+')
    current_line = 1
    for eachline in alllines:
        if current_line == 4:
            eachline = re.sub('ZERO', 'TWO', eachline)
        configfile.writelines(eachline)
        current_line += 1
qwIvan commented 6 years ago

@JokerShao 不建议用这么dirty的方法,据说cmakelist.txt是可以做到的

JokerShao commented 6 years ago

。。我觉得还好啊,没有特别dirty。我查查cmakelist怎么写吧 update:

  1. 查了一些资料,没有找到CMakeLists.txt实现相关功能的。你这个据说是怎么来的?可以提供一个思路或者相关代码吗?
  2. 在cpp或者h/hpp里面切换的思路我正在尝试。
  3. 我想来想去大方向都是读出opencv版本号然后和320做差,在if判断。有其他的思路吗?可以说一下,我写写看啊。
liuruoze commented 6 years ago

如果能直接在c++代码中切换就好了。好像看过一段程序就是这么做的。