在一个识别软件中发现了Asprise OCR的“身影”,上官网查了一下相关信息,发现功能挺强大的,识别印刷体应该不错,遗憾的是好像不能识别中文,不过不知道它对扭曲后的英文识别能力怎么样,否则的话可以用来识别验证码。在官网下载了C++的Demo,这里记录一下。
1.准备
在官网下载C++的Dll和头文件,创建使用VS2010创建win32工程,将下载的dll和文件拷贝到创建的工程目录。
2.代码
#include <iostream>
#include "asprise_ocr_api.h"
using namespace std;
void testOcr() {
const char * libFolder = "."; // 修改为dll所在目录,这里.表示是当前目录
const char * fileImg = "test.png"; // 修改需要识别的图片目录,
//加载dll
LIBRARY_HANDLE libHandle = dynamic_load_aocr_library(libFolder);
//输出当前OCR的版本信息
cout << "Version: " << c_com_asprise_ocr_version() << endl;
int setup = c_com_asprise_ocr_setup(false);
if (setup != 1) {
cerr << "Failed to setup. code: " << setup << endl;
return;
}
// must be of long long type
long long ptrToApi = c_com_asprise_ocr_start("eng", OCR_SPEED_FAST, NULL, NULL, NULL);
//设置识别参数
if (ptrToApi == 0) {
cerr << "Failed to start." << endl;
return;
}
cout << "OCR engine started. " << endl;
//开始识别,OCR_OUTPUT_FORMAT_PDF表示输出为PDF文件,PROP_PDF_OUTPUT_FILE为文件名,
//PROP_PDF_OUTPUT_TEXT_VISIBLE表示是否在原图片上面显示文字
char * s = c_com_asprise_ocr_recognize(ptrToApi, fileImg, -1, -1, -1, -1, -1, OCR_RECOGNIZE_TYPE_ALL, OCR_OUTPUT_FORMAT_PDF,
"PROP_PDF_OUTPUT_FILE=result.pdf,PROP_PDF_OUTPUT_TEXT_VISIBLE=true,PROP_PDF_OUTPUT_IMAGE_FORCE_BW=true,PROP_OUTPUT_SEPARATE_WORDS=false,PROP_PDF_OUTPUT_RETURN_TEXT=text", ",", "=");
cout << "Returned: " << s << std::endl;
//关闭
c_com_asprise_ocr_stop(ptrToApi);
//卸载dll
cout << "Unload: " << (dynamic_unload_aocr_library(libHandle) ? "OK" : "Failed") << endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
testOcr();
std::cout << "Press ENTER to exit: ";
std::cin.ignore();
return 0;
}
3.结果
原图片(图片格式):
识别后的pdf文档: