using Baidu.Aip.Ocr; using Furion; using Furion.DistributedIDGenerator; using Furion.FriendlyException; using Furion.HttpRemote; using Microsoft.AspNetCore.DataProtection; using Microsoft.Extensions.Options; using NetTopologySuite.Operation.Buffer; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; namespace FlexJobApi.Core { /// /// 百度文字识别工具 /// public static class BaiduOcrUtils { /// /// 营业执照OCR /// /// /// /// public static async Task OcrBusinessLicense(this string url, string scene = null, bool isOssUrl = true) { var options = App.GetOptions(); var ocr = new Ocr(options.Ocr.Key, options.Ocr.Secret); ocr.Timeout = 60000; JObject value; if (isOssUrl) { var downloadUrl = AliyunOSSUtils.GetUrl(url); var buffer = await App.GetRequiredService().GetAsByteArrayAsync(downloadUrl); value = ocr.BusinessLicense(buffer); } else { var upload = AliyunOSSUtils.Upload(scene, url); url = upload.Url; value = ocr.BusinessLicense(upload.Buffer); } var result = value.ToObject(); result.Url = url; if (result.ErrorCode.IsNotNull()) { return result; } result.Model = new BaiduOcrBusinessLicenseResultModel { EnterpriseName = result.WordsResult["单位名称"].Words, SocietyCreditCode = result.WordsResult["社会信用代码"].Words, LegalPerson = result.WordsResult["法人"].Words, EnterpriseType = result.WordsResult["类型"].Words, RegisteredCapital = result.WordsResult["注册资本"].Words, EstablishmentDate = result.WordsResult["成立日期"].Words, Address = result.WordsResult["地址"].Words, MainBusiness = result.WordsResult["经营范围"].Words, }; return result; } /// /// 身份证正面OCR /// /// /// /// public static async Task OcrIdentityFront(this string url, string scene = null, bool isOssUrl = true) { var options = App.GetOptions(); var ocr = new Ocr(options.Ocr.Key, options.Ocr.Secret); ocr.Timeout = 60000; JObject value; if (isOssUrl) { var downloadUrl = AliyunOSSUtils.GetUrl(url); var buffer = await App.GetRequiredService().GetAsByteArrayAsync(downloadUrl); value = ocr.Idcard(buffer, "front"); } else { var upload = AliyunOSSUtils.Upload(scene, url); url = upload.Url; value = ocr.Idcard(upload.Buffer, "front"); } var result = value.ToObject(); result.Url = url; if (result.ErrorCode.IsNotNull()) { return result; } result.Model = new BaiduOcrIdentityFrontResultModel { Address = result.WordsResult["住址"].Words, Identity = result.WordsResult["公民身份号码"].Words, BirthdayText = result.WordsResult["出生"].Words, Name = result.WordsResult["姓名"].Words, GenderText = result.WordsResult["性别"].Words, Nation = result.WordsResult["民族"].Words, }; return result; } /// /// 身份证背面OCR /// /// /// /// public static async Task OcrIdentityBack(this string url, string scene = null, bool isOssUrl = true) { var options = App.GetOptions(); var ocr = new Ocr(options.Ocr.Key, options.Ocr.Secret); ocr.Timeout = 60000; JObject value; if (isOssUrl) { var downloadUrl = AliyunOSSUtils.GetUrl(url); var buffer = await App.GetRequiredService().GetAsByteArrayAsync(downloadUrl); value = ocr.Idcard(buffer, "back"); } else { var upload = AliyunOSSUtils.Upload(scene, url); url = upload.Url; value = ocr.Idcard(upload.Buffer, "back"); } var result = value.ToObject(); result.Url = url; if (result.ErrorCode.IsNotNull()) { return result; } result.Model = new BaiduOcrIdentityBackResultModel { ExpiryDateText = result.WordsResult["失效日期"].Words, IssueAuthority = result.WordsResult["签发机关"].Words, IssueDateText = result.WordsResult["签发日期"].Words, }; return result; } } }