我想在我的安卓项目中使用开放的alpr (自动牌照车牌识别)库。我成功地编译了所有东西,现在是时候在app中使用开放的alpr了,但是.
为了正确地创建 alpr 类对象,我必须提供配置文件的路径和runtime_data文件夹的路径,其中包含开放的alpr (ocr和训练有素的数据)所需的一些强制文件。
我试过这样的方法:
Alpr alpr = new Alpr("eu", "android_assets/alpr.conf", "android_assets/runtime_data");但是Alpr.isLoaded()返回false,这意味着没有找到配置或runtime_data。
项目中的资产文件夹路径是:src/main/assets.
有人能解释一下"runtime_data“目录和"alpr.conf”的路径是如何被打开的alpr看到的吗?
提前谢谢。
发布于 2019-09-20 16:55:32
我不熟悉特定的库,但是在较新的Android设备(Android 6及更高版本)上,您不能依赖驻留在/data/data/your.package.name下的应用程序文件。
实际库名仍然包括应用程序的包名,但也有一些base64格式的标识符。此标识符在每次安装时都是唯一的,如果您卸载并重新安装同一设备上的应用程序,它将发生变化。
因此,如果您的库需要使用配置文件和一些其他文件的路径,那么有两个选项:
Context.getFilesDir()获取应用程序文件文件夹的真实地址。
使用assets从设备上的APK的assets文件夹中解压文件。
用getFilesDir()返回的路径以编程方式重写配置文件。/sdcard文件夹下大多数安卓设备,即使是最新的安卓版本。不推荐使用第二种方法,因为直接使用/sdcard是谷歌的强烈建议和强烈建议。
而且,并不是所有的Android设备都有公共存储的/sdcard链接,但这是避免在安装后动态编辑配置文件的唯一方法。
发布于 2019-09-20 16:14:03
在开始执行这些步骤之前请注意。此库只支持arm CPU体系结构。好消息是,很可能您的物理设备正在使用arm体系结构,但是要确保在执行这些步骤之前对其进行反复检查。
我已经将这个库重新编译成一个新的包装器库。在原始库中,您需要手动配置openalpr.conf文件,并用正确的路径编辑其内容到数据目录。手动配置非常麻烦,因为由于Android5支持多个用户帐户,我们不能简单地将数据目录硬编码为/data/data/com.your.packagename/....。因为每个用户都以/data/user/0/com.your.packagename/....的形式获得到数据目录的符号链接。所有这些手动步骤都在重新编译的包装器库中删除。
Implementation
将其添加到存储库末尾的根build.gradle中:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}将依赖项添加到应用程序模块中:
dependencies {
...
implementation 'com.github.mecoFarid:openalpr:1.0.0'
}你就完蛋了。请检查这个示例应用程序以开始使用UI。
Troubleshooting:
如果您的目标sdk是targetSdkVersion >= 24,并且您正在使用Android 24+在设备上运行您的应用程序,那么您将得到以下错误:
android.os.FileUriExposedException: file:///storage/emulated/0/OpenALPR/2019-09-21-01-32-13.jpg exposed beyond app through ClipData.Item.getUri()要解决此错误:您可以在活动的onCreate()中添加以下行作为解决方案,或者可以将此线程用于正式的解决方案:
if(Build.VERSION.SDK_INT>=24){
try{
Method m = StrictMode.class.getMethod("disableDeathOnFileUriExposure");
m.invoke(null);
}catch(Exception e){
e.printStackTrace();
}
}测试:
您可以使用这图像测试您的应用程序。
发布于 2016-07-14 15:15:06
"/data/data/yourpackagename" + File.separatorChar + "runtime_data"
+ File.separatorChar + "openalpr.conf"; https://stackoverflow.com/questions/29986314
复制相似问题