openalpr在windows10 x64 vs2015编译

来源:互联网 发布:中考倒计时软件下载 编辑:程序博客网 时间:2024/05/22 06:24

懒人版:需要安装cmake(最新版即可), vs2015

(1)从https://github.com/aa12356jm/openalpr_windows10_vs2015.git下载代码到本地openalpr_windows10_vs2015文件夹下

(2)在windows 10中,按windows键,在搜索栏中输入powershell,可以看到 windows powershell,右键单击以管理员身份运行。

(3)在powershell中输入命令:Set-ExecutionPolicy RemoteSigned,这个命令是允许系统执行脚本文件(windows默认是不支持运行下面的脚本文件的,如果不执行此命令,执行脚本.\build.ps1时,会出现系统禁止执行脚本。。。。)
(4)在powershell中cd到路径openalpr_windows10_vs2015\openalpr\windows,
执行命令:
.\build.ps1 -Configuration Release -Platform x64 -PlatformToolset v140 -CudaGeneration None

(5)等待编译完成,我的固态硬盘是30分钟左右,时间会比较久。

(6)编译完成后,openalpr_windows10_vs2015\openalpr\windows路径下多一个build文件夹。

所有编译好的库文件在openalpr_windows10_vs2015\openalpr\windows\build\artifacts中;

openalpr生成的exe和库文件在openalpr_windows10_vs2015\openalpr\windows\build\dist\2.2.0\v140\Release\x64  路径下

(7)在openalpr_windows10_vs2015\openalpr\windows\build\dist\2.2.0\v140\Release\x64路径下,放一张美国车牌图片(比如1.jpg),在cmd命令行中,cd到此路径下,执行命令: alpr 1.jpg    会显示识别出来的多个车牌,及对应的概率。  


release版本下载:

release版本中包含编译好的库文件和各种语言的接口,可以直接使用。

在这里下载release版本,https://github.com/openalpr/openalpr/releases,

解压之后,参考教程http://doc.openalpr.com/bindings.html使用

我在qt中这样使用:

#pragma once#include <QtWidgets/QMainWindow>#include "ui_mainWindow.h"#include "../openalpr-2.3.0-win-64bit/include/alpr.h"#pragma  execution_character_set("utf-8")#pragma  comment(lib,"../openalpr-2.3.0-win-64bit/openalpr.lib")class mainWindow : public QMainWindow{Q_OBJECTpublic:mainWindow(QWidget *parent = Q_NULLPTR);private slots:void on_pushButton_clicked();private:Ui::mainWindowClass ui;alpr::Alpr *m_openAlpr;};


手动编译源码:

主要参考这部分点击打开链接,但是有一些错误和需要注意的地方

需要工具和软件

  • Visual Studio 2015
  • CUDA SDK 7 (如果需要cuda支持的话,就安装。本教程没有使用cuda)
  • GIT
  • Powershell(windows自带的命令行工具)

开始

(1)在windows 10中,按windows键,在搜索栏中输入powershell,可以看到 windows powershell,右键单击以管理员身份运行。
(2)在powershell中输入命令:Set-ExecutionPolicy RemoteSigned,这个命令是允许系统执行脚本文件(windows默认是不支持运行下面的脚本文件的,如果不执行此命令,执行脚本.\build.ps1时,会出现系统禁止执行脚本。。。。

(3)下载代码

  • git clone https://github.com/openalpr/openalpr.git   #下载openalpr最新的代码
  • cd openalpr   
  • git clone https://github.com/peters/openalpr-windows.git windows  #下载windows平台的需要的库文件等等
  • git submodule update --init --recursive   
  • cd windows   #进入到下载的windows目录下
(4)下载缺少的文件
进入到windows目录下以后,我们可以发现opencv文件夹是空的,浏览器进入网址:https://github.com/peters/openalpr-windows,发现需要 需下载指定版本的opencv,如下图所示:



  • 在windows文件夹下,执行git命令:git clone https://github.com/opencv/opencv.git @190d00e,即可下载到对应的opencv版本,修改文件夹名字为opencv即可
在windows文件夹下面,进入tesseract-ocr文件夹,发现src文件夹也是空的,这个和opencv一样是同样的原因,如下图所示:



  • 在tesseract-ocr文件夹下面,执行git clone https://github.com/tesseract-ocr/tesseract.git @228317c,即可下载到需要的src文件,修改名字为src即可。
(5)开始执行编译
  • 管理员身份进入powershell中,在windows目录下,执行下面命令:
  • 1.编译vs2015的x64 release版本,不带cuda支持,本教程使用这个方式:
  • .\build.ps1 -Configuration Release -Platform x64 -PlatformToolset v140 -CudaGeneration None
  • 2.编译vs2015的x64 debug版本,不带cuda支持:
  • .\build.ps1 -Configuration Debug -Platform x64 -PlatformToolset v140 -CudaGeneration None
  • 3.编译所有版本支持v100, v110, v120, v140 with CUDA support:
  • .\build.all.ps1 -CudeGeneration All

(6)在编译的过程中会遇到很多问题,总结如下:
0.    tesseract工程中libtesseract304编译出错:文本后缀“銆”无效;未找到文文本运算符或文本运算符模板“operator """"銆”
解决:


static const STRING kCharsToEx[] = {"'", "`", "\"", "\\", ",", ".",          "〈", "〉", "《", "》", "」", "「", ""};
改为:
static const STRING kCharsToEx[] = { "'", "`", "\"", "\\", ",", ".","<", ">", "<<", ">>", "" };
也就是去掉符号:
"」", "「",,
并且修改
"〈", "〉", "《", "》"
"<", ">", "<<", ">>"


1.error C3861: “snprintf”:  找不到标识符
snprintf()函数并不是标准c/c++中规定的函数,所以在许多编译器中,厂商提供了其相应的实现的版本。在gcc中,该函数名称就snprintf(),而在VS中称为_snprintf。 所以在需要使用snprintf()时改成_snprintf就可以了,或则在预编译处加入:
#if _MSC_VER
#define snprintf _snprintf
#endif

2..snprintf重定义
直接注释掉openalpr\windows\tesseract-ocr\src\ccutil\platform.h文件中的这句即可  //#define snprintf _snprintf)

3.找不到opencv320.lib
这个是由于opencv没有编译好对应的库文件导致,进入windows\build\artifacts\2.2.0\v120\Release\x64\opencv中,使用vs2015打开对应的vcxproj文件,选择release,编译即可。

4.openalpr_init等多个函数重定义
这个是由于在openalpr\src\openalpr\alpr_c.cpp文件中,使用c语言的方式定义了导出函数。但是我查看代码没有发现其他地方有重定义的地方,具体原因不清楚。
解决办法:直接注释掉alpr_c.cpp文件中的所有导出函数即可,我们最终是使用alpr.h文件中的c++的方式来调用库文件,这个文件中的内容用不到。

5.在路径openalpr\windows\tesseract-ocr\src\vs2010\libtesseract下,libtesseract.vcxproj没有x64版本,如下图所示

解决办法:进入到目录openalpr\windows\tesseract-ocr\src\vs2010\libtesseract下,使用vs2015打开libtesseract.vcxproj,创建x64 release版本,使用vs2015手动编译即可。

6.出现复制statedetection.lib文件到另一个目录失败,复制openalpr.conf.in文件失败,等多个错误。如下图所示


解决办法:这几个文件都使用不到,可以直接在文件build.ps1中,注释掉以下几行:
#Copy-Item $OpenALPROutputDir\statedetection\$Configuration\statedetection.lib -Force $DestinationDir\statedetection.lib | Out-Null
#Build-OpenALPRNet

Copy-Item $OpenALPRDir\config\openalpr.conf.in -Force $DestinationDir\openalpr.conf | Out-Null
将上面这行修改为下面这行:
Copy-Item $OpenALPRDir\config\openalpr.conf.defaults -Force $DestinationDir\openalpr.conf | Out-Null

OpenALPR 依赖库

  • Giflib 4.1.6
  • LibJPEG 8c
  • Leptonica 1.7.1
  • Libpng 1.4.3
  • Libtiff 3.9.4
  • Zlib 1.2.8
  • Tesseract 3.04-rc1
  • OpenCV 2.4.8

支持的平台

  • Windows 7
  • Windows 8.1
  • Windows 10

支持的平台架构

  • Win32 (x86)
  • X64 (AMD64)

支持的编译器

  • v100 (Visual Studio 2010)
  • v110 (Visual Studio 2012)
  • v120 (Visual Studio 2013)
  • v140 (Visual Studio 2015)

阅读全文
1 0