TencentOCRTools.cs 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. using OASystem.Domain.Dtos.Tencent;
  2. using TencentCloud.Common;
  3. using TencentCloud.Ocr.V20181119.Models;
  4. using TencentCloud.Ocr.V20181119;
  5. namespace OASystem.API.OAMethodLib.TencentCloudAPI
  6. {
  7. /// <summary>
  8. /// 腾讯OCR Tools
  9. /// </summary>
  10. public static class TencentOCRTools
  11. {
  12. /// <summary>
  13. /// 初始化 腾讯云账户密钥对 SecretId,SecretKey
  14. /// </summary>
  15. static Credential cred = new Credential
  16. {
  17. SecretId = "AKIDoQUHLBELagatzoScfdMpMddMnz8apqIc",
  18. SecretKey = "hKiGbhkX5NWWXu3zDWwAATVK3e5sWuBB"
  19. };
  20. /// <summary>
  21. /// ocr识别
  22. /// </summary>
  23. /// <param name="ocrEnum">转换类型</param>
  24. /// <param name="data">请求数据源</param>
  25. /// <returns></returns>
  26. public static Result GetOCR(int ocrEnum, object data)
  27. {
  28. Result result = new Result { Code = -1, Msg = "未知错误", Data = null };
  29. OcrClient client = new OcrClient(cred, "ap-guangzhou");
  30. try
  31. {
  32. switch (ocrEnum)
  33. {
  34. case 0: //身份证识别
  35. IDCardOCRDto iDCardDto = (IDCardOCRDto)data;
  36. IDCardOCRRequest req = new IDCardOCRRequest();
  37. if (iDCardDto.CardSide == 0) req.CardSide = "FRONT";
  38. else if (iDCardDto.CardSide == 1) req.CardSide = "BACK";
  39. req.ImageBase64 = iDCardDto.picBase64;
  40. IDCardOCRResponse resp = client.IDCardOCRSync(req);
  41. result.Data = resp;
  42. break;
  43. case 1: //户口本识别
  44. ResidenceBookletOCRDto rbOCR = (ResidenceBookletOCRDto)data;
  45. ResidenceBookletOCRRequest rbReq = new ResidenceBookletOCRRequest();
  46. rbReq.ImageBase64 = rbOCR.picBase64;
  47. ResidenceBookletOCRResponse rbRep = client.ResidenceBookletOCRSync(rbReq);
  48. result.Data = rbRep;
  49. break;
  50. case 2: //营业执照识别 OrgCodeCert
  51. BizLicenseOCRDto blOCR = (BizLicenseOCRDto)data;
  52. BizLicenseOCRRequest blReq = new BizLicenseOCRRequest();
  53. blReq.ImageBase64 = blOCR.picBase64;
  54. BizLicenseOCRResponse blRep = client.BizLicenseOCRSync(blReq);
  55. result.Data = blRep;
  56. break;
  57. case 3: //组织机构代码证识别
  58. OrgCodeCertOCRDto occOCR = (OrgCodeCertOCRDto)data;
  59. OrgCodeCertOCRRequest ocReq = new OrgCodeCertOCRRequest();
  60. ocReq.ImageBase64 = occOCR.picBase64;
  61. OrgCodeCertOCRResponse occReq = client.OrgCodeCertOCRSync(ocReq);
  62. result.Data = occReq;
  63. break;
  64. case 4: //行驶证识别
  65. VehicleLicenseOCRDto vlOCR = (VehicleLicenseOCRDto)data;
  66. VehicleLicenseOCRRequest vlReq = new VehicleLicenseOCRRequest();
  67. if (vlOCR.CardSide == 0) vlReq.CardSide = "FRONT";
  68. else if (vlOCR.CardSide == 1) vlReq.CardSide = "BACK";
  69. else if (vlOCR.CardSide == 2) vlReq.CardSide = "DOUBLE";
  70. vlReq.ImageBase64 = vlOCR.picBase64;
  71. VehicleLicenseOCRResponse vlRep = client.VehicleLicenseOCRSync(vlReq);
  72. result.Data = vlRep;
  73. break;
  74. case 5: //房产证识别 通用文字识别
  75. PropOwnerCertOCRDto pocOCR = (PropOwnerCertOCRDto)data;
  76. PropOwnerCertOCRRequest pocReq = new PropOwnerCertOCRRequest();
  77. pocReq.ImageBase64 = pocOCR.picBase64;
  78. PropOwnerCertOCRResponse pocRep = client.PropOwnerCertOCRSync(pocReq);
  79. result.Data = pocRep;
  80. break;
  81. case 6: // 通用文字识别
  82. GeneralBasicOCRDto gbOCR = (GeneralBasicOCRDto)data;
  83. GeneralBasicOCRRequest gbReq = new GeneralBasicOCRRequest();
  84. gbReq.ImageBase64 = gbOCR.picBase64;
  85. GeneralBasicOCRResponse gbRep = client.GeneralBasicOCRSync(gbReq);
  86. result.Data = gbRep;
  87. break;
  88. case 7: // 护照识别(中国大陆地区护照)
  89. PassportOCRDto pOCR = (PassportOCRDto)data;
  90. PassportOCRRequest pReq = new PassportOCRRequest();
  91. pReq.ImageBase64 = pOCR.picBase64;
  92. PassportOCRResponse pRep = client.PassportOCRSync(pReq);
  93. result.Data = pRep;
  94. break;
  95. case 8: // 护照识别(港澳台地区及境外护照)
  96. MLIDPassportOCRDto mlidpOCR = (MLIDPassportOCRDto)data;
  97. MLIDPassportOCRRequest mlidpReq = new MLIDPassportOCRRequest();
  98. mlidpReq.ImageBase64 = mlidpOCR.picBase64;
  99. MLIDPassportOCRResponse mlidpRep = client.MLIDPassportOCRSync(mlidpReq);
  100. result.Data = mlidpRep;
  101. break;
  102. case 9: // 护照识别(港澳台地区及境外护照)
  103. BusinessCardOCRDto bcOCR = (BusinessCardOCRDto)data;
  104. BusinessCardOCRRequest bcReq = new BusinessCardOCRRequest();
  105. bcReq.ImageBase64 = bcOCR.picBase64;
  106. BusinessCardOCRResponse bcRep = client.BusinessCardOCRSync(bcReq);
  107. result.Data = bcRep;
  108. break;
  109. }
  110. result.Code = 0;
  111. result.Msg = "成功";
  112. return result;
  113. }
  114. catch (Exception ex)
  115. {
  116. result.Msg = "TencentOCRAPIError:" + ex.Message;
  117. return result;
  118. }
  119. }
  120. /// <summary>
  121. /// 图片转Base64
  122. /// </summary>
  123. /// <param name="ImageFileName">图片的完整路径</param>
  124. /// <returns></returns>
  125. public static string ImgToBase64(string ImageFileName)
  126. {
  127. try
  128. {
  129. Bitmap bmp = new Bitmap(ImageFileName);
  130. MemoryStream ms = new MemoryStream();
  131. bmp.Save(ms, ImageFormat.Jpeg);
  132. byte[] arr = new byte[ms.Length];
  133. ms.Position = 0;
  134. ms.Read(arr, 0, (int)ms.Length);
  135. ms.Close();
  136. return Convert.ToBase64String(arr);
  137. }
  138. catch (Exception e)
  139. {
  140. return e.Message.ToString();
  141. }
  142. }
  143. /// <summary>
  144. /// TencentOCR图片类型处理
  145. /// PNG、JPG、JPEG、BMP
  146. /// </summary>
  147. /// <param name="type"></param>
  148. /// <returns></returns>
  149. public static bool ImageType(string type)
  150. {
  151. if (type.ToLower() == "png" || type.ToLower() == "jpg" || type.ToLower() == "jpeg" || type.ToLower() == "bmp")
  152. return true;
  153. return false;
  154. }
  155. private const double KBCount = 1024;
  156. private const double MBCount = KBCount * 1024;
  157. private const double GBCount = MBCount * 1024;
  158. private const double TBCount = GBCount * 1024;
  159. /// <summary>
  160. /// 得到适应的大小
  161. /// </summary>
  162. /// <param name="path"></param>
  163. /// <returns>string</returns>
  164. public static string GetAutoSizeString(double size, int roundCount)
  165. {
  166. if (KBCount > size)
  167. {
  168. return Math.Round(size, roundCount) + "B";
  169. }
  170. else if (MBCount > size)
  171. {
  172. return Math.Round(size / KBCount, roundCount) + "KB";
  173. }
  174. else if (GBCount > size)
  175. {
  176. return Math.Round(size / MBCount, roundCount) + "MB";
  177. }
  178. else if (TBCount > size)
  179. {
  180. return Math.Round(size / GBCount, roundCount) + "GB";
  181. }
  182. else
  183. {
  184. return Math.Round(size / TBCount, roundCount) + "TB";
  185. }
  186. }
  187. }
  188. }