根据美国机动车管理者协会(AAMVA https://www.aamva.org/DL-ID-Card-Design-Standard/)的规定,美国驾照使用PDF417编码,如下图:

Google Mobile Vision SDK
谷歌服务是支持驾照解析的,可以在Mobile Vision SDK中找到对应的类。要测试驾照识别,可以稍微改造下谷歌的示例代码https://github.com/googlesamples/android-vision/tree/master/visionSamples/barcode-reader。
在onBarcodeDetected(Barcode barcode)回调中判断barcode类别是否是PDF417:
if (barcode.format == Barcode.PDF417) {
Barcode.DriverLicense driverLicense = barcode.driverLicense;
if (driverLicense != null) {
Intent intent = new Intent(BarcodeCaptureActivity.this, ResultActivity.class);
intent.putExtra("DriverLicense", driverLicense);
startActivity(intent);
}
}
如果得到了驾照信息,就启动一个新的Activity显示结果:
public class ResultActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
tv.setVerticalScrollBarEnabled(true);
tv.setText("");
tv.setMovementMethod(new ScrollingMovementMethod());
Intent intent = getIntent();
if (intent != null) {
Barcode.DriverLicense driverLicense = (Barcode.DriverLicense) intent.getParcelableExtra("DriverLicense");
if (driverLicense != null) {
String documentType = driverLicense.documentType;
tv.append("Document Type:\n" + documentType + "\n\n");
String firstName = driverLicense.firstName;
tv.append("First Name:\n" + firstName + "\n\n");
String middleName = driverLicense.middleName;
tv.append("Middle Name:\n" + middleName + "\n\n");
String lastName = driverLicense.lastName;
tv.append("Last Name:\n" + lastName + "\n\n");
String gender = driverLicense.gender;
tv.append("Gender: \n" + gender + "\n\n");
String addressStreet = driverLicense.addressStreet;
tv.append("Street:\n" + addressStreet + "\n\n");
String addressCity = driverLicense.addressCity;
tv.append("City:\n" + addressCity + "\n\n");
String addressState = driverLicense.addressState;
tv.append("State:\n" + addressState + "\n\n");
String addressZip = driverLicense.addressZip;
tv.append("Zip:\n" + addressZip + "\n\n");
String licenseNumber = driverLicense.licenseNumber;
tv.append("License Number:\n" + licenseNumber + "\n\n");
String issueDate = driverLicense.issueDate;
tv.append("Issue Date:\n" + issueDate + "\n\n");
String expiryDate = driverLicense.expiryDate;
tv.append("Expiry Date:\n" + expiryDate + "\n\n");
String birthDate = driverLicense.birthDate;
tv.append("Birth Date:\n" + birthDate + "\n\n");
String issuingCountry = driverLicense.issuingCountry;
tv.append("Issue Country:\n" + issuingCountry + "\n\n");
}
}
setContentView(tv);

本文介绍了如何在Android设备上识别和读取美国驾照信息,对比了使用Google Mobile Vision SDK和Dynamsoft Barcode Reader SDK的方法。在Google的SDK中,改造示例代码以识别PDF417编码的驾照信息;而在Dynamsoft SDK中,创建自定义相机应用并实现解码。还讨论了两者在多码识别能力上的差异,并提供了源码链接。
1154

被折叠的 条评论
为什么被折叠?



