车牌识别代码参考至github上面的EasyPR_Android的源码,感谢为开源付出贡献的程序猿
源码地址 :https://github.com/linuxxx/EasyPR_Android
移植步骤
1.下载源码到本地,将以下文件拷贝到将要移植的项目中,并进行资准备
(1)库文件以及jni文件拷贝到对应项目的main路径下
(2)Opencv所需环境文件拷贝到根目录
(3)将已训练好的svm和ann等数据模型文件拷贝到res目录下(有关SVM和CNN相关知识)
(4)修改路径下的EasyPR.cpp和EasyPR.h中的函数定义和函数原型
2.下载nak压缩包并解压
资源准备好后,进入Android项目后,到local.properties文件添加NDK路径
3.代码段
AndroidManifest.xml文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"//在新项目中需要额外添加
package="com.example.administrator.cptest">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
//手机文件内部存储权限
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
tools:replace="android:icon, android:theme"//在新项目中需要额外添加
>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
build.gradle文件
apply plugin: 'com.android.application'
android {
compileSdkVersion 28
buildToolsVersion '28.0.2'
defaultConfig {
applicationId "com.example.administrator.cptest"
minSdkVersion 26
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
javaCompileOptions {
annotationProcessorOptions {
includeCompileClasspath = true
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
sourceSets.main {
jni.srcDirs = [] // This prevents the auto generation of Android.mk
jniLibs.srcDir 'src/main/libs' // This is not necessary unless you have precompiled libraries in your project.
}
task buildNative(type: Exec, description: 'Compile JNI source via NDK') {
def ndkDir = android.ndkDirectory
commandLine "$ndkDir/ndk-build.cmd",
'-C', file('src/main/jni').absolutePath, // Change src/main/jni the relative path to your jni source
'-j', Runtime.runtime.availableProcessors(),
'all',
'NDK_DEBUG=0'
}
task cleanNative(type: Exec, description: 'Clean JNI object files') {
def ndkDir = android.ndkDirectory
commandLine "$ndkDir/ndk-build.cmd",
'-C', file('src/main/jni').absolutePath, // Change src/main/jni the relative path to your jni source
'clean'
}
clean.dependsOn 'cleanNative'
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn buildNative
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
/*额外添加
implementation 'com.jakewharton:butterknife:7.0.1'
implementation 'cn.pedant.sweetalert:library:1.3'
}
然后把需要的功能类拷贝到自己的项目中编译和调试即可
注意:把应用程序下载到手机后需要开启应用程序的存储权限,不然会闪退。