Flutter OCR识别插件flutter_accurascan_ocr的使用
Flutter OCR识别插件flutter_accurascan_ocr的使用
Accura Scan OCR 是一款用于光学字符识别(OCR)的插件。Accura Scan Face Match 用于匹配两张人脸,分别是源人脸和目标人脸,例如用户自拍图像与文档中的用户图像进行匹配。Accura Scan Authentication 用于客户验证和身份认证,通过3D自拍技术解锁用户的真实身份。
以下是将 Accura Scan 的 SDK 集成到您的 Flutter 项目中的步骤。
1. 设置 Android 环境
添加权限到 AndroidManifest.xml
在 Android 的 AndroidManifest.xml
文件中添加以下权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
在 build.gradle
中配置仓库
在项目的根目录下的 build.gradle
文件末尾添加以下内容:
allprojects {
repositories {
google()
jcenter()
maven {
url 'https://jitpack.io'
credentials { username 'jp_ssguccab6c5ge2l4jitaj92ek2' }
}
}
}
在 app/build.gradle
中配置打包选项
在 app/build.gradle
文件中添加以下内容:
packagingOptions {
pickFirst 'lib/arm64-v8a/libcrypto.so'
pickFirst 'lib/arm64-v8a/libssl.so'
pickFirst 'lib/armeabi-v7a/libcrypto.so'
pickFirst 'lib/armeabi-v7a/libssl.so'
pickFirst 'lib/x86/libcrypto.so'
pickFirst 'lib/x86/libssl.so'
pickFirst 'lib/x86_64/libcrypto.so'
pickFirst 'lib/x86_64/libssl.so'
}
2. 设置 iOS 环境
安装 Git LFS 并运行 pod install
确保安装了 Git LFS,并在项目根目录下运行以下命令:
pod install
在 Info.plist
中添加权限
在 iOS 的 Info.plist
文件中添加以下权限:
<key>NSCameraUsageDescription</key>
<string>App usage camera for scan documents.</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>App usage photos for get document picture.</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>App usage photos for save document picture.</string>
3. 配置 Accura Scan 许可证
Accura Scan OCR 需要两个许可证才能启用所有功能。您可以在 Accura Scan 开发者仪表板 上生成自己的许可证。
对于 Android
- 在
app/src/main
目录下创建一个名为assets
的文件夹。 - 将许可证文件
key.license
放入assets
文件夹中。
对于 iOS
- 将许可证文件放置在项目的
Runner
目录下。 - 将许可证添加到目标项目中。
4. 获取许可证配置信息
调用 getMetaData()
方法以获取许可证的详细信息。
Future<void> getMetaData() async {
try {
await AccuraOcr.getMetaData().then((value) =>
setupConfigData(json.decode(value)));
} on PlatformException {}
if (!mounted) return;
}
错误响应:字符串
成功响应:JSON 字符串
{
"countries": [],
"barcodes": [],
"isValid": boolean,
"isOCREnable": boolean,
"isBarcodeEnable": boolean,
"isBankCardEnable": boolean,
"isMRZEnable": boolean
}
5. 配置 Accura Scan 的设置和错误消息
以下代码演示如何设置 Accura Scan 的配置、错误消息和扫描提示。
Future<void> setAccuraConfig() async {
try {
await AccuraOcr.setFaceBlurPercentage(80); // 设置人脸模糊阈值
await AccuraOcr.setHologramDetection(true); // 启用全息检测
await AccuraOcr.setLowLightTolerance(10); // 设置低光容忍度
await AccuraOcr.setMotionThreshold(25); // 设置运动阈值
await AccuraOcr.setMinGlarePercentage(6); // 设置最小眩光百分比
await AccuraOcr.setMaxGlarePercentage(99); // 设置最大眩光百分比
await AccuraOcr.setBlurPercentage(60); // 设置文档模糊阈值
await AccuraOcr.setCameraFacing(0); // 设置相机方向为后置摄像头
await AccuraOcr.isCheckPhotoCopy(false); // 禁用复印件检测
// 设置扫描提示
await AccuraOcr.SCAN_TITLE_OCR_FRONT("Scan Front side of ");
await AccuraOcr.SCAN_TITLE_OCR_BACK("Scan Back side of ");
await AccuraOcr.SCAN_TITLE_OCR("Scan ");
await AccuraOcr.SCAN_TITLE_MRZ_PDF417_FRONT("Scan Front Side of Document");
await AccuraOcr.SCAN_TITLE_MRZ_PDF417_BACK("Scan Back Side of Document");
await AccuraOcr.SCAN_TITLE_DLPLATE("Scan Number plate");
await AccuraOcr.SCAN_TITLE_BANKCARD("Scan BankCard");
// 设置错误消息
await AccuraOcr.ACCURA_ERROR_CODE_MOTION("Keep Document Steady");
await AccuraOcr.ACCURA_ERROR_CODE_DOCUMENT_IN_FRAME("Keep document in frame");
await AccuraOcr.ACCURA_ERROR_CODE_BRING_DOCUMENT_IN_FRAME("Bring card near to frame");
await AccuraOcr.ACCURA_ERROR_CODE_PROCESSING("Processing");
await AccuraOcr.ACCURA_ERROR_CODE_BLUR_DOCUMENT("Blur detect in document");
await AccuraOcr.ACCURA_ERROR_CODE_FACE_BLUR("Blur detected over face");
await AccuraOcr.ACCURA_ERROR_CODE_GLARE_DOCUMENT("Glare detect in document");
await AccuraOcr.ACCURA_ERROR_CODE_HOLOGRAM("Hologram Detected");
await AccuraOcr.ACCURA_ERROR_CODE_DARK_DOCUMENT("Low lighting detected");
await AccuraOcr.ACCURA_ERROR_CODE_PHOTO_COPY_DOCUMENT("Can not accept Photo Copy Document");
await AccuraOcr.ACCURA_ERROR_CODE_FACE("Face not detected");
await AccuraOcr.ACCURA_ERROR_CODE_MRZ("MRZ not detected");
await AccuraOcr.ACCURA_ERROR_CODE_PASSPORT_MRZ("Passport MRZ not detected");
await AccuraOcr.ACCURA_ERROR_CODE_ID_MRZ("ID MRZ not detected");
await AccuraOcr.ACCURA_ERROR_CODE_VISA_MRZ("Visa MRZ not detected");
await AccuraOcr.ACCURA_ERROR_CODE_UPSIDE_DOWN_SIDE("Document is upside down. Place it properly");
await AccuraOcr.ACCURA_ERROR_CODE_WRONG_SIDE("Scanning wrong side of Document");
// 启用日志
await AccuraOcr.enableLogs(0);
await AccuraOcr.isShowLogo(1);
await AccuraOcr.isFlipImg(1);
// 自定义界面颜色
await AccuraOcr.CameraScreen_Color("#80000000");
await AccuraOcr.CameraScreen_Back_Button(1);
await AccuraOcr.CameraScreen_Change_Button(1);
await AccuraOcr.CameraScreen_Frame_Color("#D5323F");
await AccuraOcr.CameraScreen_Text_Border_Color("#000000");
await AccuraOcr.CameraScreen_Text_Color("#FFFFFF");
await AccuraOcr.setAccuraConfigs();
} on PlatformException {}
}
6. 扫描 MRZ 文档的方法
以下代码展示了如何启动 MRZ 文档扫描。
Future<void> startMRZ() async {
try {
var config = [
mrzselected,
];
print('startMRZ:- $config');
await AccuraOcr.startMRZ(config).then((value) => {
setState(() {
_result = json.decode(value);
ResultScreen.result = _result;
print("RESULT:- $_result");
})
}).onError((error, stackTrace) => {
setState(() {
print("error");
})
});
} on PlatformException {}
}
MRZType: String
值: other_mrz
, passport_mrz
, id_mrz
, visa_mrz
成功响应:
{
"front_data": {},
"back_data": {},
"type": "Recognition Type",
"face": "URI?",
"front_img": "URI?",
"back_img": "URI?"
}
错误响应: 字符串
7. 扫描 OCR 文档的方法
以下代码展示了如何启动 OCR 文档扫描。
Future<void> startOCR() async {
try {
var config = [
widget.countrySelect['id'],
cardSelected['id'],
cardSelected['name'],
cardSelected['type'],
];
await AccuraOcr.startOcrWithCard(config).then((value) =>
{
setState(() {
dynamic result = json.decode(value);
})
})
.onError((error, stackTrace) =>
{
});
} on PlatformException {}
}
CountryId: integer
值: 所选国家的 ID。
CardId: integer
值: 所选卡的 ID。
CardName: String
值: 所选卡的名称。
CardType: integer
值: 所选卡的类型。
成功响应: JSON 响应 {}
错误响应: 字符串
8. 扫描银行卡的方法
以下代码展示了如何启动银行卡扫描。
Future<void> startBankCard() async {
try {
await AccuraOcr.startBankCard().then((value) => {
setState(() {
_result = json.decode(value);
ResultScreen.result = _result;
})
});
} on PlatformException {}
}
成功响应: JSON 响应 {}
错误响应: 字符串
示例代码
以下是一个完整的示例代码,展示如何集成 flutter_accurascan_ocr
插件并使用其功能。
import 'dart:convert';
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:flutter_accurascan_ocr/flutter_accurascan_ocr.dart';
import 'package:flutter_accurascan_ocr_example/ResultScreen.dart';
void main() {
runApp(const MaterialApp(
home: MyApp(),
debugShowCheckedModeBanner: false,
));
}
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
dynamic _result = {"isValid", false};
[@override](/user/override)
void initState() {
super.initState();
getMetaData();
}
Future<void> getMetaData() async {
try {
await AccuraOcr.getMetaData().then((value) =>
setupConfigData(json.decode(value)));
} on PlatformException {}
if (!mounted) return;
}
void setupConfigData(obj) {
setState(() {
if (obj["isValid"] == true) {
setAccuraConfig();
}
});
}
Future<void> setAccuraConfig() async {
try {
await AccuraOcr.setFaceBlurPercentage(80);
await AccuraOcr.setHologramDetection(true);
await AccuraOcr.setLowLightTolerance(10);
await AccuraOcr.setMotionThreshold(25);
await AccuraOcr.setMinGlarePercentage(6);
await AccuraOcr.setMaxGlarePercentage(99);
await AccuraOcr.setBlurPercentage(60);
await AccuraOcr.setCameraFacing(0);
await AccuraOcr.isCheckPhotoCopy(false);
await AccuraOcr.SCAN_TITLE_OCR_FRONT("Scan Front side of ");
await AccuraOcr.SCAN_TITLE_OCR_BACK("Scan Back side of ");
await AccuraOcr.SCAN_TITLE_OCR("Scan ");
await AccuraOcr.ACCURA_ERROR_CODE_MOTION("Keep Document Steady");
await AccuraOcr.ACCURA_ERROR_CODE_DOCUMENT_IN_FRAME("Keep document in frame");
await AccuraOcr.ACCURA_ERROR_CODE_BRING_DOCUMENT_IN_FRAME("Bring card near to frame");
await AccuraOcr.ACCURA_ERROR_CODE_PROCESSING("Processing");
await AccuraOcr.setAccuraConfigs();
} on PlatformException {}
}
Future<void> startMRZ() async {
try {
var config = ["passport_mrz"];
await AccuraOcr.startMRZ(config).then((value) => {
setState(() {
_result = json.decode(value);
Navigator.push(
context,
MaterialPageRoute(builder: (context) => ResultScreen()));
})
});
} on PlatformException {}
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text("Accura KYC"),
),
body: Center(
child: ElevatedButton(
onPressed: startMRZ,
child: Text("Start MRZ Scan"),
),
),
),
);
}
}
更多关于Flutter OCR识别插件flutter_accurascan_ocr的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter OCR识别插件flutter_accurascan_ocr的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
flutter_accurascan_ocr
是一个用于Flutter的OCR(光学字符识别)插件,它可以帮助你在移动应用中实现文本识别功能。以下是如何使用 flutter_accurascan_ocr
插件的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 flutter_accurascan_ocr
插件的依赖。
dependencies:
flutter:
sdk: flutter
flutter_accurascan_ocr: ^latest_version
然后,运行 flutter pub get
来获取依赖。
2. 配置权限
在Android和iOS平台上,你可能需要配置一些权限来访问相机和存储。
Android:
在 AndroidManifest.xml
中添加以下权限:
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
iOS:
在 Info.plist
中添加以下权限:
<key>NSCameraUsageDescription</key>
<string>We need access to your camera for scanning documents.</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>We need access to your photo library for scanning documents.</string>
3. 使用插件进行OCR识别
在你的Flutter代码中,你可以使用 flutter_accurascan_ocr
插件来进行OCR识别。
import 'package:flutter/material.dart';
import 'package:flutter_accurascan_ocr/flutter_accurascan_ocr.dart';
class OCRScreen extends StatefulWidget {
[@override](/user/override)
_OCRScreenState createState() => _OCRScreenState();
}
class _OCRScreenState extends State<OCRScreen> {
String _recognizedText = '';
Future<void> _recognizeText() async {
try {
// Initialize the OCR scanner
final FlutterAccurascanOcr scanner = FlutterAccurascanOcr();
// Start the OCR process
final String recognizedText = await scanner.scanDocument();
// Update the UI with the recognized text
setState(() {
_recognizedText = recognizedText;
});
} catch (e) {
print("Error during OCR: $e");
}
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('OCR Recognition'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: _recognizeText,
child: Text('Scan Document'),
),
SizedBox(height: 20),
Text(
'Recognized Text:',
style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
),
SizedBox(height: 10),
Expanded(
child: SingleChildScrollView(
child: Text(_recognizedText),
),
),
],
),
),
);
}
}
void main() => runApp(MaterialApp(
home: OCRScreen(),
));