Windows10-64bit,vs2015,借助OpenCV、Zbar、Tesseract(编译环境32bit)进行数字、条形码识别。

    此次博客介绍了如何在vs2015上配置opencv、zbar、tesseract,也是为了给即将进行条形码识别工作的工程师所准备。

    本次提供的代码是在32bit的编译环境下完成的。

    主要内容包括:所需要的软件安装包、测试代码,安装以及配置opencv、zbar、tesseract的全过程,以及配置完成后的测试结果。

    下载链接:https://download.csdn.net/download/zhaonan9523/11106738

操作环境

  • 电脑操作环境windows 10-64位

  • opencv 2.4.13.6-vc14.rar:下载地址:https://opencv.org/releases.html

  • visual studio 2015

以下程序的编写都是在32位的环境下进行的。

解压opencv-2.4.13.6-vc14.rar得到opencv-2.4.13.6-vc14.exe。双击opencv-2.4.13.6-vc14.exe。

    点击Extract后如下:

 

    把D:\opencv\build\x86\vc14\bin加入环境变量。

 

    之后点击确定,注意,改变windows环境变量后一般要重新启动电脑。

    打开Visual Studio 2015,点击文件-新建-项目

 

    选择Win32控制台应用程序:

 

    点击确定,然后下一步,到本页时可以选择空项目,直到完成。

 

    工程建好之后,依次点击 视图-其他窗口-属性管理器

 

    打开属性管理器。

 

     在Debug|Win32上右击,选择添加新项目属性表。

    不必修改文件名,直接添加即可。双击新建立的PropertySheet。

    打开PropertySheet属性页面,编辑VC++目录-包含目录。这里请注意:如果打开的是PropertySheet属性页面,之后的文件配置也仅适用于PropertySheet项目。如果打开的是opencvtest属性页面,则文件配置适用于opencvtest项目中的所有文件。后续的zbar配置也是如此。

 

依此加入

D:\opencv\build\include\opencv2

D:\opencv\build\include\opencv

D:\opencv\build\include

 

编辑VC++目录-库目录

加入D:\opencv\build\x86\vc14\lib

 找到链接器-输入-附加依赖项

 

加入以下19个库文件。这里请注意:库文件中结尾带dDebug模式,release模式则需要把d去掉。

opencv_ml2413d.lib

opencv_calib3d2413d.lib

opencv_contrib2413d.lib

opencv_core2413d.lib

opencv_features2d2413d.lib

opencv_flann2413d.lib

opencv_gpu2413d.lib

opencv_highgui2413d.lib

opencv_imgproc2413d.lib

opencv_legacy2413d.lib

opencv_objdetect2413d.lib

opencv_ts2413d.lib

opencv_video2413d.lib

opencv_nonfree2413d.lib

opencv_ocl2413d.lib

opencv_photo2413d.lib

opencv_stitching2413d.lib

opencv_superres2413d.lib

opencv_videostab2413d.lib

 

回到解决方案资源管理器,在源文件上右击,添加新建项目。

 加入CPP文件,命名为main.cpp

 输入如下代码:

#include <opencv.hpp>
using namespace cv;
int main()
{
	Mat img = imread("..\\bar1.jpg");
	imshow("条形码原始图片", img);
	waitKey(0);
	return 1;
}

点击 本地Windows调试器,注意要选择Debug X86

 

 点击 本地Windows调试器,注意要选择Debug X86

 

安装条形码识别函数包zbar。 zbar-0.10-setup.exe。

 

点击Next,到此处注意勾选“Development Headers and Libraries”

安装目录可以选择d:\ProgramFilesD\Zbar

安装后的文件如下。

 

把D:\ProgramFilesD\ZBar\bin加入环境变量。注意,Windows环境变量改变,一般要重新启动电脑。

打开上文建立好的解决方案opencvtest,在解决方案opencvtest上右击,添加--新建项目

仍然建立一个Visual C++ Win32控制台应用程序,名字为zbartest1

仍然选择空项目,直到完成。

 

在属性管理器窗口下,项目zbartest1,Debug|Win32下新建属性管理文件zbartest1PropertySheet

 

双击zbartest1PropertySheet,分别加入如下内容。

通用属性-- VC++目录--包含目录:

D:\ProgramFilesD\ZBar\include

D:\opencv\build\include\opencv2

D:\opencv\build\include\opencv

D:\opencv\build\include

通用属性-- VC++目录-- 库目录

D:\ProgramFilesD\ZBar\lib

D:\opencv\build\x86\vc14\lib

通用属性--链接器--输入--附加依赖项,

加入zbar的1个lib文件和opencv的19个lib文件

libzbar-0.lib

opencv_ml2413d.lib

opencv_calib3d2413d.lib

opencv_contrib2413d.lib

opencv_core2413d.lib

opencv_features2d2413d.lib

opencv_flann2413d.lib

opencv_gpu2413d.lib

opencv_highgui2413d.lib

opencv_imgproc2413d.lib

opencv_legacy2413d.lib

opencv_objdetect2413d.lib

opencv_ts2413d.lib

opencv_video2413d.lib

opencv_nonfree2413d.lib

opencv_ocl2413d.lib

opencv_photo2413d.lib

opencv_stitching2413d.lib

opencv_superres2413d.lib

opencv_videostab2413d.lib

在项目zbartest1下加入源文件main.cpp

测试 :

#include <iostream>
#include <zbar.h>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2\opencv.hpp>
#include <opencv2\imgproc\imgproc_c.h>
#include <cv.h>
using namespace cv;
using namespace std;
using namespace zbar;
static string zbar_test(Mat srcImage) {
	string res = "";
	ImageScanner scanner;
	scanner.set_config(ZBAR_NONE, ZBAR_CFG_ENABLE, 1);
	int width = srcImage.cols;
	int height = srcImage.rows;
	uchar *raw = (uchar *)srcImage.data;
	Image imageZbar(width, height, "Y800", raw, width * height);
	scanner.scan(imageZbar); //扫描条码
	Image::SymbolIterator symbol = imageZbar.symbol_begin();
	if (imageZbar.symbol_begin() == imageZbar.symbol_end())
	{
		cout << "查询条码失败,请检查图片!" << endl;
	}
	else {
		for (; symbol != imageZbar.symbol_end(); ++symbol)
		{
			cout << "类型:" << endl << symbol->get_type_name() << endl << endl;
			cout << "条码:" << endl << symbol->get_data() << endl << endl;
			if (symbol->get_type_name() != "QR-Code") {
				res = symbol->get_data();
				break;
			}
		}
	}
	imageZbar.set_data(NULL, 0);
	cout << "scan result:" << res << endl;
	return res;
}

int main()
{
	Mat barImg = imread("..\\bar1.jpg");
	cvtColor(barImg, barImg, COLOR_RGB2GRAY);
	zbar_test(barImg);//7ms
	imshow("图像", barImg);
	cvWaitKey(0);
	return 0;
}

 把zbartest1设为启动项目,在debug,x86下调试程序。

出现错误error C4996: 'fopen': This function or variable may be unsafe.

右击工程->属性->C\C++->预处理器->预处理器定义->编辑 加入 _CRT_SECURE_NO_WARNINGS,

其中预处理器定义中自带的WIN32_DEBUG_CONSOLE不需要删除。

 

 

再重新执行,得到结果如图,说明zbar安装成功。 

安装tesseract-ocr-setup-3.05.02-20180621.exe

如果要支持中文简体,则选择Additional language data(download),进一步选择Chinese(simplified)

 

安装位置选择d:\Program Files (x86)\Tesseract-OCR,需要等几分钟。 

  • 把Tesseract加入环境变量

安装结束后把D:\Program Files (x86)\Tesseract-OCR加入环境变量,同时定义一个用户变量为TESSDATA_PREFIX,将D:\Program Files (x86)\Tesseract-OCR加入到用户变量TESSDATA_PREFIX中。

    将D:\Program Files (x86)\Tesseract-OCR加入环境变量后重启计算机。将压缩包下的1.jpg图片放入Tesseract-OCR的安装目录当中,然后按下Windows+r输入cmd,出现cmd.exe界面后输入tesseract  –v查看版本号。使用dos运行D:\Program Files (x86)\Tesseract-OCR下的tesseract,

命令为:tesseract  1.jpg  1.txt  -l  eng。如果出现如下图所示,说明环境变量配置成功。

更改zbartest1PropertySheet如下:

通用属性-- VC++目录--包含目录:

D:\ProgramFilesD\ZBar\include

D:\opencv\build\include\opencv2

 

D:\opencv\build\include\opencv

D:\opencv\build\include

D:\tesseract_vs2015\include

通用属性-- VC++目录-- 库目录

D:\ProgramFilesD\ZBar\lib

D:\opencv\build\x86\vc14\lib

D:\tesseract_vs2015\tesseract-leptonica-vs2015\Debug

注意:tesseract_vs2015这个文件是通过解压tesseract_vs2015.zip得到,里面包含include,tesseract-leptonica-vs2015两个文件夹。

 

通用属性--链接器--输入--附加依赖项,

加入zbar的1个lib文件,op

encv

的19个lib文件和9个tesseract需要的lib文件

libzbar-0.lib

opencv_ml2413d.lib

opencv_calib3d2413d.lib

opencv_contrib2413d.lib

opencv_core2413d.lib

opencv_features2d2413d.lib

opencv_flann2413d.lib

opencv_gpu2413d.lib

opencv_highgui2413d.lib

opencv_imgproc2413d.lib

opencv_legacy2413d.lib

opencv_objdetect2413d.lib

opencv_ts2413d.lib

opencv_video2413d.lib

opencv_nonfree2413d.lib

opencv_ocl2413d.lib

opencv_photo2413d.lib

opencv_stitching2413d.lib

opencv_superres2413d.lib

opencv_videostab2413d.lib

tesseract.lib

giflib.lib

libjpeg.lib

liblept.lib

libpng.lib

libtesseract.lib

libtiff.lib

openjpeg.lib

zlib.lib

测试:

#include <iostream>
#include <zbar.h>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2\opencv.hpp>
#include <opencv2\imgproc\imgproc_c.h>
#include <cv.h>

#include <baseapi.h>
#include <allheaders.h>

using namespace cv;
using namespace std;
using namespace zbar;


static string zbar_test(Mat srcImage) {
	string res = "";
	ImageScanner scanner;
	scanner.set_config(ZBAR_NONE, ZBAR_CFG_ENABLE, 1);
	int width = srcImage.cols;
	int height = srcImage.rows;
	uchar *raw = (uchar *)srcImage.data;
	Image imageZbar(width, height, "Y800", raw, width * height);
	scanner.scan(imageZbar); //扫描条码
	Image::SymbolIterator symbol = imageZbar.symbol_begin();
	if (imageZbar.symbol_begin() == imageZbar.symbol_end())
	{
		cout << "查询条码失败,请检查图片!" << endl;
	}
	else {
		for (; symbol != imageZbar.symbol_end(); ++symbol)
		{
			cout << "类型:" << endl << symbol->get_type_name() << endl << endl;
			cout << "条码:" << endl << symbol->get_data() << endl << endl;
			if (symbol->get_type_name() != "QR-Code") {
				res = symbol->get_data();
				break;
			}
		}
	}
	imageZbar.set_data(NULL, 0);
	cout << "scan result:" << res << endl;
	return res;
}

int main()
{
	Mat barImg = imread("..\\bar1.jpg");
	cvtColor(barImg, barImg, COLOR_RGB2GRAY);
	zbar_test(barImg);//7ms
	imshow("图像", barImg);
	//==================================================
	Mat ocrImg = imread("..\\ocr1.jpg");
	imshow("图像", ocrImg);
	char *outText;
	tesseract::TessBaseAPI *api = new tesseract::TessBaseAPI();
	// Initialize tesseract - ocr with English, without specifying tessdata path
	if (api->Init(NULL, "eng")) {
		fprintf(stderr, "Could not initialize tesseract.\n");
		exit(1);
	}
	// Open input image with leptonica library
	Pix *image = pixRead("..\\ocr1.jpg");
	api->SetImage(image);
	// Get OCR result
	outText = api->GetUTF8Text();
	printf("OCR output:\n%s", outText);
	// Destroy used object and release memory
	api->End();
	delete[] outText;
	pixDestroy(&image);
	imshow("ocr图像", ocrImg);
	cvWaitKey(0);
	return 0;
}

 执行结果如下,表示Tesseract安装成功。

 

 

 

 

 

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值