C#调用开源图像识别类库tessnet2
首先下载tessnet2_32.dll及相关语言包,将dll加入引用
- private tessnet2.Tesseract ocr = new tessnet2.Tesseract();//声明一个OCR类
- //程序开始的时候,初始化OCR
- ocr.SetVariable("tessedit_char_whitelist", "0123456789."); //设置识别变量,当前只能识别数字。
- ocr.Init(@"D:\tessdata", "eng", false); //应用当前语言包。注,Tessnet2是支持多国语的。语言包下载链接:http://code.google.com/p/tesseract-ocr/downloads/list
- //下边这个函数是将网络上的图片识别成字符串,传入图片的超链接,输出字符串
- public string Bmp2Str(string bmpurl)
- {
- //http://www.newwhy.com/2010/0910/13708.html
- string s = "0";
- WebClient wc = new WebClient();
- try
- {
- byte[] oimg = wc.DownloadData(bmpurl);//将要识别的图像下载下来
- MemoryStream ms = new MemoryStream(oimg);
- Bitmap image = new Bitmap(ms);
- //为了提高识别率,所以对图片进行简单的处理
- image = BlackAndWhite(image, 0.8);//黑白处理,这个函数看下边
- image = new Bitmap(image, image.Width * 3, image.Height * 3);//放大三倍
- Monitor.Enter(this);//因为是多线程,所以用到了Monitor。
- System.Collections.Generic.List<tessnet2.Word> result = ocr.DoOCR(image, Rectangle.Empty);//执行识别操作
- foreach (tessnet2.Word word in result) //遍历识别结果。
- s = s + word.Text;
- Monitor.Exit(this);
- if (s.Length > 2)
- s = s.Substring(2, s.Length - 2);
- }
- catch
- {
- s = "0";
- }
- finally
- {
- wc.Dispose();
- }
- return s;
- //Console.WriteLine("{0} : {1}", word.Confidence, word.Text);
- }
- //黑白处理的函数,网上查的。
- public static Bitmap BlackAndWhite(Bitmap bitmap, Double hsb)
- {
- if (bitmap == null)
- {
- return null;
- }
- int width = bitmap.Width;
- int height = bitmap.Height;
- try
- {
- Bitmap bmpReturn = new Bitmap(width, height, PixelFormat.Format1bppIndexed);
- BitmapData srcBits = bitmap.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
- BitmapData targetBits = bmpReturn.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadWrite, PixelFormat.Format1bppIndexed);
- unsafe
- {
- byte* pSrcBits = (byte*)srcBits.Scan0.ToPointer();
- for (int h = 0; h < height; h++)
- {
- byte[] scan = new byte[(width + 7) / 8];
- for (int w = 0; w < width; w++)
- {
- int r, g, b;
- r = pSrcBits[2];
- g = pSrcBits[1];
- b = pSrcBits[0];
- if (GetBrightness(r, g, b) >= hsb) scan[w / 8] |= (byte)(0x80 >> (w % 8));
- pSrcBits += 3;
- }
- Marshal.Copy(scan, 0, (IntPtr)((int)targetBits.Scan0 + targetBits.Stride * h), scan.Length);
- pSrcBits += srcBits.Stride - width * 3;
- }
- bmpReturn.UnlockBits(targetBits);
- bitmap.UnlockBits(srcBits);
- return bmpReturn;
- }
- }
- catch
- {
- return null;
- }
- }
找到了
private static float GetBrightness(int r, int g, int b)
{
float fR = ((float)r) / 255f;
float fG = ((float)g) / 255f;
float fB = ((float)b) / 255f;
float fMax = fR;
float fMin = fR;
fMax = (fG > fMax) ? fG : fMax;
fMax = (fB > fMax) ? fB : fMax;
fMin = (fG < fMax) ? fG : fMax;
fMin = (fB < fMax) ? fB : fMax;
return ((fMax + fMin) / 2f);
}
C#调用开源图像识别类库tessnet2的更多相关文章
- [转]非常实用的15款开源PHP类库
源文件:http://www.csdn.net/article/2013-10-09/2817123-PHP-Libraries 英文原文:https://codegeekz.com/useful-p ...
- 15款开源PHP类库
PHP库给开发者提供了一个标准接口,它帮助开发者在PHP里充分利用面向对象编程.这些库为特定类型的内置功能提供了一个标准的API,允许类可以与PHP引擎进行无缝的交互.此外,开发者使用这些类库还可以简 ...
- 非常实用的15款开源PHP类库
PHP库给开发者提供了一个标准接口,它帮助开发者在PHP里充分利用面向对象编程.这些库为特定类型的内置功能提供了一个标准的API,允许类可以与PHP引擎进行无缝的交互.此外,开发者使用这些类库还可以简 ...
- 不错的开源FTP类库
socket开源ftp类库代码:http://netftp.codeplex.com/ 需要注意事项,如果以下代码出现乱码问题,可以设置其中的Encoding属性就可以. 用法示例: using Sy ...
- PHP 支付类库, cURL开源HTTP类库
未做任何测试 支付类库地址:http://doc.yurunsoft.com/PaySDK cURL开源HTTP类库地址:http://doc.yurunsoft.com/YurunHttp/1
- 使用开源免费类库在.net中操作Excel
自从上次找到NPOI之后,根据园友提供的线索以及Google,又找到了一些开源免费的类库,所以都简单体验了一遍. 主要找到以下类库: MyXls(http://sourceforge.net/proj ...
- C++调用C#dll类库中的方法(非显性COM)
一般在网上搜C++如何调用C#的函数,出来的结果都是做成COM组件,但是这种方法dll安装麻烦,需要注册COM组件,需要管理员权限,调试麻烦,经常需要重启机器,反正有诸多不便. 然后在看<CLR ...
- DBUtils开源JDBC类库,对JDBC简单封装(作用是:简化编码工作量,同时不会影响程序的性能)
DBUtils:提高了程序的性能,编程更加简便 架包 mysql-connector-java-jar commons-dbcp-1.4jar commons-pool-1.5.5jar common ...
- C++开源跨平台类库集
在如下的库支持下,开发的系统可以很方便移植到当前大部分平台上运行而无需改动,只需在对应的平台下 用你喜欢的编译器 重新编译即可 经典的C++库 STLport-------SGI STL库的跨平台 ...
随机推荐
- 手工命令行 搭建 hadoop 和 spark 环境
环境准备:3台CentOS7,64位,Hadoop2.7需要64位Linux 192.168.20.161 192.168.20.162 192.168.20.163 三台机器分别叫host01. ...
- 启动Tomcat的小细节--MyEclipse
1.先停掉Tomcat 2.然后再Redeploy项目 3.然后再启动Tomcat. 这样的好处是 代码彻底编译
- 【Spider】使用CrawlSpider进行爬虫时,无法爬取数据,运行后很快结束,但没有报错
在学习<python爬虫开发与项目实践>的时候有一个关于CrawlSpider的例子,当我在运行时发现,没有爬取到任何数据,以下是我敲的源代码:import scrapyfrom UseS ...
- css中background-size的属性值
length 设置背景图像的高度和宽度. 第一个值设置宽度,第二个值设置高度. 如果只设置一个值,则第二个值会被设置为 "auto". percentage 以父元素的百分比来设置 ...
- racktables 后期维护
一.网站与数据库分离 vim secret.php #$pdo_dsn = 'mysql:host=localhost;dbname=racktables'; #$db_username = 'roo ...
- ios应用内嵌h5页面数据自动变色识别为手机号码的解决方法——手机号码拨号禁用IOS手机页面数字自动识别为手机号
异常如下: ios应用内嵌h5页面,本来是设置了白色的数字,两三秒之后会自动变为黑色,然后点击的时候就会弹出是否拨号的提示: 解决方法: 添加如下meta标签,即可解决: <meta name= ...
- 以太坊博弈游戏 -- FOMO3D,讽刺人性
以下资料收录自各个博客,下面给出链接. 总的来说,这是基于以太坊的“菠菜”游戏,大资金盘,亏多盈少,大家看看就好. 官网地址:http://exitscam.me/play 出现 7月16日,当时这个 ...
- Python词云(词频统计,掩膜显示)
Python2.7 anaconda.安装Wordcloud,网上有许多下载路径,说一下掩模,就是在这个膜的区域才会有东西,当然这个与实际的掩模还有一定区别,这个词频显示是把所有统计的词,显示在这个掩 ...
- 如何在比较1.5 len的次数下,找到整型数组最大最小值
2016-11-11 #include <iostream> #include<stdlib.h> #include<stdio.h> using namespac ...
- importlib的用法
这个模块可以通过字符串导入模块 比如我们有下面的例子 需要导入的模块的代码 在test_import目录下有一个test1的py文件 name = "中国是个大傻逼" class ...