sunpengfei
昨天 22f443f24ea48e8bf3940d0432f00edbb0a86c2f
FlexJobApi.Core/Utils/BaiduUtils/BaiduOcrUtils.cs
@@ -42,7 +42,7 @@
            }
            else
            {
                var upload = AliyunOSSUtils.Upload(scene, url);
                var upload = AliyunOSSUtils.Upload(scene, url, null);
                url = upload.Url;
                value = ocr.BusinessLicense(upload.Buffer);
            }
@@ -54,25 +54,25 @@
            }
            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,
                EnterpriseName = result.WordsResult.GetWords("单位名称"),
                SocietyCreditCode = result.WordsResult.GetWords("社会信用代码"),
                LegalPerson = result.WordsResult.GetWords("法人"),
                EnterpriseType = result.WordsResult.GetWords("类型"),
                RegisteredCapital = result.WordsResult.GetWords("注册资本"),
                EstablishmentDate = result.WordsResult.GetWords("成立日期"),
                Address = result.WordsResult.GetWords("地址"),
                MainBusiness = result.WordsResult.GetWords("经营范围"),
            };
            return result;
        }
        /// <summary>
        /// 营业执照OCR
        /// 身份证正面OCR
        /// </summary>
        /// <param name="url"></param>
        /// <param name="scene"></param>
        /// <param name="isOssUrl"></param>
        public static async Task<BaiduOcrIdentityResultModel> OcrIdentity(this string url, string scene = null, bool isOssUrl = true)
        public static async Task<BaiduOcrIdentityFrontResult> OcrIdentityFront(this string url, string scene = null, bool isOssUrl = true)
        {
            var options = App.GetOptions<BaiduOptions>();
            var ocr = new Ocr(options.Ocr.Key, options.Ocr.Secret);
@@ -82,33 +82,76 @@
            {
                var downloadUrl = AliyunOSSUtils.GetUrl(url);
                var buffer = await App.GetRequiredService<IHttpRemoteService>().GetAsByteArrayAsync(downloadUrl);
                value = ocr.Idcard(buffer, "1");
                value = ocr.Idcard(buffer, "front");
            }
            else
            {
                var upload = AliyunOSSUtils.Upload(scene, url);
                var upload = AliyunOSSUtils.Upload(scene, url, null);
                url = upload.Url;
                //value = ocr.Idcard(upload.Buffer);
                value = ocr.Idcard(upload.Buffer, "front");
            }
            //var result = value.ToObject<BaiduOcrIdentityResult>();
            //result.Url = url;
            //if (result.ErrorCode.IsNotNull())
            //{
            //    return result;
            //}
            //result.Model = new BaiduOcrIdentityResultModel
            //{
            //    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;
            throw new Exception();
            var result = value.ToObject<BaiduOcrIdentityFrontResult>();
            result.Url = url;
            if (result.ErrorCode.IsNotNull())
            {
                return result;
            }
            result.Model = new BaiduOcrIdentityFrontResultModel
            {
                Address = result.WordsResult.GetWords("住址"),
                Identity = result.WordsResult.GetWords("公民身份号码"),
                BirthdayText = result.WordsResult.GetWords("出生"),
                Name = result.WordsResult.GetWords("姓名"),
                GenderText = result.WordsResult.GetWords("性别"),
                Nation = result.WordsResult.GetWords("民族"),
            };
            return result;
        }
        /// <summary>
        /// 身份证背面OCR
        /// </summary>
        /// <param name="url"></param>
        /// <param name="scene"></param>
        /// <param name="isOssUrl"></param>
        public static async Task<BaiduOcrIdentityBackResult> OcrIdentityBack(this string url, string scene = null, bool isOssUrl = true)
        {
            var options = App.GetOptions<BaiduOptions>();
            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<IHttpRemoteService>().GetAsByteArrayAsync(downloadUrl);
                value = ocr.Idcard(buffer, "back");
            }
            else
            {
                var upload = AliyunOSSUtils.Upload(scene, url, null);
                url = upload.Url;
                value = ocr.Idcard(upload.Buffer, "back");
            }
            var result = value.ToObject<BaiduOcrIdentityBackResult>();
            result.Url = url;
            if (result.ErrorCode.IsNotNull())
            {
                return result;
            }
            result.Model = new BaiduOcrIdentityBackResultModel
            {
                ExpiryDateText = result.WordsResult.GetWords("失效日期"),
                IssueAuthority = result.WordsResult.GetWords("签发机关"),
                IssueDateText = result.WordsResult.GetWords("签发日期"),
            };
            return result;
        }
        public static string GetWords(this Dictionary<string, BaiduOcrResultWord> result, string name)
        {
            return result.ContainsKey(name) ? result[name].Words : null;
        }
    }
}