using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Drawing;
using System.IO;
using System.Drawing.Imaging;
using MODI;//Microsoft Office Document Imaging
// 首先用office安装盘这个组件,默认安装office的时候是不会安装的,只要添加这个组件功能就好了安装说明:http://support.microsoft.com/kb/982760
//组件Microsoft Office Document Imaging 12.0 Type Library(office2007)
//或者Microsoft Office Document Imaging 11.0 Type Library(office2003)
//中文简体OCR引擎 http://www.microsoft.com/downloads/thankyou.aspx?familyId=dd172063-9517-41d8-82af-29c38f7437b6&displayLang=zh-hk namespace ToText
{
/// <summary>
/// Optical Character Recognition光学字符识别
/// 20140507 Geovin Du
/// 涂聚文
/// </summary>
public static class OCRGetstring
{
/// <summary>
/// 语言类型
/// </summary>
/// <returns></returns>
public static DataTable getLanguageList()
{
DataTable dt = new DataTable();
dt.Columns.Add("ID",typeof(int));
dt.Columns.Add("LanguageName", typeof(string));
dt.Columns.Add("LanguageLCID", typeof(string));
//dt.Rows.Add(1, "", 1);
dt.Rows.Add(1,"简体中文", "2052");
dt.Rows.Add(2,"繁体中文", "1028");
dt.Rows.Add(3,"英语", "9");
dt.Rows.Add(4,"捷克语", "5");
dt.Rows.Add(5,"丹麦语", "6");
dt.Rows.Add(6,"德语", "7");
dt.Rows.Add(7,"希腊语", "8");
dt.Rows.Add(8,"西班牙语", "10");
dt.Rows.Add(9,"芬兰语", "11");
dt.Rows.Add(10,"法语", "12");
dt.Rows.Add(11, "匈牙利语", "14");
dt.Rows.Add(12, "意大利语", "16");
dt.Rows.Add(13, "日语", "17");
dt.Rows.Add(14, "韩语", "18");
dt.Rows.Add(15, "荷兰语", "19");
dt.Rows.Add(16, "挪威语", "20");
dt.Rows.Add(17, "波兰语", "21");
dt.Rows.Add(18, "葡萄牙语", "22");
dt.Rows.Add(19, "俄语", "25");
dt.Rows.Add(20,"瑞典语", "29");
dt.Rows.Add(21,"土耳其语", "31");
return dt;
} /// <summary>
///
/// </summary>
/// <param name="sValue"></param>
/// <returns></returns>
private static MODI.MiLANGUAGES GetLanuageType(string sValue)
{
switch (sValue)
{
case "2052":
return MODI.MiLANGUAGES.miLANG_CHINESE_SIMPLIFIED;
case "5":
return MODI.MiLANGUAGES.miLANG_CZECH;
case "6":
return MODI.MiLANGUAGES.miLANG_DANISH;
case "7":
return MODI.MiLANGUAGES.miLANG_GERMAN;
case "8":
return MODI.MiLANGUAGES.miLANG_GREEK;
case "9":
return MODI.MiLANGUAGES.miLANG_ENGLISH;
case "10":
return MODI.MiLANGUAGES.miLANG_SPANISH;
case "11":
return MODI.MiLANGUAGES.miLANG_FINNISH;
case "12":
return MODI.MiLANGUAGES.miLANG_FRENCH;
case "14":
return MODI.MiLANGUAGES.miLANG_HUNGARIAN;
case "16":
return MODI.MiLANGUAGES.miLANG_ITALIAN;
case "17":
return MODI.MiLANGUAGES.miLANG_JAPANESE;
case "18":
return MODI.MiLANGUAGES.miLANG_KOREAN;
case "19":
return MODI.MiLANGUAGES.miLANG_DUTCH;
case "20":
return MODI.MiLANGUAGES.miLANG_NORWEGIAN;
case "21":
return MODI.MiLANGUAGES.miLANG_POLISH;
case "22":
return MODI.MiLANGUAGES.miLANG_PORTUGUESE;
case "25":
return MODI.MiLANGUAGES.miLANG_RUSSIAN;
case "29":
return MODI.MiLANGUAGES.miLANG_SWEDISH;
case "31":
return MODI.MiLANGUAGES.miLANG_TURKISH;
case "1028":
return MODI.MiLANGUAGES.miLANG_CHINESE_TRADITIONAL;
default:
return MODI.MiLANGUAGES.miLANG_ENGLISH;
}
} /// <summary>
/// Images轉換文字
/// </summary>
/// <param name="image">Image</param>
/// <param name="language">语言类型</param>
/// <returns></returns>
public static string ExtractText(this System.Drawing.Image image,string language)
{
var tmpFile = Path.GetTempFileName();
StringBuilder sb = new StringBuilder();
//string text;
try
{
var bmp = new Bitmap(Math.Max(image.Width, 1024), Math.Max(image.Height, 768));
var gfxResize = Graphics.FromImage(bmp);
gfxResize.DrawImage(image, new Rectangle(0, 0, image.Width, image.Height));
bmp.Save(tmpFile + ".bmp", ImageFormat.Bmp);
var doc = new MODI.Document();
doc.Create(tmpFile + ".bmp");
// doc.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, true, true);
doc.OCR(GetLanuageType(language), true, true); // 识别文字类型
var img = (MODI.Image)doc.Images[0];
var layout = img.Layout;
sb.Append(layout.Text);
//text = sb.ToString();// layout.Text;
}
finally
{
File.Delete(tmpFile);
File.Delete(tmpFile + ".bmp");
} return sb.ToString();// text;
}
/// <summary>
/// 来源图片文件轉換文字
/// </summary>
/// <param name="fileToOCR">file文件</param>
/// <param name="language">语言类型</param>
/// <returns></returns>
public static string getFileToOCR(string fileToOCR, string language)
{
StringBuilder sb = new StringBuilder();
if (File.Exists(fileToOCR))
{ MODI.Document md = new MODI.Document();
md.Create(fileToOCR);
md.OCR(GetLanuageType(language), true, true);
MODI.Image img;
MODI.Layout layout;
for (int i = 0; i < md.Images.Count; i++)
{
img = (MODI.Image)md.Images[i];
layout = img.Layout;
sb.Append(layout.Text);
} md.Close(false); }
else
{
sb.Append("");
}
return sb.ToString();
}
}
}

csharp:Optical Character Recognition的更多相关文章

  1. OCR (Optical Character Recognition,光学字符识别)

    OCR (Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗.亮的模式确定其形状,然后用字符识别方法将形状翻译 ...

  2. 图片OCR(Optical Character Recognition)

    目录 Photo OCR问题描述 滑动窗口(Sliding Windows) 获得大量数据和人工数据(Getting Logs of Data and Artificial Data) 瓶颈分析:需要 ...

  3. OCR(Optical Character Recognition)算法总结

    https://zhuanlan.zhihu.com/p/84815144 最全OCR资料汇总,awesome-OCR

  4. 第 38 章 OCR - Optical Character Recognition

    38.1. Tesseract 查找Tesseract安装包 $ apt-cache search Tesseract ocrodjvu - tool to perform OCR on DjVu d ...

  5. USACO 5.4 Character Recognition

    Character Recognition This problem requires you to write a program that performs character recogniti ...

  6. USACO 5.4 Character Recognition(DP)

    非常恶心的一题,卡了三个月,没什么动力做了,代码直接抄的别人的... 这题主要思路就是预处理出几个数组,再预处理出几个数组,最后DP,输出一下路径... 写起来挺非常麻烦,代码不贴了,丢人... 把U ...

  7. Go 语言相关的优秀框架,库及软件列表

    If you see a package or project here that is no longer maintained or is not a good fit, please submi ...

  8. OCR 即 光学字符识别

    OCR (Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗.亮的模式确定其形状,然后用字符识别方法将形状翻译 ...

  9. Code Project精彩系列(转)

    Code Project精彩系列(转)   Code Project精彩系列(转)   Applications Crafting a C# forms Editor From scratch htt ...

随机推荐

  1. 点击事件获得li标签内容

    通过点击事件获得li标签内容 Table of contents 随笔 随笔 <li onclick="liClick(this)">数据</li> //点 ...

  2. php 扩展 debug问题

    php安装时为debug模式 ./configure  --prefix=/usr/local/php7.1.6-debug --with-curl --with-pcre-regex --enabl ...

  3. js 正则常用方法

    定义正则: 1 var re = new RegExp(“a”); //RegExp对象.参数就是我们想要制定的规则.有一种情况必须用这种方式,下面会提到. 2 var re = /a/; // 简写 ...

  4. MYSQL ERROR 1049 (42000): Unknown database

    https://www.cnblogs.com/hedgehog105/p/10196566.html lower_case_table_names=2

  5. [转] 设置linux时间为网络时间

    [From] https://blog.csdn.net/weixin_35852328/article/details/79506453 Linux的时间分为System Clock(系统时间)和R ...

  6. python自动化 协程函数、二分查找、模块搜索

    协程函数 yiled: 把函数的执行结果封装好__iter__和__next__得到一个迭代器 与return功能类似,都可以返回值,但是return只能返回一次只 def fun(count): p ...

  7. mysql for mac 上的安装及用DataGrip连接

    ---恢复内容开始--- 1.首先下载MySQL的mac版本,地址百度就行了. 2.这个时候需要注意安装的时候,弹出来的一个类似窗口,上面有提示默认密码,但是我当时就忘记了这个默认密码,如果你记住了默 ...

  8. ptyhon技能树及其学习资源

    GUI编程 tkinter Github项目 Tkinter by example effbot 文档 tkinter的一个designer,可以像在qtdesign那样创建UI文件 pyqt5 py ...

  9. oracle12c之三 控制PDB中CPU 资源使用

      CPU资源隔离 数据库中,不同的PDB对主机CPU资源使用要求不同,那么我们就可以使用CDB resourceplans来管理不同pdb对CPU资源的使用. CDB Resource Plans ...

  10. web.py简易示例

    http://webpy.org/cookbook/index.zh-cn code.py import web urls = ( '/', 'index' ) class index: def GE ...