1. using Newtonsoft.Json;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Drawing;
  5. using System.Drawing.Imaging;
  6. using System.IO;
  7. using System.Linq;
  8. using System.Net;
  9. using System.Net.Security;
  10. using System.Security.Cryptography.X509Certificates;
  11. using System.Text;
  12.  
  13. namespace Common.Utils
  14. {
  15. public static class OCRUtil
  16. {
  17. private const String Host = "https://ocrapi-document.taobao.com";
  18. private const String Path = "/ocrservice/document";
  19. private const String Method = "POST";
  20. private const String Appcode = "************";
  21. private static readonly IList<string> ImageExList = new List<string>()
  22. {
  23. ".jpg",
  24. ".png",
  25. ".bmp"
  26. };
  27.  
  28. /// <summary>
  29. /// 确保图片可用
  30. /// </summary>
  31. /// <param name="fileName"></param>
  32. private static void EnsureImageCanUse(string fileName)
  33. {
  34. if (string.IsNullOrWhiteSpace(fileName))
  35. {
  36. throw new ArgumentNullException(nameof(fileName), "文件名为空");
  37. }
  38. if (!File.Exists(fileName))
  39. {
  40. throw new FileNotFoundException("文件不存在", fileName);
  41. }
  42. string ex = System.IO.Path.GetExtension(fileName);
  43. if (ImageExList.IndexOf(ex.ToLower()) == -)
  44. {
  45. throw new FileFormatException("图片格式需为jpg,png,bmp");
  46. }
  47. FileInfo fileInfo = new FileInfo(fileName);
  48. if (fileInfo.Length > * * )
  49. {
  50. throw new Exception("文件不能大于4M");
  51. }
  52. }
  53.  
  54. /// <summary>
  55. /// 将图片转换为Base64字符串
  56. /// </summary>
  57. /// <param name="fileName"></param>
  58. /// <returns></returns>
  59. private static string ImageToBase64String(string fileName)
  60. {
  61. Bitmap bitmap = new Bitmap(fileName);
  62. string ex = System.IO.Path.GetExtension(fileName).ToLower();
  63. using (MemoryStream ms = new MemoryStream())
  64. {
  65. ImageFormat format;
  66. switch (ex)
  67. {
  68. case ".png":
  69. format = ImageFormat.Png;
  70. break;
  71. case ".jpg":
  72. format = ImageFormat.Jpeg;
  73. break;
  74. default:
  75. format = ImageFormat.Bmp;
  76. break;
  77. }
  78. bitmap.Save(ms, format);
  79. byte[] arr = new byte[ms.Length];
  80. ms.Position = ;
  81. ms.Read(arr, , (int)ms.Length);
  82. ms.Close();
  83. return Convert.ToBase64String(arr);
  84. }
  85. }
  86.  
  87. /// <summary>
  88. /// 阿里云OCR图片转文字
  89. /// </summary>
  90. /// <param name="fileName"></param>
  91. /// <returns></returns>
  92. public static string ImageToText(string fileName)
  93. {
  94. EnsureImageCanUse(fileName);
  95.  
  96. String querys = "";
  97. String bodys = "{\"img\":\"" + ImageToBase64String(fileName) + "\",\"url\":\"\",\"prob\":false}";
  98. String url = Host + Path;
  99. HttpWebRequest httpRequest = null;
  100. HttpWebResponse httpResponse = null;
  101.  
  102. if ( < querys.Length)
  103. {
  104. url = url + "?" + querys;
  105. }
  106.  
  107. if (Host.Contains("https://"))
  108. {
  109. ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
  110. httpRequest = (HttpWebRequest)WebRequest.CreateDefault(new Uri(url));
  111. }
  112. else
  113. {
  114. httpRequest = (HttpWebRequest)WebRequest.Create(url);
  115. }
  116. httpRequest.Method = Method;
  117. httpRequest.Headers.Add("Authorization", "APPCODE " + Appcode);
  118. //根据API的要求,定义相对应的Content-Type
  119. httpRequest.ContentType = "application/json; charset=UTF-8";
  120. if ( < bodys.Length)
  121. {
  122. byte[] data = Encoding.UTF8.GetBytes(bodys);
  123. using (Stream stream = httpRequest.GetRequestStream())
  124. {
  125. stream.Write(data, , data.Length);
  126. }
  127. }
  128.  
  129. httpResponse = (HttpWebResponse)httpRequest.GetResponse();
  130. if (httpResponse.StatusCode != HttpStatusCode.OK)
  131. {
  132. throw new WebException("阿里云OCR接口调用识别失败");
  133. }
  134.  
  135. Stream st = httpResponse.GetResponseStream();
  136. StreamReader reader = new StreamReader(st, Encoding.GetEncoding("utf-8"));
  137. string responseStr = reader.ReadToEnd();
  138.  
  139. OcrResult ocrResult = JsonConvert.DeserializeObject<OcrResult>(responseStr);
  140. return OcrResultToString(ocrResult);
  141. }
  142.  
  143. private static string OcrResultToString(OcrResult ocrResult)
  144. {
  145. StringBuilder sb = new StringBuilder();
  146. var wordList = ocrResult.prism_wordsInfo;
  147. foreach (var item in wordList)
  148. {
  149. int leftX = item.pos[].x;
  150. int blankSpaceCount = (int)Math.Floor((double)leftX / );
  151. if (blankSpaceCount > )
  152. {
  153. sb.Append(' ', blankSpaceCount*);
  154. }
  155. sb.AppendLine(item.word);
  156. }
  157. return sb.ToString();
  158. }
  159.  
  160. public static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
  161. {
  162. return true;
  163. }
  164. }
  165.  
  166. /// <summary>
  167. /// OCR识别结果
  168. /// </summary>
  169. public class OcrResult
  170. {
  171. public string sid { get; set; }
  172. public string prism_version { get; set; }
  173. public int prism_wnum { get; set; }
  174. public List<Prism_Wordsinfo> prism_wordsInfo { get; set; }
  175. public int height { get; set; }
  176. public int width { get; set; }
  177. public int orgHeight { get; set; }
  178. public int orgWidth { get; set; }
  179. }
  180.  
  181. public class Prism_Wordsinfo
  182. {
  183. public string word { get; set; }
  184. public IList<Pos> pos { get; set; }
  185. }
  186.  
  187. public class Pos
  188. {
  189. public int x { get; set; }
  190. public int y { get; set; }
  191. }
  192.  
  193. }

阿里云OCR图片转换成文字识别调用的更多相关文章

  1. 利用百度AI OCR图片识别,Java实现PDF中的图片转换成文字

    序言:我们在读一些PDF版书籍的时候,如果PDF中不是图片,做起读书笔记的还好:如果PDF中的是图片的话,根本无法编辑,做起笔记来,还是很痛苦的.我是遇到过了.我们搞技术的,当然得自己学着解决现在的痛 ...

  2. 使用阿里云的图片识别成表格ocr(将图片表格转换成excel)

    为了简便财务总是要对照着别人发来的表格图片制作成自己的表格 图片识别 识别成表格 表格识别 ocr 使用阿里云api 购买(印刷文字识别-表格识别) https://market.aliyun.com ...

  3. ABBYY如何把图片转换成pdf格式

    在制作工作文件的时候,有时候会遇到需要进行文件格式转换的情况,比较常见的文件格式转换就包含了Office与pdf格式之间的转换.但除此之外,图片与pdf格式也是可以进行转换的,那么图片要怎么操作,才能 ...

  4. 教你一招:Word中的文字转换成表格,把表格转换成文字

    在使用office软件时,常常会在Word中加入表格,这时候我们一般想到的是,建立表格,然后一格一格的填写;或者用Excel表格制作在复制到Word文档中.其实在Word中就可以将文本文档转换成电子表 ...

  5. UI进阶 科大讯飞(1) 语音听写(语音转换成文字)

    一.科大讯飞开放平台: http://www.xfyun.cn/ 注册.登录之后创建新应用. 因为本项目只实现了语音听写,所以在SDK下载中心勾选语音听写单项SDK就可以了 开发平台选择iOS,应用选 ...

  6. jpg、png格式的图片转换成webp后颜色失真的问题

    今天简单的试用了一下 cweb.exe 将 jpg, png 格式的图片转换成 webp 格式. 我今天下载的是当前最新版:1.0.0 cwebp 3.jpg  -q 85 -o 3.webp 发现图 ...

  7. 使用CSS将图片转换成黑白(灰色、置灰)z转

    小tip: 使用CSS将图片转换成黑白(灰色.置灰) by zhangxinxu from http://www.zhangxinxu.com 本文地址:http://www.zhangxinxu.c ...

  8. [转]C#将image中的显示的图片转换成二进制

    本文转自:http://www.cnblogs.com/shuang121/archive/2012/07/09/2582654.html .将Image图像文件存入到数据库中 我们知道数据库里的Im ...

  9. 小tip: 使用CSS将图片转换成模糊(毛玻璃)效果

    去年盛夏之时,曾写过“小tip: 使用CSS将图片转换成黑白”一文,本文的模式以及内容其实走得是类似路线.CSS3 → SVG → IE filter → canvas. 前段时间,iOS7不是瓜未熟 ...

随机推荐

  1. sublime text3快速生成html时,tab键失效

    sublime tab键失效

  2. 2.SDL规范文档

    01.安全设计Checklist 输入验证 校验跨信任边界传递的不可信数据(策略检查数据合法性,含白名单机制等)格式化字符串时,依然要检验用户输入的合法性,避免可造成系统信息泄露或者拒绝服务 禁止向J ...

  3. ArcGIS注册数据库问题分析

    本文是'猴妹'师妹授权给我来发表的,介绍都是师妹的研究成果,在此,非常感谢'猴妹'师妹. 用ArcGIS Server在发布地图服务时,注册数据库是很常见的,几年前就开始注册数据库,直到昨天,才有点顿 ...

  4. PostgreSQL数据库部署之 :PostgreSQL pgadmin4 the application server could not be contacted

    遇到问题: 尝试了删除c:\Users\your_name\AppData\Roaming\pgAdmin 之内的删除所有文件和文件夹, 然后在C:\Program Files\PostgreSQL\ ...

  5. x宝23大洋包邮的老式大朝华MP3播放器简单评测

    (纯兴趣测评,非广告) 最近逛X宝,看到了这个古董级MP3播放器居然还在售,于是脑抽+情怀泛滥买了一个. 然后呢,从遥远的深圳跨越好几千公里邮过来了这个玩意: 那节南孚5号电池是我自己的,是为了对比一 ...

  6. 使用exceljs时报错:no such file or directory

    最近使用exceljs生成excel并保存时,总是失败 await workbook.xlsx.writeFile(tep) .then(function () { context.result = ...

  7. k.tt 研究下生成的逻辑代码:从壹开始前后端分离 [.netCore 填坑 ] 三十二║ 四种方法快速实现项目的半自动化搭建

    更新 1.更新小伙伴 @大龄Giser 提出好点子:试试VS的插件扩展:VSIX.ItemProject等,将T4模板给制作插件,这里先记下,有懂的小伙伴可以自己先试试,我会在以后更新. 2.感谢小伙 ...

  8. 【Android Studio安装部署系列】三十六、Android studio3.2使用过程中注意事项

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 Android Studio升级到3.2之后,运行旧项目的时候出现了各种情况,特此记录下. 一.打包选项多了,一般情况下选择APK即 ...

  9. unity协程coroutine浅析

    转载请标明出处:http://www.cnblogs.com/zblade/ 一.序言 在unity的游戏开发中,对于异步操作,有一个避免不了的操作: 协程,以前一直理解的懵懵懂懂,最近认真充电了一下 ...

  10. .Net Core Web Api 上传女朋友的照片到微软云Azure Storage

    前言 实现一个Web Api,把女朋友照片保存到Azure云的storage里. Image Upload Api 在对应的Api Controller里,加上attribute: [Consumes ...