C# 图片识别(支持21种语言)

图片识别的技术到几天已经很成熟了,只是相关的资料很少,为了方便在此汇总一下(C#实现),方便需要的朋友查阅,也给自己做个记号。


图片识别的用途:很多人用它去破解网站的验证码,用于达到自动刷票或者是批量注册的目的,但我觉得它最吸引我的地方是可以让一些书写的东西,自动识别成电脑上的文字,比如说手拟的合同,修改过的书面论文或者是文档,每月的花费发票需要在电脑上录入或者是汇总信息,日记本上的文章要转移到电脑上等等,我们现在就不用再头痛把它们在电脑上敲写一遍了。

本文介绍两种比较主流和成熟的识别方式:

方式一、Asprise-OCR实现

方式二、Microsoft Office Document Imaging(Office 2007) 组件实现


方式一、Asprise-OCR的使用。

Asprise-OCR下载地址:

http://asprise.com/product/ocr/download.php?lang=csharp 

其中需要使用的3个dll是AspriseOCR.dll、DevIL.dll、ILU.dll。

需要注意的是这几个.dll是vc写的引用要在程序中用DllImport引用,关键代码:

[DllImport("AspriseOCR.dll", EntryPoint = "OCR", CallingConvention = CallingConvention.Cdecl)]

public static extern IntPtr OCR(string file, int type);

[DllImport("AspriseOCR.dll", EntryPoint = "OCRpart", CallingConvention = CallingConvention.Cdecl)]

static extern IntPtr OCRpart(string file, int type, int startX, int startY, int width, int height);

[DllImport("AspriseOCR.dll", EntryPoint = "OCRBarCodes", CallingConvention = CallingConvention.Cdecl)]

static extern IntPtr OCRBarCodes(string file, int type);

[DllImport("AspriseOCR.dll", EntryPoint = "OCRpartBarCodes", CallingConvention = CallingConvention.Cdecl)]

static extern IntPtr OCRpartBarCodes(string file, int type, int startX, int startY, int width, int height);


调用代码很简单只有一句:

MessageBox.Show(Marshal.PtrToStringAnsi(OCRpart(img_path, -1, startX, startY, width, height)));

其中img_path:为图片路径,startXstartY坐标均为0即可,widthheight图片的宽和高。


方式二、Microsoft Office Document Imaging(Office 2007) 组件实现。

在使用之前需要给大家说的是Imaging 组件的兼容性不是很好,使用win 7 office 2007的时必须打上office 2007 sp1或者sp2补丁,读取中文才行。 

sp1补丁地址(226M) 

http://download.microsoft.com/download/1/6/5/1659d607-8696-4001-8072-efaedd70dd30/office2007sp1-kb936982-fullfile-zh-cn.exe

sp2补丁地址(301 MB):

http://download.microsoft.com/download/A/3/9/A39E919E-AFA8-4128-9249-51629206C70F/office2007sp2-kb953195-fullfile-zh-cn.exe 


给项目添加组件引用,如图:

使用代码:

MODI.Document doc = new MODI.Document();

doc.Create(img_Path);

MODI.Image image;

MODI.Layout layout;

doc.OCR(MODI.MiLANGUAGES.miLANG_CHINESE_SIMPLIFIED, truetrue);  // 识别简体中文

for (int i = 0; i < doc.Images.Count; i++)

{

    image = (MODI.Image)doc.Images[i];

    layout = image.Layout;

    sb.Append(layout.Text);

}

MessageBox.Show(sb.ToString());

其中img_Path为图片路径,MODI.MiLANGUAGES为读取图片的文字类型枚举。


本文源码下载地址:http://files.cnblogs.com/stone_w/OCR.rar 






本文转自王磊的博客博客园博客,原文链接:http://www.cnblogs.com/vipstone/archive/2011/10/08/2202397.html,如需转载请自行联系原作者

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/256627.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Opencv ---像素坐标转世界坐标(已知外参)

只能求取已知外参的世界坐标平面上的世界坐标&#xff0c;具体公式如图片所示&#xff01; PS&#xff1a;字丑请谅解&#xff01;

最优化5-8章重点(考试点全)

10道题&#xff0c;每道题10分&#xff0c;5-8章大概4题左右&#xff0c;后面的章节主要考的是概念题

多对多关联映射(双向)

关联映射方面的最后一篇了&#xff0c;我觉得映射文件的编写是使用hibernate的基础&#xff0c;而关联映射又是基础的基础&#xff0c;所以这方面分的细一些&#xff0c;罗嗦一些&#xff0c;说明白就好&#xff0c;呵呵。多对多关联(双向)&#xff0c;相对单向&#xff0c;在实…

matlab常用工具箱的调用指令

转自:http://blog.sina.com.cn/s/blog_86186c970102va9g.html Matlab常用工具箱的调用命令 1. 优化工具箱​​ 用途:优化问题 调用命令:在Command Window输入“optimtool”​,其窗口如下 图1 Optimization Tool 2. 神经网络工具箱​ 用途:数据拟合、模式识别和分类…

Eclipse设置控制台日志输出位置

1、选择服务器配置 2、设置输出文件路径 转载于:https://www.cnblogs.com/Neil223/p/5759693.html

现代制造工程——第七章(轧制和锻造)

考点基于书本以及PPT的题目 一、轧制 二、锻造

Jquery_JQuery之DataTables强大的表格解决方案

1、DataTables的默认配置 $(document).ready(function() { $(‘#example’).dataTable(); } ); 示例&#xff1a;http://www.guoxk.com/html/DataTables/Zero-configuration.html 2、DataTables的一些基础属性配置 “bPaginate”: true, //翻页功能 “bLengthChange”: true, /…

matlab simulink笔记02——延迟模块delay与单位延迟模块unit delay

延迟模块 单位延迟模块 延迟模块具有复位功能,当满足复位条件时会进行复位操作,即输出的值会恢复到初始值,而单位延迟模块没有复位功能; 延迟模块的步长是可以设置的,而单位延迟模块的步长固定为1,不可以改变

局域网传输速度升级

现在很多单位都建成了企业内部局域网&#xff0c;一般的企业网络大多是使用双 绞线连接网卡的方式来进行通信的。其中双绞线通常采用的都是5类线&#xff0c;传输速率为100MB。而网卡则有一定的区别&#xff0c;很多网卡都是采取 10Mbps/100Mbmps自适应的网卡&#xff0c;即传输…

VS2010安装帮助文档出现错误

安装VS2010后的帮助文档安装出现错误:未能在指定文件夹中创建本地存储区 安装完VS2010后&#xff0c;出现错误&#xff0c;取消后 再安装MSDN 打开“Help Library 管理器 - Microsoft Help 查看器 1.0” 提示“请为本地内容选择位置” 默认的位置是在“C:\Documents and Settin…

angularjs学习曲线

angularjs学习曲线 刚开始学Augular觉得开发应用需要有相当的编程基础. 不得不说这确实是一款了不起的开发框架&#xff0c;它要求开发人员设计低耦合和可维护的应用. 使用AngularJS 的复杂度就像使用PHP&#xff0c;Ruby on Rails等等, 都需要处理依赖注入&#xff0c;路由&am…

matlab simulink笔记04——switch模块

Switch 模块 Switch模块是-.个选择开关模块,可根据判断条件选择多个输入端口中的某个进行输出。图所示为CommonlyUsedBlocks中具有3个输入端口.1个输出端口的Switch模块图标。模块的3个端口中,第1个和第3个端口为输出端口提供输出值,输出端口输出第1个输人口还是第3个输人口的值…

[Ajax]ajax学习与理解

1.新建demo.aspx页面。2.首先在该页面的后台文件demos.aspx.cs中添加引用。 using System.Web.Services;3.无参数的方法调用. 大家注意了&#xff0c;这个版本不能低于.net framework 2.0。2.0已下不支持的。后台代码&#xff1a; [WebMethod] public static string SayHel…

Tesseract入门-VS2015下调用Tesseract4.0 +win7 64位系统

本文是基于最近的OCR识别项目学习ocr开源库-tesseract的简单调用&#xff0c;不涉及其余视觉知识。 参考文献&#xff1a;http://blog.csdn.net/u012566751/article/details/54136836 参考库&#xff1a;http://download.csdn.net/download/u010554381/10044876 1.预备工作 …

matlab simulinK笔记06——代数环

★代数环 代数环,就是由于模型的输出反馈到模块或子系统的某个输入端&#xff0c;如果这个输入 是直接馈入的&#xff0c;那么二者在同一个采样点内需得到求解&#xff0c;但又互相依赖,哪一方都不 能完成求解过程&#xff0c;使得解算器无法解算导致错误产生&#xff0c;这样的…

基于python3的Opencv(一)-打开摄像头显示图像

基于Python3的Opencv学习&#xff1a; import cv2 as cv def video_demo(): #0是代表摄像头编号&#xff0c;只有一个的话默认为0capturecv.VideoCapture(0) while(True):ref,framecapture.read()cv.imshow("1",frame) #等待30ms显示图像&#xff0c;若过程中按“Esc…

.Net中的AOP系列之《方法执行前后——边界切面》

返回《.Net中的AOP》系列学习总目录 本篇目录 边界切面 PostSharp方法边界方法边界 VS 方法拦截ASP.NET HttpModule边界真实案例——检查是否为移动端用户真实案例——缓存小结本系列的源码本人已托管于Coding上&#xff1a;点击查看。 本系列的实验环境&#xff1a;VS 2013 Up…

Opencv SolvePnP调用实战

1.环境说明与应用说明 VS2015opencv3.4&#xff0c;实际应用在MFC环境中&#xff01;主要是用来做定位&#xff0c;利用平面靶标给机器人的工具快换提供定位信息 2.实际调用 CV_EXPORTS_W bool solvePnP( InputArray objectPoints, InputArray imagePoints, …

matlab simulink笔记05 —— 积分模块

1.连续积分模块&#xff1a;integrator 例子见&#xff1a;matlab simulink笔记06 —— 利用simulink求解微分方程/simulink框图与控制系统框图的区别