其实这个功能还是个非常简单实现的功能相对于调微信的接口来说,有时候调微信的接口让人有一种想打人的冲动,每次朋友都劝我 没办法用别人的东西你就将就点 我。。。。。。。
好吧 废话不多说 首要前提是开通百度云账号
先上文档:在文字识别的api文档里
驾驶证识别
对机动车驾驶证所有关键字段进行识别
public void DrivingLicenseDemo() {
var image = File.ReadAllBytes("图片文件路径");
// 调用驾驶证识别,可能会抛出网络等异常,请使用try/catch捕获
var result = client.DrivingLicense(image);
Console.WriteLine(result);
// 如果有可选参数
var options = new Dictionary<string, object>{
{"detect_direction", "true"}
};
// 带参数调用驾驶证识别
result = client.DrivingLicense(image, options);
Console.WriteLine(result);
}
驾驶证识别 请求参数详情
参数名称 | 是否必选 | 类型 | 可选值范围 | 默认值 | 说明 |
---|---|---|---|---|---|
image | 是 | byte[] | 二进制图像数据 | ||
detect_direction | 否 | string | true false | false | 是否检测图像朝向,默认不检测,即:false。朝向是指输入图像是正常方向、逆时针旋转90/180/270度。可选值包括: - true:检测朝向; - false:不检测朝向。 |
行驶证识别
对机动车行驶证正本所有关键字段进行识别
public void VehicleLicenseDemo() {
var image = File.ReadAllBytes("图片文件路径");
// 调用行驶证识别,可能会抛出网络等异常,请使用try/catch捕获
var result = client.VehicleLicense(image);
Console.WriteLine(result);
// 如果有可选参数
var options = new Dictionary<string, object>{
{"detect_direction", "true"},
{"accuracy", "normal"}
};
// 带参数调用行驶证识别
result = client.VehicleLicense(image, options);
Console.WriteLine(result);
}
行驶证识别 请求参数详情
参数名称 | 是否必选 | 类型 | 可选值范围 | 默认值 | 说明 |
---|---|---|---|---|---|
image | 是 | byte[] | 二进制图像数据 | ||
detect_direction | 否 | string | true false | false | 是否检测图像朝向,默认不检测,即:false。朝向是指输入图像是正常方向、逆时针旋转90/180/270度。可选值包括: - true:检测朝向; - false:不检测朝向。 |
accuracy | 否 | string | normal - 使用快速服务 | normal 使用快速服务,1200ms左右时延;缺省或其它值使用高精度服务,1600ms左右时延 |
那么就根据文档一步步来
第一步百度云需要获取接口实例:
/// <summary>
/// 获取百度云接口类实例
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
private Baidu.Aip.Ocr.Ocr GetClient(string input)
{
Baidu.Aip.Ocr.Ocr client = null;
if (!string.IsNullOrEmpty(_appConfigurationAccessor.Configuration["BaiDuAI:IsEnabled"]))
{
switch (input)
{
case "CharacterRecog":
client = new Baidu.Aip.Ocr.Ocr(_appConfigurationAccessor
.Configuration["BaiDuAI:CharacterRecog:ApiKey"], _appConfigurationAccessor.Configuration["BaiDuAI:CharacterRecog:SecretKey"]);
client.Timeout = 60000; // 修改超时时间
break;
default:
break;
}
}
return client;
}
配置里配置了百度云的apikey和SecretKey所以直接取就行了 这里的入参只是区别是驾驶证识别还是行驶证识别而已
2.图片的处理:百度只接受Base64的图片格式
/// <summary>
/// 获取图片字节
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
private byte[] GetUrlImageToBase64(Stream stream)
{
try
{
Bitmap bmp = new Bitmap(stream);
MemoryStream ms = new MemoryStream();
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] arr = new byte[ms.Length];
ms.Position = 0;
ms.Read(arr, 0, (int)ms.Length);
ms.Close();
return arr;
}
catch (Exception ex)
{
throw new UserFriendlyException("图片转byte[]发生错误:" + ex.ToString());
}
}
然后根据出参定义其实体类(这里以驾驶证为例)
public class DrivingLicenceResult
{
public long log_id { get; set; }
public int direction { get; set; }
public int words_result_num { get; set; }
public Words_Result words_result { get; set; }
public class Words_Result
{
public 证号 证号 { get; set; }
public 有效起始日期 有效起始日期 { get; set; }
public 有效期限 有效期限 { get; set; }
public 准驾车型 准驾车型 { get; set; }
public 住址 住址 { get; set; }
public 至 至 { get; set; }
public 姓名 姓名 { get; set; }
public 国籍 国籍 { get; set; }
public 出生日期 出生日期 { get; set; }
public 性别 性别 { get; set; }
public 初次领证日期 初次领证日期 { get; set; }
}
public class 证号
{
public string words { get; set; }
}
public class 有效起始日期
{
public string words { get; set; }
}
public class 有效期限
{
public string words { get; set; }
}
public class 准驾车型
{
public string words { get; set; }
}
public class 住址
{
public string words { get; set; }
}
public class 至
{
public string words { get; set; }
}
public class 姓名
{
public string words { get; set; }
}
public class 国籍
{
public string words { get; set; }
}
public class 出生日期
{
public string words { get; set; }
}
public class 性别
{
public string words { get; set; }
}
public class 初次领证日期
{
public string words { get; set; }
}
}
然后就是调用接口进行识别了
/// <summary>
/// 驾驶证识别并存储信息
/// </summary>
private UploadFilesOutput IdentificationDrivingLicence(byte[] byteImage, long driverInfoId)
{
UploadFilesOutput uploadFilesOutput = new UploadFilesOutput();
var client = GetClient(_appConfigurationAccessor.Configuration["BaiDuAI:Type"]);
if (client == null)
{
throw new UserFriendlyException("接口实例化失败!请认真核对配置信息");
}
try
{
var result = client.DrivingLicense(byteImage);
DrivingLicenceResult drivingLicenceResult = JsonConvert.DeserializeObject<DrivingLicenceResult>(result.ToString());
if (drivingLicenceResult != null)//返回成功标志
{
DriverLicenceInfo driverLicenceInfo = new DriverLicenceInfo();
driverLicenceInfo.No = drivingLicenceResult.words_result.证号.words;
driverLicenceInfo.Address = drivingLicenceResult.words_result.住址.words;
DateTime birthdate;
if (DateTime.TryParseExact(drivingLicenceResult.words_result.出生日期.words, "yyyyMMdd", CultureInfo.CurrentCulture, DateTimeStyles.None, out birthdate))
{
driverLicenceInfo.Birthdate = birthdate;
}
driverLicenceInfo.CreationTime = Clock.Now;
driverLicenceInfo.Name = drivingLicenceResult.words_result.姓名.words;
driverLicenceInfo.Validity = drivingLicenceResult.words_result.至 != null ? drivingLicenceResult.words_result.至.words : drivingLicenceResult.words_result.有效期限.words;
driverLicenceInfo.DriverInfoId = driverInfoId;
driverLicenceInfo.Nationality = drivingLicenceResult.words_result.国籍.words;
driverLicenceInfo.QuasiDrivingType = drivingLicenceResult.words_result.准驾车型.words;
DateTime effectiveDate;
if (DateTime.TryParseExact(drivingLicenceResult.words_result.有效起始日期 != null ?
drivingLicenceResult.words_result.有效起始日期.words
: drivingLicenceResult.words_result.有效期限.words, "yyyyMMdd"
, CultureInfo.CurrentCulture
, DateTimeStyles.None
, out effectiveDate))
{
driverLicenceInfo.EffectiveDate = effectiveDate;
}
driverLicenceInfo.Gender = drivingLicenceResult.words_result.性别.words.Equals("男") ? GenderEnum.Male : GenderEnum.Female;
driverLicenceInfo.IsDeleted = false;
DateTime dateOfInitialLicensing;
if (DateTime.TryParseExact(drivingLicenceResult.words_result.初次领证日期.words, "yyyyMMdd"
, CultureInfo.CurrentCulture
, DateTimeStyles.None
, out dateOfInitialLicensing))
{
driverLicenceInfo.DateOfInitialLicensing = dateOfInitialLicensing;
}
driverLicenceInfo.IsConfirmed = false;
var driverLicenceInfoId = _driverLicenceInfoRepository.InsertAndGetId(driverLicenceInfo);
uploadFilesOutput.DriverLicenceInfoId = driverLicenceInfoId;
uploadFilesOutput.DriverLicenceInfoDto = driverLicenceInfo;
}
return uploadFilesOutput;
}
catch (UserFriendlyException ex)
{
throw new UserFriendlyException("使用百度识别驾驶证信息时发生错误:" + ex.Message);
}
}
那么行驶证的也是和驾驶证差不多的啦 希望可以帮助到大家!!!