注意:服务器要安装media feature pack(服务器端安装桌面体验功能),否则会失败
-
vs中创建一个Web项目,项目的.net版本>=4.0
-
使用nuget添加EmguCV,右键项目


-
在web项目的bin目录下创建文件夹tessdata,打开github链接https://github.com/tesseract-ocr/tessdata,下载"eng.traineddata"文件到tessdata目录下。
-
将bin文件夹中x86文件夹内容复制到bin目录下
-
创建一个WebService用于测试Tesseract能否成功使用
[WebMethod]
public string OcrEngineDemo()
{
// ReSharper disable once TooWideLocalVariableScope
// ReSharper disable once RedundantAssignment
string info = "没有图片识别引擎";
using (Tesseract tesseract = new Tesseract(HttpContext.Current.Server.MapPath("./bin/tessdata"),"eng",OcrEngineMode.Default))
{
info = tesseract.ToString();
return info;
}
}
6.在解决方案下选择Web项目,右键该WebService,选择在浏览器中查看,调用测试方法可以知道是否部署成功 7.图片识别使用:在客户端使用时将图片转换为二进制数据,然后调用WebService传入这些二进制数据,在服务器端将数据还原为图片调用TesseractOCR进行识别。
Tips:图片识别代码
public class TesseractConfig
{
public const string tessdata = "./bin/tessdata";
public const string language = "eng";
public const OcrEngineMode mode = OcrEngineMode.Default;
}
public class ImageRecognizer
{
/// <summary>
/// 识别图片
/// </summary>
/// <param name="tesseract">ocr</param>
/// <param name="bitmap">被识别的图片</param>
/// <returns>识别失败返回"-",成功返回识别内容</returns>
private string recognizeImg(Tesseract tesseract, Bitmap bitmap)
{
using (Image<Bgr, byte> imageSource = new Image<Bgr, byte>(bitmap))
using (Image<Gray, byte> grayImg = imageSource.Convert<Gray, Byte>())
using (Image<Gray,byte> binaryImg= grayImg.ThresholdBinary(new Gray(100), new Gray(255)))
{
tesseract.SetImage(binaryImg);
int flag = tesseract.Recognize();
grayImg.Dispose();
imageSource.Dispose();
return flag == 0 ? tesseract.GetUTF8Text() : "-";
}
}
/// <summary>
/// 识别多张图片
/// </summary>
/// <param name="bitmaps"></param>
/// <returns>返回识别结果列表</returns>
public List<string> recognizeImgs(List<Bitmap> bitmaps)
{
List<string> list=new List<string>();
using (Tesseract tesseract = new Tesseract(HttpContext.Current.Server.MapPath(TesseractConfig.tessdata), TesseractConfig.language, TesseractConfig.mode))
{
foreach (Bitmap bitmap in bitmaps)
{
list.Add(recognizeImg(tesseract, bitmap));
}
}
return list;
}
/// <summary>
/// 识别一张图片
/// </summary>
/// <param name="bitmap"></param>
/// <returns></returns>
public string recognizeImg(Bitmap bitmap)
{
using (Tesseract tesseract = new Tesseract(HttpContext.Current.Server.MapPath(TesseractConfig.tessdata), TesseractConfig.language, TesseractConfig.mode))
{
return recognizeImg(tesseract, bitmap);
}
}
/// <summary>
/// 将二进制数组转换为图片
/// </summary>
/// <param name="bytes"></param>
/// <returns></returns>
public Bitmap bytesToBitmap(byte[] bytes)
{
using (MemoryStream stream = new MemoryStream(bytes))
{
IFormatter formatter = new BinaryFormatter();
return (Bitmap)formatter.Deserialize(stream);
}
}
}
web