阿里云OCR图片转换成文字识别调用
- using Newtonsoft.Json;
- using System;
- using System.Collections.Generic;
- using System.Drawing;
- using System.Drawing.Imaging;
- using System.IO;
- using System.Linq;
- using System.Net;
- using System.Net.Security;
- using System.Security.Cryptography.X509Certificates;
- using System.Text;
- namespace Common.Utils
- {
- public static class OCRUtil
- {
- private const String Host = "https://ocrapi-document.taobao.com";
- private const String Path = "/ocrservice/document";
- private const String Method = "POST";
- private const String Appcode = "************";
- private static readonly IList<string> ImageExList = new List<string>()
- {
- ".jpg",
- ".png",
- ".bmp"
- };
- /// <summary>
- /// 确保图片可用
- /// </summary>
- /// <param name="fileName"></param>
- private static void EnsureImageCanUse(string fileName)
- {
- if (string.IsNullOrWhiteSpace(fileName))
- {
- throw new ArgumentNullException(nameof(fileName), "文件名为空");
- }
- if (!File.Exists(fileName))
- {
- throw new FileNotFoundException("文件不存在", fileName);
- }
- string ex = System.IO.Path.GetExtension(fileName);
- if (ImageExList.IndexOf(ex.ToLower()) == -)
- {
- throw new FileFormatException("图片格式需为jpg,png,bmp");
- }
- FileInfo fileInfo = new FileInfo(fileName);
- if (fileInfo.Length > * * )
- {
- throw new Exception("文件不能大于4M");
- }
- }
- /// <summary>
- /// 将图片转换为Base64字符串
- /// </summary>
- /// <param name="fileName"></param>
- /// <returns></returns>
- private static string ImageToBase64String(string fileName)
- {
- Bitmap bitmap = new Bitmap(fileName);
- string ex = System.IO.Path.GetExtension(fileName).ToLower();
- using (MemoryStream ms = new MemoryStream())
- {
- ImageFormat format;
- switch (ex)
- {
- case ".png":
- format = ImageFormat.Png;
- break;
- case ".jpg":
- format = ImageFormat.Jpeg;
- break;
- default:
- format = ImageFormat.Bmp;
- break;
- }
- bitmap.Save(ms, format);
- byte[] arr = new byte[ms.Length];
- ms.Position = ;
- ms.Read(arr, , (int)ms.Length);
- ms.Close();
- return Convert.ToBase64String(arr);
- }
- }
- /// <summary>
- /// 阿里云OCR图片转文字
- /// </summary>
- /// <param name="fileName"></param>
- /// <returns></returns>
- public static string ImageToText(string fileName)
- {
- EnsureImageCanUse(fileName);
- String querys = "";
- String bodys = "{\"img\":\"" + ImageToBase64String(fileName) + "\",\"url\":\"\",\"prob\":false}";
- String url = Host + Path;
- HttpWebRequest httpRequest = null;
- HttpWebResponse httpResponse = null;
- if ( < querys.Length)
- {
- url = url + "?" + querys;
- }
- if (Host.Contains("https://"))
- {
- ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
- httpRequest = (HttpWebRequest)WebRequest.CreateDefault(new Uri(url));
- }
- else
- {
- httpRequest = (HttpWebRequest)WebRequest.Create(url);
- }
- httpRequest.Method = Method;
- httpRequest.Headers.Add("Authorization", "APPCODE " + Appcode);
- //根据API的要求,定义相对应的Content-Type
- httpRequest.ContentType = "application/json; charset=UTF-8";
- if ( < bodys.Length)
- {
- byte[] data = Encoding.UTF8.GetBytes(bodys);
- using (Stream stream = httpRequest.GetRequestStream())
- {
- stream.Write(data, , data.Length);
- }
- }
- httpResponse = (HttpWebResponse)httpRequest.GetResponse();
- if (httpResponse.StatusCode != HttpStatusCode.OK)
- {
- throw new WebException("阿里云OCR接口调用识别失败");
- }
- Stream st = httpResponse.GetResponseStream();
- StreamReader reader = new StreamReader(st, Encoding.GetEncoding("utf-8"));
- string responseStr = reader.ReadToEnd();
- OcrResult ocrResult = JsonConvert.DeserializeObject<OcrResult>(responseStr);
- return OcrResultToString(ocrResult);
- }
- private static string OcrResultToString(OcrResult ocrResult)
- {
- StringBuilder sb = new StringBuilder();
- var wordList = ocrResult.prism_wordsInfo;
- foreach (var item in wordList)
- {
- int leftX = item.pos[].x;
- int blankSpaceCount = (int)Math.Floor((double)leftX / );
- if (blankSpaceCount > )
- {
- sb.Append(' ', blankSpaceCount*);
- }
- sb.AppendLine(item.word);
- }
- return sb.ToString();
- }
- public static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
- {
- return true;
- }
- }
- /// <summary>
- /// OCR识别结果
- /// </summary>
- public class OcrResult
- {
- public string sid { get; set; }
- public string prism_version { get; set; }
- public int prism_wnum { get; set; }
- public List<Prism_Wordsinfo> prism_wordsInfo { get; set; }
- public int height { get; set; }
- public int width { get; set; }
- public int orgHeight { get; set; }
- public int orgWidth { get; set; }
- }
- public class Prism_Wordsinfo
- {
- public string word { get; set; }
- public IList<Pos> pos { get; set; }
- }
- public class Pos
- {
- public int x { get; set; }
- public int y { get; set; }
- }
- }
阿里云OCR图片转换成文字识别调用的更多相关文章
- 利用百度AI OCR图片识别,Java实现PDF中的图片转换成文字
序言:我们在读一些PDF版书籍的时候,如果PDF中不是图片,做起读书笔记的还好:如果PDF中的是图片的话,根本无法编辑,做起笔记来,还是很痛苦的.我是遇到过了.我们搞技术的,当然得自己学着解决现在的痛 ...
- 使用阿里云的图片识别成表格ocr(将图片表格转换成excel)
为了简便财务总是要对照着别人发来的表格图片制作成自己的表格 图片识别 识别成表格 表格识别 ocr 使用阿里云api 购买(印刷文字识别-表格识别) https://market.aliyun.com ...
- ABBYY如何把图片转换成pdf格式
在制作工作文件的时候,有时候会遇到需要进行文件格式转换的情况,比较常见的文件格式转换就包含了Office与pdf格式之间的转换.但除此之外,图片与pdf格式也是可以进行转换的,那么图片要怎么操作,才能 ...
- 教你一招:Word中的文字转换成表格,把表格转换成文字
在使用office软件时,常常会在Word中加入表格,这时候我们一般想到的是,建立表格,然后一格一格的填写;或者用Excel表格制作在复制到Word文档中.其实在Word中就可以将文本文档转换成电子表 ...
- UI进阶 科大讯飞(1) 语音听写(语音转换成文字)
一.科大讯飞开放平台: http://www.xfyun.cn/ 注册.登录之后创建新应用. 因为本项目只实现了语音听写,所以在SDK下载中心勾选语音听写单项SDK就可以了 开发平台选择iOS,应用选 ...
- jpg、png格式的图片转换成webp后颜色失真的问题
今天简单的试用了一下 cweb.exe 将 jpg, png 格式的图片转换成 webp 格式. 我今天下载的是当前最新版:1.0.0 cwebp 3.jpg -q 85 -o 3.webp 发现图 ...
- 使用CSS将图片转换成黑白(灰色、置灰)z转
小tip: 使用CSS将图片转换成黑白(灰色.置灰) by zhangxinxu from http://www.zhangxinxu.com 本文地址:http://www.zhangxinxu.c ...
- [转]C#将image中的显示的图片转换成二进制
本文转自:http://www.cnblogs.com/shuang121/archive/2012/07/09/2582654.html .将Image图像文件存入到数据库中 我们知道数据库里的Im ...
- 小tip: 使用CSS将图片转换成模糊(毛玻璃)效果
去年盛夏之时,曾写过“小tip: 使用CSS将图片转换成黑白”一文,本文的模式以及内容其实走得是类似路线.CSS3 → SVG → IE filter → canvas. 前段时间,iOS7不是瓜未熟 ...
随机推荐
- sublime text3快速生成html时,tab键失效
sublime tab键失效
- 2.SDL规范文档
01.安全设计Checklist 输入验证 校验跨信任边界传递的不可信数据(策略检查数据合法性,含白名单机制等)格式化字符串时,依然要检验用户输入的合法性,避免可造成系统信息泄露或者拒绝服务 禁止向J ...
- ArcGIS注册数据库问题分析
本文是'猴妹'师妹授权给我来发表的,介绍都是师妹的研究成果,在此,非常感谢'猴妹'师妹. 用ArcGIS Server在发布地图服务时,注册数据库是很常见的,几年前就开始注册数据库,直到昨天,才有点顿 ...
- PostgreSQL数据库部署之 :PostgreSQL pgadmin4 the application server could not be contacted
遇到问题: 尝试了删除c:\Users\your_name\AppData\Roaming\pgAdmin 之内的删除所有文件和文件夹, 然后在C:\Program Files\PostgreSQL\ ...
- x宝23大洋包邮的老式大朝华MP3播放器简单评测
(纯兴趣测评,非广告) 最近逛X宝,看到了这个古董级MP3播放器居然还在售,于是脑抽+情怀泛滥买了一个. 然后呢,从遥远的深圳跨越好几千公里邮过来了这个玩意: 那节南孚5号电池是我自己的,是为了对比一 ...
- 使用exceljs时报错:no such file or directory
最近使用exceljs生成excel并保存时,总是失败 await workbook.xlsx.writeFile(tep) .then(function () { context.result = ...
- k.tt 研究下生成的逻辑代码:从壹开始前后端分离 [.netCore 填坑 ] 三十二║ 四种方法快速实现项目的半自动化搭建
更新 1.更新小伙伴 @大龄Giser 提出好点子:试试VS的插件扩展:VSIX.ItemProject等,将T4模板给制作插件,这里先记下,有懂的小伙伴可以自己先试试,我会在以后更新. 2.感谢小伙 ...
- 【Android Studio安装部署系列】三十六、Android studio3.2使用过程中注意事项
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 Android Studio升级到3.2之后,运行旧项目的时候出现了各种情况,特此记录下. 一.打包选项多了,一般情况下选择APK即 ...
- unity协程coroutine浅析
转载请标明出处:http://www.cnblogs.com/zblade/ 一.序言 在unity的游戏开发中,对于异步操作,有一个避免不了的操作: 协程,以前一直理解的懵懵懂懂,最近认真充电了一下 ...
- .Net Core Web Api 上传女朋友的照片到微软云Azure Storage
前言 实现一个Web Api,把女朋友照片保存到Azure云的storage里. Image Upload Api 在对应的Api Controller里,加上attribute: [Consumes ...