算法 自动采集列表( Android端相机视频流采集与实时边框识别扫描算法(SmartScanner) )
优采云 发布时间: 2021-10-24 11:09算法 自动采集列表(
Android端相机视频流采集与实时边框识别扫描算法(SmartScanner)
)
英语
SmartCamera是一款Android相机扩展库,提供高度可定制的实时扫描模块,可以实时采集并识别相机中物体的边框是否与指定区域匹配。如果你觉得还不错,欢迎star和fork。
语言描述有点生涩。具体实现的功能如下图所示。适用于*敏*感*词*、名片、文件等内容的扫描、自动拍摄、裁剪。
您可以下载并体验SmartCamera集成的“卡片备忘录”,并将卡片安装到您的手机中:
您也可以下载演示 apk SmartCamera-Sample-debug.apk 来体验:
实时扫描模块(SmartScanner)是这个库的核心功能。借助相机PreviewCallback接口的预览流和跑马灯视图MaskView提供的跑马灯区域RectF,可以实时判断内容是否与跑马灯匹配,性能良好。
为了更方便地使用Android Camera,SmartCamera在源代码中引用了谷歌开源的CameraView,稍作修改,支持Camera.PreviewCallback回调获取相机预览流。
SmartCameraView继承了修改后的CameraView,增加了一个跑马灯遮罩视图(MaskView)和一个实时扫描模块(SmartScanner)。跑马灯视图是您看到的相机上方的一层跑马灯,并配备了从上到下的扫描效果。当然,你也可以实现 MaskViewImpl 接口来自定义跑马灯视图。
只需使用本库提供的SmartCameraView即可实现上述Demo中的效果。当然,如果你的项目中已经实现了*敏*感*词*模块,也可以直接使用SmartScanner来实现实时扫描效果。
(也可以关注我的另一个库SmartCropper:一个简单好用的智能图片裁剪库,适用于*敏*感*词*、名片、文件等照片的裁剪)
SmartCamera原理解析:Android*敏*感*词*视频流采集与实时帧识别
扫描算法调优 SmartScanner 提供了丰富的算法配置。用户可以自行修改扫描算法,以获得更好的适应性。阅读附录1中提供的每个参数的说明,以获得更好的识别效果。
为了更方便、更高效的优化算法,SmartScanner贴心地为您提供了扫描预览模式。开启预览功能后,可以使用SmartScanner获取每一帧的处理结果并输出到ImageView,实时观察原生层扫描的结果。白线区域为边缘检测结果,白线加粗区域为识别边界。
您的目标是通过调整SmartScanner的各种参数,使内容边界清晰可见,识别出的框(白色粗线段)准确。
注意:SmartCamera 对性能和内存进行了各方面的优化,但由于不必要的性能资源浪费,请在算法参数调优完成后关闭预览模式。
使用权
1. 在根目录添加 build.gradle :
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
2.添加依赖
dependencies {
implementation 'com.github.pqpo:SmartCamera:v2.0.0'
}
注意:由于使用了JNI,请避免混淆
-keep class me.pqpo.smartcameralib.**{*;}
使用1. 引入相机布局并启动相机(必要时启动预览)
">
@Override
protected void onResume() {
super.onResume();
mCameraView.start();
mCameraView.startScan();
}
@Override
protected void onPause() {
mCameraView.stop();
super.onPause();
if (alertDialog != null) {
alertDialog.dismiss();
}
mCameraView.stopScan();
}
注意:如果开启了预览,不要忘记调用相应的打开和结束预览的方法。
2. 修改扫描模块参数(可选,调优算法,同时开启第4步的预览模式)
扫描模块各个参数含义详见附录一
private void initScannerParams() {
SmartScanner.DEBUG = true;
SmartScanner.detectionRatio = 0.1f;
SmartScanner.checkMinLengthRatio = 0.8f;
SmartScanner.cannyThreshold1 = 20;
SmartScanner.cannyThreshold2 = 50;
SmartScanner.houghLinesThreshold = 130;
SmartScanner.houghLinesMinLineLength = 80;
SmartScanner.houghLinesMaxLineGap = 10;
SmartScanner.firstGaussianBlurRadius = 3;
SmartScanner.secondGaussianBlurRadius = 3;
SmartScanner.maxSize = 300;
SmartScanner.angleThreshold = 5;
// don't forget reload params
SmartScanner.reloadParams();
}
注意:修改参数后不要忘记通知native层重新加载参数:SmartScanner.reloadParams();
3. 配置遮罩选框视图(可选,修改默认视图,或修改选框区域)
配置 MaskView 各个方法的含义详见附录二
<p>final MaskView maskView = (MaskView) mCameraView.getMaskView();;
maskView.setMaskLineColor(0xff00adb5);
maskView.setShowScanLine(true);
maskView.setScanLineGradient(0xff00adb5, 0x0000adb5);
maskView.setMaskLineWidth(2);
maskView.setMaskRadius(5);
maskView.setScanSpeed(6);
maskView.setScanGradientSpread(80);
mCameraView.post(new Runnable() {
@Override
public void run() {
int width = mCameraView.getWidth();
int height = mCameraView.getHeight();
if (width