车牌识别

(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。请将设备横屏使用。