【识别码】使用(ImageMagick+tesseract-ocr)实现图像验证码识别实例

最近在搞一个无人值守系统时,需要能自动登录,在登录时需要输入验证码,所以研究了验证码识别技术,否则我这个无人值守系统的作用就没有了。目前只测试了字母和数字的识别,准确率还是可以的,呵呵,已经够我自已用了~~,至于中文的识别可以参考我上篇文章:利用开源程序(ImageMagick+tesseract-ocr)实现图像验证码识别

验证码识别率如下图:(准确率还可以吧)

好吧,切入正题,赶快上架源码吧~~,不足之处请多多包涵

注意:在使用验证码识别类之前,一、请先安装好ImageMagick,二、需要下载tesseract-2.04.exe.tar.gz和 tesseract-2.00.eng.tar.gz,并解压内容到tesseract目录中,之后拷备tesseract目录至应用程序下(debug 目录下)

一、图片识别,验证识别类

[csharp] view plaincopy

  1. /// <summary>
  2. /// 图片识别,验证识别
  3. /// </summary>
  4. public class Identify
  5. {
  6. /// <summary>
  7. /// 功能描述:静态成员 识别数字、字母,验证码等图片上的内容
  8. /// </summary>
  9. /// <param name="img_path">待识别内容的图片</param>
  10. /// <param name="save_dir">识别内容保存目录</param>
  11. /// <param name="scale">放大处理比率(建议值范围:100~1000)-(参数:提高识别成功率)</param>
  12. /// <returns></returns>
  13. public static string StartIdentifyingCaptcha(string img_path, string save_dir,int scale)
  14. {
  15. return StartIdentifyingCaptcha(img_path, save_dir, 4, 0, scale);
  16. }
  17. /// <summary>
  18. /// 功能描述:静态成员 识别数字、字母,验证码等图片上的内容
  19. /// </summary>
  20. /// <param name="img_path">待识别内容的图片</param>
  21. /// <param name="save_dir">识别内容保存目录</param>
  22. /// <param name="content_type">内容分类(0:纯数字 1:纯字母 2:数字与字母混合 3:纯汉字,4、中英文混合)-(参数:提高识别成功率)</param>
  23. /// <param name="content_length">内容长度(参数:提高识别成功率)</param>
  24. /// <param name="scale">放大处理比率(建议值范围:100~1000)-(参数:提高识别成功率)</param>
  25. /// <returns></returns>
  26. public static string StartIdentifyingCaptcha(string img_path, string save_dir, byte content_type, int content_length, int scale)
  27. {
  28. string captcha = "";            // 识别的验证码
  29. //int captcha_length = 6;         // 验证码长度(参数:提高识别成功率)
  30. //int scale = 730;                // 放大处理比率(参数:提高识别成功率)
  31. do
  32. {
  33. // 识别验证码(一、安装ImageMagick,二、拷备tesseract目录至应用程序下)
  34. Common.StartProcess("cmd.exe", new string[] { "cd tesseract" ,
  35. // 输换图片
  36. String.Format(@"convert.exe -compress none -depth 8 -alpha off -scale {0}% -colorspace gray {1} {2}\captcha.tif",scale,img_path,save_dir),
  37. // 识别图片
  38. String.Format(@"tesseract.exe {0}\captcha.tif {0}\result",save_dir),
  39. "exit"});
  40. // 读取识别的验证码
  41. StreamReader reader = new StreamReader(String.Format(@"{0}\result.txt", save_dir));
  42. captcha = reader.ReadLine().Trim();
  43. reader.Close();
  44. // 匹配规则
  45. string pattern = "";
  46. // 纯数字
  47. if (content_type == 0)
  48. {
  49. pattern = (content_length > 0) ? "^[0-9]{" + content_length + "}$" : "^[0-9]+$";
  50. }
  51. // 纯字母
  52. else if (content_type == 1)
  53. {
  54. pattern = (content_length > 0) ? "^[a-zA-Z]{" + content_length + "}$" : "^[a-zA-Z]+$";
  55. }
  56. // 数字与字母混合
  57. else if (content_type == 2)
  58. {
  59. pattern = (content_length > 0) ? "^[a-zA-Z0-9]{" + content_length + "}$" : "^[a-zA-Z0-9]+$";
  60. }
  61. // 纯汉字
  62. else if (content_type == 3)
  63. {
  64. pattern = (content_length > 0) ? "^[\u4e00-\u9fa5]{" + content_length + "}$" : "^[\u4e00-\u9fa5]+$";
  65. }
  66. // 中英文混合
  67. else
  68. {
  69. pattern = (content_length > 0) ? "^[A-Za-z0-9\u4e00-\u9fa5]{" + content_length + "}$" : "^[A-Za-z0-9\u4e00-\u9fa5]+$";
  70. }
  71. // 识别失败,调整放大比率重新识别
  72. if (pattern != "" && !Regex.IsMatch(captcha, pattern))
  73. {
  74. captcha = "";
  75. scale++;
  76. }
  77. // 放大比率为9倍时,仍无法识别,认为识别失败,退出识别
  78. if (scale > 900)
  79. {
  80. captcha = "";
  81. break;
  82. }
  83. } while (captcha == "");
  84. return captcha;
  85. }
  86. }

二、C#中执行命令行命令的函数

[csharp] view plaincopy

    1. public class Common
    2. {
    3. #region 功能描述:静态成员 C#里运行命令行里的命令
    4. /// <summary>
    5. /// 功能描述:静态成员 C#里运行命令行里的命令
    6. /// </summary>
    7. /// <param name="startFileName">要启动的应用程序</param>
    8. /// <param name="commands">命令行数组</param>
    9. /// <returns></returns>
    10. public static string StartProcess(string startFileName, string[] commands)
    11. {
    12. //实例一个Process类,启动一个独立进程
    13. Process p = new Process();
    14. //Process类有一个StartInfo属性,这个是ProcessStartInfo类,包括了一些属性和方法,
    15. //下面我们用到了他的几个属性:
    16. //设定程序名
    17. p.StartInfo.FileName = startFileName;
    18. //关闭Shell的使用
    19. p.StartInfo.UseShellExecute = false;
    20. //重定向标准输入
    21. p.StartInfo.RedirectStandardInput = true;
    22. //重定向标准输出
    23. p.StartInfo.RedirectStandardOutput = true;
    24. //重定向错误输出
    25. p.StartInfo.RedirectStandardError = true;
    26. //设置不显示窗口
    27. p.StartInfo.CreateNoWindow = true;
    28. //上面几个属性的设置是比较关键的一步。
    29. //既然都设置好了那就启动进程吧
    30. p.Start();
    31. //输入要执行的命令
    32. foreach (string command in commands)
    33. {
    34. p.StandardInput.WriteLine(command);
    35. }
    36. //从输出流获取命令执行结果
    37. return p.StandardOutput.ReadToEnd();
    38. }
    39. #endregion
    40. }

【识别码】使用(ImageMagick+tesseract-ocr)实现图像验证码识别实例

时间: 2024-11-04 18:37:29

【识别码】使用(ImageMagick+tesseract-ocr)实现图像验证码识别实例的相关文章

利用开源程序(ImageMagick+tesseract-ocr)实现图像验证码识别

利用开源程序(ImageMagick+tesseract-ocr)实现图像验证码识别 分类: 开放项目2012-07-23 17:28 6712人阅读 评论(0) 收藏 举报 tiffimagecompression引擎pascalcharacter --------------------------------------------------低调的分割线--------------------------------------------------- Linux下有两个重要的编程准则

【验证码】使用Tesseract实现简单的验证码识别

1.Tesseract介绍: Tesseract的OCR引擎最先由HP实验室于 1985年开始研发,至1995年时已经成为OCR业内最准确的三款识别引擎之一.然而,HP不久便决定放弃OCR业务,Tesseract也从此尘封. 数年以后,HP意识到,与其将Tesseract束之高阁,不如贡献给开源软件业,让其重焕新生--2005年,Tesseract由美国内华达州信息技 术研究所获得,并求诸于Google对Tesseract进行改进.消除Bug.优化工作. 2.下载 Tesseract: http

验证码识别之w3cschool字符图片验证码(easy级别)

起因: 最近在练习解析验证码,看到了这个网站的验证码比较简单,于是就拿来解析一下攒攒经验值,并无任何冒犯之意... 验证码所在网页: https://www.w3cschool.cn/checkmphone?type=findpwd 验证码地址: https://www.w3cschool.cn/scode 1. 分析规律 打开这个页面: https://www.w3cschool.cn/scode,不断的按F5刷新观察,可以发现,虽然每次字符内容.位置会变化,但是字体的样式是一直不变的,对于这

Python下Tesseract Ocr引擎及安装介绍

1.Tesseract介绍 tesseract 是一个google支持的开源ocr项目,其项目地址:https://github.com/tesseract-ocr/tesseract,目前最新的源码可以在这里下载. 实际使用tesseract ocr也有两种方式:1- 动态库方式 libtesseract  2  - 执行程序方式 tesseract.exe 由于本人也是python菜鸟一个,所以方式1暂时不会,只好采取方式2. 2.Tesseract安装包下载 Tesseract的relea

利用jTessBoxEditor工具进行Tesseract3.02.02样本训练,提高验证码识别率,tesseract训练样本

http://www.bkjia.com/Pythonjc/1131343.html 利用jTessBoxEditor工具进行Tesseract3.02.02样本训练,提高验证码识别率,tesseract训练样本 1.背景 前文已经简要介绍tesseract ocr引擎的安装及基本使用,其中提到使用-l eng参数来限定语言库,可以提高识别准确率及识别效率. 本文将针对某个网站的验证码进行样本训练,形成自己的语言库,来提高验证码识别率. 2.准备工具 tesseract样本训练有一个官方流程说明

零OCR基础6行代码实现C#验证码识别

这两天因为工作需要,要到某个网站采集信息,一是要模拟登陆,二是要破解验证码,本想用第三方付费打码,但是想想网上免费的代码也挺多的,于是乎准备从网上撸点代码下来,谁知道,撸了好多个都不行,本人以前也没接触过这方面的,代码无从下手,最后不知道在哪个兄台博客找到一个国外的第三方开源OCR,说是强大的谷歌公司做维护,C++开发的,有.NET封装的链接库,甚好! 项目地址:https://github.com/tesseract-ocr/tesseract语言库:https://github.com/te

验证码识别 Tesseract的简单使用和总结

Tesseract是什么 OCR即光学字符识别,是指通过电子设备扫描纸上的打印的字符,然后翻译成计算机文字的过程.也就是说通过输入图片,经过识别引擎,去识别图片上的文字.Tesseract是一种适用于各种操作系统的光学字符识别引擎,最早是hp公司的软件,2005年开源,2006年后由google一直赞助Tesseract开发和维护.2006年,Tesseract被认为是当时最准确的开源OCR引擎之一 . 验证码识别类型 这里讨论一般的验证码识别,即英文.数字.或者英文和数字的混合的验证码,不包括

Tesseract——OCR图像识别 入门篇

今天来给大家分一下一下自己觉得还是挺不错的jar包下载网址,it-tidalwave-semantic-aux-1.0.13.jar,作为java开发者可能时时刻刻都在跟jar包打交道,即使这会用不上,大家也都记录一下,以便于以后能够用得着,这个网站叫59biye网也是我找了好久才找到看了一下上面有几十万个jar包可供大家下载,今天跟大家一起分享一下,希望对大家有所帮助.Tesseract--OCR图像识别 入门篇

Tesseract OCR集成Android Studio实现OCR识别

Tesseract OCR集成Android Studio实现OCR识别 介绍 Tesseract OCR谷歌开源的OCR识别引擎,支持多国文字包括中文简体与繁体.最新的版本是3.x.可以通过安装程序安装在机器上然后通过命令行运行该程序识别各种图片中的文字.同时还提供二次开发包,支持二次开发包括C.C++语言.也可以被移植到Android平台实现移动应用领域的OCR识别APP. 下载 在Android平台上使用Tesseract OCR首先要下载Tess2工程,它是专门针对Android平台编译