车牌识别
(1).添加类库
添加com.supermap.ai.jar、com.supermap.data.jar、okhttp-3.9.0.jar、okio-1.13.0.jar等jar包, libimb2d_v1000.so、libeasypusher.so 、libhyperlpr.so 、libopencv_java3.so 、libproffmpeg.so 、libtensorflow_demo.so、libtensorflow_inference.so、libtensorflowlite_jni.so、libTxtOverlay.so、libUtils.so、libVideoCodecer.so、libx264enc.so等so库到工程中。上述类库在产品包中的libs文件夹下,详情见“开发指南\开发包介绍"。
图:“车牌识别”添加类库示意 |
(2).添加模型文件
将模型文件夹hyperlpr及其中的文件,拷贝到工程“..\app\src\main\assets”目录下。模型下载地址:https://pan.baidu.com/s/1sGLcz-wGoVCMuBcxTHEQqw,提取码:noge。
图:“车牌识别“加载模型示意 |
(3).添加JavaCameraView控件
<org.opencv.android.JavaCameraView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/javaCameraView"
android:visibility="invisible"/>
(4).编写代码
new MyAsyncTask(this).execute();
if( OpenCVLoader.initDebug() ) {
System.loadLibrary("opencv_java3");
System.loadLibrary("hyperlpr");
m_handle = DeepAssetUtil.initRecognizer(MainActivity.this);
}else{
}
m_OpenCvCameraVdiview = (CameraBridgeViewBase) findViewById(R.id.javaCameraView);
m_OpenCvCameraView.setVisibility(CameraBridgeViewBase.VISIBLE);
m_OpenCvCameraView.setCvCameraViewListener(new CameraBridgeViewBase.CvCameraViewListener() {
@Override
public void onCameraViewStarted(int i, int i1) {
}
@Override
public void onCameraViewStopped() {
}
@Override
public Mat onCameraFrame(Mat mat) {
m_Rgba = mat;
new MyAsyncTask(MainActivity.this).execute();
return m_Rgba;
}
});
m_OpenCvCameraView.enableView();
m_Rgba = new Mat(m_OpenCvCameraView.getHeight(), m_OpenCvCameraView.getWidth(), CvType.CV_8UC4);
// 防止内存泄漏,静态加弱引用
@SuppressLint("StaticFieldLeak")
private static class MyAsyncTask extends AsyncTask<String, Integer, String> {
private final WeakReference<MainActivity> weakActivity;
MyAsyncTask(MainActivity myActivity) {
this.weakActivity = new WeakReference<>(myActivity);
}
@Override
protected String doInBackground(String... params) {
try {
return DeepCarUtil.SimpleRecognization(m_Rgba.getNativeObjAddr(), m_handle);
} catch (Exception e) {
return null;
}
}
@Override
protected void onPostExecute(String license) {//license为车牌识别结果
super.onPostExecute(license);
MainActivity activity = weakActivity.get();
if (activity == null
|| activity.isFinishing()
|| activity.isDestroyed()) {
return;
}
Toast.makeText(activity,license ,Toast.LENGTH_SHORT).show();
}
}
图:车牌识别 |
以上示例代码下载地址:https://pan.baidu.com/s/1sGLcz-wGoVCMuBcxTHEQqw,提取码:noge。请将设备横屏使用。