Tesseract-OCR识别 学习(三、C# 包装C++的dll,并调用 来识别图片)

因为后面主要是用C# winform来写的自定义截图来识别,而Tesseract-ocr主要是C++编译的dll.虽然有相应的C# dll,但是不知道具体函数怎么声明的。所以我就先用VS2013 VC调用了一次(上篇讲的就是。)发现,有3个函数要使用,而直接引用dll 会报错:
在这里插入图片描述
只有发DllImport 相应的dll 里面的函数了。三个函数,而且参数比较多。所以只好自己用C++ 包装了一次,在调用了。 说的有点啰嗦。哈哈
把上一篇的使用原dll的来识别图片的方法 提出来:
#define _CRT_SECURE_NO_DEPRECATE
//#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1

#include “tesseract\baseapi.h”
#include “tesseract\strngs.h”
#include “PackageDll.h”
#pragma comment(lib,“libtesseract302.lib”)
#pragma comment(lib, “liblept168.lib”)
extern “C”
{
_declspec(dllexport)
char* OCRDiscern(char* imagePath)
{
//static char * str = imagePath;
tesseract::TessBaseAPI api;
api.Init(NULL, “eng”, tesseract::OEM_DEFAULT);
api.SetVariable(“tessedit_char_whitelist”, “0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz”);
STRING text_out;
//
if (!api.ProcessPages(imagePath, NULL, 0, &text_out))
{
//MessageBox(NULL, LPCWSTR(str), LPCWSTR(str), 0);
return 0;
}
char * pc = new char[100];
strncpy(pc, text_out.string(),100);
//MessageBox(NULL, LPCWSTR(pc), LPCWSTR(pc), 0);
return pc;// text_out.string();
}

头文件就省略了。注: extern “C” { _declspec(dllexport) 函数 } 这个是为了生成dll时,C# 调用时方法名称不被编译成其他的函数名。 生成的时候还会报各种错误,找不到libtesseract302.lib 什么的,拷贝到dubug下就好了。

生产好后就,在C#里面引用就是了。

   [DllImport("packagedll.dll", CharSet = CharSet.Ansi)]
   unsafe public static extern StringBuilder OCRDiscern(String imagePath);

然后调用dll里面的方法就是了。
try
{
StringBuilder results = new StringBuilder(“Hello World!”, 25);
unsafe
{
string imagePath = “7.jpg”;
//StringBuilder sbu = new StringBuilder(“7.jpg”);
pictureBox1.Image = Image.FromFile(imagePath);
pictureBox1.Refresh();
results = OCRDiscern(imagePath);
}
if (results.ToString() == “”)
{
MessageBox.Show(“空字符串”);
}
else
{
//MessageBox.Show(results.ToString());
MessageBox.Show(results.ToString());
}
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString());
}
因为C#项目 会使用到C++里面的指针,会报一个不安全的使用
在这里插入图片描述
修改项目属性里面的生成,允许不安全代码即可:
在这里插入图片描述

还有要注意的是:
1、把你自己封装的dll 拷贝到C# 项目的Debug下;
2、原代码中的dll 也必须拷贝到相应Debug目录下;
3、原代码中的语言包也必须拷贝的Debug下: 如图:
在这里插入图片描述
后面就是识别电子设备中的数字了。
买的一个摄像头,带有代码的,几百块,可以截图什么的。然后修改代码,让他,定时截图,这个截图是截的全图,还是手动截取只有数字的部分。然后识别。加油。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值