Explorar el Código

'2023年3月12日20:27:31'

master
wq hace 2 años
padre
commit
1d7412e7c2

+ 3
- 0
app/build.gradle Ver fichero

@@ -263,6 +263,9 @@ dependencies {
//https://github.com/RuffianZhong/RWidgetHelper
implementation 'com.github.RuffianZhong:RWidgetHelper:androidx.v0.0.13'

//身份证虚影校验 OpenCV 库进行图像处理
implementation 'org.opencv:opencv-android:4.5.4'

// //注释掉原有bugly的仓库
// //compile 'com.tencent.bugly:crashreport:latest.release'//其中latest.release指代最新版本号,也可以指定明确的版本号,例如2.3.2
// implementation 'com.tencent.bugly:crashreport_upgrade:1.2.0'//其中latest.release指代最新版本号,也可以指定明确的版本号,例如1.2.0

+ 8
- 3
app/src/main/AndroidManifest.xml Ver fichero

@@ -306,10 +306,15 @@
android:name=".project.ui.activity.after.TopUpActivity"
android:launchMode="singleTop"
android:screenOrientation="portrait" />
<activity android:name=".project.ui.activity.after.TopDefrayActivity"
<activity
android:name=".project.ui.activity.after.TopDefrayActivity"
android:launchMode="singleTop"
android:screenOrientation="portrait"/>
<activity android:name=".project.ui.activity.after.TopEntrapmentActivity"
android:screenOrientation="portrait" />
<activity
android:name=".project.ui.activity.after.TopEntrapmentActivity"
android:launchMode="singleTop"
android:screenOrientation="portrait" />
<activity android:name=".project.ui.activity.TestActivity"
android:launchMode="singleTop"
android:screenOrientation="portrait"/>
</application>

+ 14
- 15
app/src/main/java/com/huntersun/vkyes/etcopencard/project/ui/activity/ContractActivity.java Ver fichero

@@ -66,13 +66,6 @@ public class ContractActivity extends AppActivity {
@Override
@SingleClick
public void onClick(View view) {
LiveEventBus.get("homeOneUpdateData").post("");
Bundle bundle = new Bundle();
bundle.putString("bizContent", getIntent().getStringExtra("bizContent"));
bundle.putString("orderId", getIntent().getStringExtra("orderId"));
jumpToPage(ETCHandleSonActivity.class,bundle);
finish();

/*Intent intent = new Intent();
intent.putExtra("orderId", getIntent().getStringExtra("orderId"));
intent.putExtra("bizContent", getIntent().getStringExtra("bizContent"));
@@ -81,7 +74,7 @@ public class ContractActivity extends AppActivity {
finish();*/

//签约检测
/* FatherBean<SendTheVerificationCodeBean> fatherBean = new FatherBean<>();
FatherBean<SendTheVerificationCodeBean> fatherBean = new FatherBean<>();
fatherBean.bizContent = new SendTheVerificationCodeBean();
fatherBean.bizContent.setOrderId(getIntent().getStringExtra("orderId"));
Log.e("okhttp", "打印标题:" + new Gson().toJson(fatherBean));
@@ -90,12 +83,18 @@ public class ContractActivity extends AppActivity {
public void onSuccess(ResultBean resultBean, ResultBean.BizContent bizContent1) {
binding.nextStep.setEnabled(true);
if ("NORMAL".equals(bizContent1.getUserState())) {
LiveEventBus.get("homeUpdateData").post("更新首页信息内容");
LiveEventBus.get("homeOneUpdateData").post("更新首页列表信息内容");
Intent intent = new Intent();
intent.putExtra("orderId", getIntent().getStringExtra("orderId"));
intent.setClass(ContractActivity.this, ETCHandleActivity.class);
startActivity(intent);
// LiveEventBus.get("homeUpdateData").post("更新首页信息内容");
// LiveEventBus.get("homeOneUpdateData").post("更新首页列表信息内容");
// Intent intent = new Intent();
// intent.putExtra("orderId", getIntent().getStringExtra("orderId"));
// intent.setClass(ContractActivity.this, ETCHandleActivity.class);
// startActivity(intent);
// finish();
LiveEventBus.get("homeOneUpdateData").post("");
Bundle bundle = new Bundle();
bundle.putString("bizContent", getIntent().getStringExtra("bizContent"));
bundle.putString("orderId", getIntent().getStringExtra("orderId"));
jumpToPage(ETCHandleSonActivity.class,bundle);
finish();
} else if ("OVERDUE".equals(bizContent1.getUserState())) {
showDilog("用户已开通车主服务,但存在欠费,请用户于微信车主服务补缴费用后再次办理。");
@@ -112,7 +111,7 @@ public class ContractActivity extends AppActivity {
binding.nextStep.setEnabled(true);
}
});
binding.nextStep.setEnabled(false);*/
binding.nextStep.setEnabled(false);
}

public void showDilog(String msg) {

+ 163
- 0
app/src/main/java/com/huntersun/vkyes/etcopencard/project/ui/activity/TestActivity.java Ver fichero

@@ -0,0 +1,163 @@
package com.huntersun.vkyes.etcopencard.project.ui.activity;

import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.hardware.Camera;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;

import com.huntersun.vkyes.etcopencard.R;
import com.huntersun.vkyes.etcopencard.databinding.ActivitySubscribeListBinding;
import com.huntersun.vkyes.etcopencard.databinding.ActivityTestBinding;
import com.huntersun.vkyes.etcopencard.src.app.AppActivity;

import java.io.IOException;
import java.util.ArrayList;

import org.opencv.android.BaseLoaderCallback;
import org.opencv.android.LoaderCallbackInterface;
import org.opencv.android.OpenCVLoader;
import org.opencv.android.Utils;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfPoint;
import org.opencv.core.Rect;
import org.opencv.imgproc.Imgproc;


/**
* @author admin
*/
public class TestActivity extends AppActivity {
private ActivityTestBinding binding;

private static final String TAG = "TestActivity";

static {
System.loadLibrary("opencv_java3");
}

private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS:
// OpenCV加载成功
break;
default:
super.onManagerConnected(status);
break;
}
}
};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 引入 OpenCV 库
if (!OpenCVLoader.initDebug()) {
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, mLoaderCallback);
} else {
mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
}
}

@Override
protected View getLayoutView() {
binding = ActivityTestBinding.inflate(getLayoutInflater());
return binding.getRoot();
}

@Override
protected void initView() {
// 设置相机参数
Camera camera = Camera.open();
Camera.Parameters parameters = camera.getParameters();
parameters.setPreviewSize(200, 200);
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
camera.setParameters(parameters);

// 显示相机预览
SurfaceView surfaceView = findViewById(R.id.surfaceView);
SurfaceHolder holder = surfaceView.getHolder();
try {
camera.setPreviewDisplay(holder);
} catch (IOException e) {
e.printStackTrace();
}
camera.startPreview();

// 拍摄照片
camera.takePicture(null, null, new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
// 获取照片数据
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);

// 对照片进行虚影校验
boolean isCard = checkIdCard(bitmap);

if (isCard) {
// 裁剪照片
Bitmap cardBitmap = cropIdCard(bitmap);

// 保存照片到本地或上传到服务器
saveCardBitmap(cardBitmap);
}
}
});


}

// 身份证虚影校验算法
private boolean checkIdCard(Bitmap bitmap) {
// 将照片转换为灰度图像
Mat mat = new Mat();
Utils.bitmapToMat(bitmap, mat);
Imgproc.cvtColor(mat, mat, Imgproc.COLOR_RGB2GRAY);

// 计算二值化阈值
Mat binary = new Mat();
Imgproc.threshold(mat, binary, 0, 255, Imgproc.THRESH_BINARY | Imgproc.THRESH_OTSU);

// 消除噪点
Mat kernel = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(3, 3));
Imgproc.erode(binary, binary, kernel);
Imgproc.dilate(binary, binary, kernel);

// 检测轮廓
List<MatOfPoint> contours = new ArrayList<>();
Mat hierarchy = new Mat();
Imgproc.findContours(binary, contours, hierarchy, Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE);

// 进行轮廓匹配
for (MatOfPoint contour : contours) {
double matchScore = Imgproc.matchShapes(contour, ID_CARD_CONTOUR, Imgproc.CONTOURS_MATCH_I1, 0);
if (matchScore < MAX_MATCH_SCORE) {
return true;
}
}
return false;
}

// 身份证裁剪算法
private Bitmap cropIdCard(Bitmap bitmap) {
// 实现身份证裁剪算法
}

// 保存照片到本地或上传到服务器
private void saveCardBitmap(Bitmap bitmap) {
// 实现保存照片到本地或上传到服务器
}


@Override
protected void initData() {

}
}

+ 14
- 0
app/src/main/res/layout/activity_test.xml Ver fichero

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".project.ui.activity.TestActivity">

<SurfaceView
android:id="@+id/surfaceView"
android:layout_width="match_parent"
android:layout_height="match_parent" />

</FrameLayout>

Cargando…
Cancelar
Guardar