Git Product home page Git Product logo

hyperlpr's Introduction

logo_t

HyperLPR Android 新能源车牌识别、实时识别和识别区域的获取

Q&A

Q:Android 选择新能源车牌号的图片进行识别,为什么识别不出来

A:可能和车牌号的拍摄角度、分辨率有关,尝试调节分辨率看看

Q:如何验证支持了新能源车牌号识别

A:换用实时识别试试。

新能源车牌识别

1.将 Prj-Linux 项目下 model 中的文件全部 copy 到 Prj-Android 中 assets 的 pr 目录下
2.修改 MainActivity.java 的 initRecognizer() 方法
public void initRecognizer()
   {
       String assetPath = "pr";
       String sdcardPath = Environment.getExternalStorageDirectory()
               + File.separator + assetPath;
       copyFilesFromAssets(this, assetPath, sdcardPath);
       String cascade_filename  =  sdcardPath
           + File.separator+"cascade.xml";
       String finemapping_prototxt  =  sdcardPath
               + File.separator+"HorizonalFinemapping.prototxt";
       String finemapping_caffemodel  =  sdcardPath
               + File.separator+"HorizonalFinemapping.caffemodel";
       String segmentation_prototxt =  sdcardPath
               + File.separator+"Segmentation.prototxt";
       String segmentation_caffemodel =  sdcardPath
               + File.separator+"Segmentation.caffemodel";
       String character_prototxt =  sdcardPath
               + File.separator+"CharacterRecognization.prototxt";
       String character_caffemodel=  sdcardPath
               + File.separator+"CharacterRecognization.caffemodel";
      //添加新能源车牌识别
       String segmentationfree_prototxt =  sdcardPath
               + File.separator+"SegmenationFree-Inception.prototxt";
       String segmentationfree_caffemodel=  sdcardPath
               + File.separator+"SegmenationFree-Inception.caffemodel";
       handle  =  PlateRecognition.InitPlateRecognizer(
               cascade_filename,
               finemapping_prototxt,finemapping_caffemodel,
               segmentation_prototxt,segmentation_caffemodel,
               character_prototxt,character_caffemodel,
               segmentationfree_prototxt,segmentationfree_caffemodel
       );
   }
3.修改 PlateRecognition.java
public class PlateRecognition {
    static {
        System.loadLibrary("hyperlpr");
    }
    static native long InitPlateRecognizer(String casacde_detection,
                                           String finemapping_prototxt,String finemapping_caffemodel,
                                           String segmentation_prototxt,String segmentation_caffemodel,
                                           String charRecognization_proto,String charRecognization_caffemodel,
                                           //添加新能源的参数
                                           String segmentationfree_proto, String segmentationfree_caffemodel);

    static native void ReleasePlateRecognizer(long  object);
    static native String SimpleRecognization(long  inputMat,long object);
}
4.修改 javaWrapper.cpp 文件的以下两部分
extern "C" {
JNIEXPORT jlong JNICALL
Java_pr_platerecognization_PlateRecognition_InitPlateRecognizer(
        JNIEnv *env, jobject obj,
        jstring detector_filename,
        jstring finemapping_prototxt, jstring finemapping_caffemodel,
        jstring segmentation_prototxt, jstring segmentation_caffemodel,
        jstring charRecognization_proto, jstring charRecognization_caffemodel,
        jstring segmentationfree_proto, jstring segmentationfree_caffemodel) {

    std::string detector_path = jstring2str(env, detector_filename);
    std::string finemapping_prototxt_path = jstring2str(env, finemapping_prototxt);
    std::string finemapping_caffemodel_path = jstring2str(env, finemapping_caffemodel);
    std::string segmentation_prototxt_path = jstring2str(env, segmentation_prototxt);
    std::string segmentation_caffemodel_path = jstring2str(env, segmentation_caffemodel);
    std::string charRecognization_proto_path = jstring2str(env, charRecognization_proto);
    std::string charRecognization_caffemodel_path = jstring2str(env, charRecognization_caffemodel);
    //新能源识别参数
    std::string segmentationfree_proto_path = jstring2str(env, segmentationfree_proto);
    std::string segmentationfree_caffemodel_path = jstring2str(env, segmentationfree_caffemodel);

    pr::PipelinePR *PR = new pr::PipelinePR(detector_path,
                                            finemapping_prototxt_path, finemapping_caffemodel_path,
                                            segmentation_prototxt_path, segmentation_caffemodel_path,
                                            charRecognization_proto_path, charRecognization_caffemodel_path,
                                            //新能源识别参数
                                            segmentationfree_proto_path, segmentationfree_caffemodel_path);
    return (jlong) PR;
}

JNIEXPORT jstring JNICALL
Java_pr_platerecognization_PlateRecognition_SimpleRecognization(
        JNIEnv *env, jobject obj,
        jlong matPtr, jlong object_pr) {
    pr::PipelinePR *PR = (pr::PipelinePR *) object_pr;
    cv::Mat &mRgb = *(cv::Mat *) matPtr;
    cv::Mat rgb;
    cv::cvtColor(mRgb,rgb,cv::COLOR_RGBA2BGR);


    //1表示 SEGMENTATION_BASED_METHOD 在方法里有说明,该方法能够识别新能源车牌
    std::vector<pr::PlateInfo> list_res= PR->RunPiplineAsImage(rgb,pr::SEGMENTATION_FREE_METHOD);
//    std::vector<pr::PlateInfo> list_res= PR->RunPiplineAsImage(rgb,1);
    std::string concat_results;
    for(auto one:list_res)
    {
        //可信度
        if (one.confidence>0.7)
            concat_results+=one.getPlateName()+",";
    }

    concat_results = concat_results.substr(0,concat_results.size()-1);

    return env->NewStringUTF(concat_results.c_str());
}
5.打开 cpp.src 下 Pipeline.cpp 中的以下三处的注释
const int HorizontalPadding = 4;
PipelinePR::PipelinePR(std::string detector_filename,
                       std::string finemapping_prototxt, std::string finemapping_caffemodel,
                       std::string segmentation_prototxt, std::string segmentation_caffemodel,
                       std::string charRecognization_proto, std::string charRecognization_caffemodel,
                       std::string segmentationfree_proto, std::string segmentationfree_caffemodel) {
    plateDetection = new PlateDetection(detector_filename);
    fineMapping = new FineMapping(finemapping_prototxt, finemapping_caffemodel);
    plateSegmentation = new PlateSegmentation(segmentation_prototxt, segmentation_caffemodel);
    generalRecognizer = new CNNRecognizer(charRecognization_proto, charRecognization_caffemodel);
    //新能源车牌识别
    segmentationFreeRecognizer =  new SegmentationFreeRecognizer(segmentationfree_proto,segmentationfree_caffemodel);
}

PipelinePR::~PipelinePR() {

    delete plateDetection;
    delete fineMapping;
    delete plateSegmentation;
    delete generalRecognizer;
    //新能源车牌识别
    delete segmentationFreeRecognizer;
}
6.打开 cpp.include 包下 Pipeline.h 文件中的注释
namespace pr{

    const std::vector<std::string> CH_PLATE_CODE{"京", "沪", "津", "渝", "冀", "晋", "蒙", "辽", "吉", "黑", "苏", "浙", "皖", "闽", "赣", "鲁", "豫", "鄂", "湘", "粤", "桂",
                                                 "琼", "川", "贵", "云", "藏", "陕", "甘", "青", "宁", "新", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A",
                                                 "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "Q", "R", "S", "T", "U", "V", "W", "X",
                                                 "Y", "Z","港","学","使","警","澳","挂","军","北","南","广","沈","兰","成","济","海","民","航","空"};

    const int SEGMENTATION_FREE_METHOD = 0;
    const int SEGMENTATION_BASED_METHOD = 1;

    class PipelinePR{
    public:
        GeneralRecognizer *generalRecognizer;
        PlateDetection *plateDetection;
        PlateSegmentation *plateSegmentation;
        FineMapping *fineMapping;
        SegmentationFreeRecognizer *segmentationFreeRecognizer;

        PipelinePR(std::string detector_filename,
                   std::string finemapping_prototxt,std::string finemapping_caffemodel,
                   std::string segmentation_prototxt,std::string segmentation_caffemodel,
                   std::string charRecognization_proto,std::string charRecognization_caffemodel,
                   //新能源车牌识别
                   std::string segmentationfree_proto,std::string segmentationfree_caffemodel
        );
        ~PipelinePR();

        std::vector<std::string> plateRes;
        std::vector<PlateInfo> RunPiplineAsImage(cv::Mat plateImage,int method);
    };
}
#endif

获取识别区域的车牌号图片

1.在 cpp 包下的 CMakeLists.txt 配置文件中添加 jnigraphics 依赖库

target_link_libraries(hyperlpr jnigraphics ${OpenCV_LIBS})

2.创建包含识别区域图片的对象 PlateInfo
public class PlateInfo {
    /**
     * 车牌号
     */
    public String plateName;
    /**
     * 车牌号图片
     */
    public Bitmap bitmap;
    public PlateInfo() {
    }
    public PlateInfo(String plateName, Bitmap bitmap) {
        this.plateName = plateName;
        this.bitmap = bitmap;
    }
}
3.在 PlateRecognition 类中添加获取车牌号识别区域图片的接口
public class PlateRecognition {
    static {
        System.loadLibrary("hyperlpr");
    }
    static native long InitPlateRecognizer(String casacde_detection,
                                           String finemapping_prototxt,String finemapping_caffemodel,
                                           String segmentation_prototxt,String segmentation_caffemodel,
                                           String charRecognization_proto,String charRecognization_caffemodel,
                                           //添加新能源的参数
                                           String segmentationfree_proto, String segmentationfree_caffemodel);

    static native void ReleasePlateRecognizer(long  object);
    static native String SimpleRecognization(long  inputMat,long object);
    /**
     * 获取识别区域的车牌号图片
     * @param inputMat
     * @param object
     * @return
     */
    static native PlateInfo PlateInfoRecognization(long  inputMat,long object);
}
4.在原生代码开发中添加实现方法 javaWrapper.cpp 文件中添加如下方法
/**
 * Mat 转 Bitmap
 */
jobject mat_to_bitmap(JNIEnv * env, Mat & src, bool needPremultiplyAlpha, jobject bitmap_config){

    jclass java_bitmap_class = (jclass)env->FindClass("android/graphics/Bitmap");
    jmethodID mid = env->GetStaticMethodID(java_bitmap_class,
                                           "createBitmap", "(IILandroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap;");

    jobject bitmap = env->CallStaticObjectMethod(java_bitmap_class,
                                                 mid, src.size().width, src.size().height, bitmap_config);
    AndroidBitmapInfo  info;
    void* pixels = 0;

    try {
        //validate
        CV_Assert(AndroidBitmap_getInfo(env, bitmap, &info) >= 0);
        CV_Assert(src.type() == CV_8UC1 || src.type() == CV_8UC3 || src.type() == CV_8UC4);
        CV_Assert(AndroidBitmap_lockPixels(env, bitmap, &pixels) >= 0);
        CV_Assert(pixels);

        //type mat
        if(info.format == ANDROID_BITMAP_FORMAT_RGBA_8888){
            Mat tmp(info.height, info.width, CV_8UC4, pixels);
            if(src.type() == CV_8UC1){
                cvtColor(src, tmp, CV_GRAY2RGBA);
            } else if(src.type() == CV_8UC3){
                cvtColor(src, tmp, CV_RGB2RGBA);
            } else if(src.type() == CV_8UC4){
                if(needPremultiplyAlpha){
                    cvtColor(src, tmp, COLOR_RGBA2mRGBA);
                }else{
                    src.copyTo(tmp);
                }
            }

        } else{
            Mat tmp(info.height, info.width, CV_8UC2, pixels);
            if(src.type() == CV_8UC1){
                cvtColor(src, tmp, CV_GRAY2BGR565);
            } else if(src.type() == CV_8UC3){
                cvtColor(src, tmp, CV_RGB2BGR565);
            } else if(src.type() == CV_8UC4){
                cvtColor(src, tmp, CV_RGBA2BGR565);
            }
        }
        AndroidBitmap_unlockPixels(env, bitmap);
        return bitmap;
    } catch(cv::Exception e){
        AndroidBitmap_unlockPixels(env, bitmap);
        jclass je = env->FindClass("org/opencv/core/CvException");
        if(!je) je = env->FindClass("java/lang/Exception");
        env->ThrowNew(je, e.what());
        return bitmap;
    } catch (...){
        AndroidBitmap_unlockPixels(env, bitmap);
        jclass je = env->FindClass("java/lang/Exception");
        env->ThrowNew(je, "Unknown exception in JNI code {nMatToBitmap}");
        return bitmap;
    }
}

/**
 * 车牌号的详细信息
 * @param env
 * @param obj
 * @param matPtr
 * @param object_pr
 * @return
 */
JNIEXPORT jobject JNICALL
Java_pr_platerecognization_PlateRecognition_PlateInfoRecognization(
        JNIEnv *env, jobject obj,
        jlong matPtr, jlong object_pr) {
    jclass plateInfo_class = env -> FindClass("pr/platerecognization/PlateInfo");
    jmethodID mid = env->GetMethodID(plateInfo_class,"<init>","()V");
    jobject plateInfoObj   = env->NewObject(plateInfo_class,mid);

    pr::PipelinePR *PR = (pr::PipelinePR *) object_pr;
    cv::Mat &mRgb = *(cv::Mat *) matPtr;
    cv::Mat rgb;
    cv::cvtColor(mRgb,rgb,cv::COLOR_RGBA2BGR);

    //1表示SEGMENTATION_BASED_METHOD在方法里有说明
    std::vector<pr::PlateInfo> list_res= PR->RunPiplineAsImage(rgb,pr::SEGMENTATION_FREE_METHOD);
    std::string concat_results;
    pr::PlateInfo plateInfo;
    for(auto one:list_res)
    {
        //可信度
        if (one.confidence>0.7) {
            plateInfo = one;
            //车牌号
            jfieldID fid_plate_name  = env->GetFieldID(plateInfo_class,"plateName","Ljava/lang/String;");
            env->SetObjectField(plateInfoObj,fid_plate_name,env->NewStringUTF(plateInfo.getPlateName().c_str()));

            //识别区域
            Mat src = plateInfo.getPlateImage();

            jclass java_bitmap_class = (jclass)env->FindClass("android/graphics/Bitmap$Config");
            jmethodID bitmap_mid = env->GetStaticMethodID(java_bitmap_class,
                                                          "nativeToConfig", "(I)Landroid/graphics/Bitmap$Config;");
            jobject bitmap_config = env->CallStaticObjectMethod(java_bitmap_class, bitmap_mid, 5);

            jfieldID fid_bitmap = env->GetFieldID(plateInfo_class, "bitmap","Landroid/graphics/Bitmap;");
            jobject _bitmap = mat_to_bitmap(env, src, false, bitmap_config);
            env->SetObjectField(plateInfoObj,fid_bitmap, _bitmap);
            return plateInfoObj;
        }
    }
    return plateInfoObj;
}

hyperlpr's People

Contributors

brucexiaok avatar coleflowers avatar da-niao-dan avatar dreadlord1984 avatar jsonshen avatar justid avatar kunliu-kelvin avatar lxhandsmh avatar szad670401 avatar youngorsu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

hyperlpr's Issues

项目环境遇到障碍,请求支持

项目环境配置,如下:
1、NDK问题已经解决 - JNI编译采用 ndk r14b
2、gradle 插件版本 gradle-4.4
3、as 版本 Android Studio 3.1.4
4、cmake 版本 3.10.2
local.properties 设置 cmake.dir=/Users/zhairz/tools/android-sdk/cmake/3.10.2.4988404

报错信息如下:
`

Configure project :app
Support for CMake 3.7 and higher is a preview feature. To report a bug, see https://developer.android.com/studio/report-bugs.html
Support for CMake 3.7 and higher is a preview feature. To report a bug, see https://developer.android.com/studio/report-bugs.html

Task :app:generateJsonModelDebug FAILED
External native generate JSON debug: starting JSON generation
External native generate JSON debug: using platform version 19 for ABI ARMEABI_V7A and min SDK version 19
External native generate JSON debug: rebuilding JSON /Users/zhairz/lpr/HyperLPR/Prj-Android/app/.externalNativeBuild/cmake/debug/armeabi-v7a/android_gradle_build.json due to:
External native generate JSON debug: - expected json /Users/zhairz/lpr/HyperLPR/Prj-Android/app/.externalNativeBuild/cmake/debug/armeabi-v7a/android_gradle_build.json file is not present, will remove stale json folder
External native generate JSON debug: - missing previous command file /Users/zhairz/lpr/HyperLPR/Prj-Android/app/.externalNativeBuild/cmake/debug/armeabi-v7a/cmake_build_command.txt, will remove stale json folder
External native generate JSON debug: removing stale contents from '/Users/zhairz/lpr/HyperLPR/Prj-Android/app/.externalNativeBuild/cmake/debug/armeabi-v7a'
External native generate JSON debug: created folder '/Users/zhairz/lpr/HyperLPR/Prj-Android/app/.externalNativeBuild/cmake/debug/armeabi-v7a'
External native generate JSON debug: executing cmake Executable : /Users/zhairz/tools/android-sdk/cmake/3.10.2.4988404/bin/cmake
arguments :
-H/Users/zhairz/lpr/HyperLPR/Prj-Android/app/src/main/cpp
-B/Users/zhairz/lpr/HyperLPR/Prj-Android/app/.externalNativeBuild/cmake/debug/armeabi-v7a
-DANDROID_ABI=armeabi-v7a
-DANDROID_PLATFORM=android-19
-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=/Users/zhairz/lpr/HyperLPR/Prj-Android/app/build/intermediates/cmake/debug/obj/armeabi-v7a
-DCMAKE_BUILD_TYPE=Debug
-DANDROID_NDK=/Users/zhairz/tools/android-sdk/ndk-bundle
-DCMAKE_CXX_FLAGS=-std=c++11
-DCMAKE_SYSTEM_NAME=Android
-DCMAKE_ANDROID_ARCH_ABI=armeabi-v7a
-DCMAKE_SYSTEM_VERSION=19
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON
-DCMAKE_ANDROID_NDK=/Users/zhairz/tools/android-sdk/ndk-bundle
-DCMAKE_TOOLCHAIN_FILE=/Users/zhairz/lpr/HyperLPR/Prj-Android/app/.externalNativeBuild/cmake/debug/armeabi-v7a/pre-ndk-r15-wrapper-android.toolchain.cmake
-G Ninja
-DANDROID_STL=gnustl_static
jvmArgs :

[== "CMake Server" ==[

{"supportedProtocolVersions":[{"isExperimental":true,"major":1,"minor":1}],"type":"hello"}

]== "CMake Server" ==]

[== "CMake Server" ==[

{
"type": "handshake",
"cookie": "gradle-cmake-cookie",
"protocolVersion": {
"isExperimental": true,
"major": 1,
"minor": 1
},
"sourceDirectory": "/Users/zhairz/lpr/HyperLPR/Prj-Android/app/src/main/cpp",
"buildDirectory": "/Users/zhairz/lpr/HyperLPR/Prj-Android/app/.externalNativeBuild/cmake/debug/armeabi-v7a",
"generator": "Ninja"
}

]== "CMake Server" ==]

[== "CMake Server" ==[

{"cookie":"gradle-cmake-cookie","inReplyTo":"handshake","type":"reply"}

]== "CMake Server" ==]

[== "CMake Server" ==[

{
"type": "configure",
"cacheArguments": [
"",
"-DANDROID_ABI\u003darmeabi-v7a",
"-DANDROID_PLATFORM\u003dandroid-19",
"-DCMAKE_LIBRARY_OUTPUT_DIRECTORY\u003d/Users/zhairz/lpr/HyperLPR/Prj-Android/app/build/intermediates/cmake/debug/obj/armeabi-v7a",
"-DCMAKE_BUILD_TYPE\u003dDebug",
"-DANDROID_NDK\u003d/Users/zhairz/tools/android-sdk/ndk-bundle",
"-DCMAKE_CXX_FLAGS\u003d-std\u003dc++11",
"-DCMAKE_SYSTEM_NAME\u003dAndroid",
"-DCMAKE_ANDROID_ARCH_ABI\u003darmeabi-v7a",
"-DCMAKE_SYSTEM_VERSION\u003d19",
"-DCMAKE_EXPORT_COMPILE_COMMANDS\u003dON",
"-DCMAKE_ANDROID_NDK\u003d/Users/zhairz/tools/android-sdk/ndk-bundle",
"-DCMAKE_TOOLCHAIN_FILE\u003d/Users/zhairz/lpr/HyperLPR/Prj-Android/app/.externalNativeBuild/cmake/debug/armeabi-v7a/pre-ndk-r15-wrapper-android.toolchain.cmake",
"-G Ninja",
"-DANDROID_STL\u003dgnustl_static"
]
}

]== "CMake Server" ==]

[== "CMake Server" ==[

{"cookie":"","inReplyTo":"configure","message":"CMake Error: CMake was unable to find a build program corresponding to "Ninja". CMAKE_MAKE_PROGRAM is not set. You probably need to select a different build tool.","title":"Error","type":"message"}

]== "CMake Server" ==]

CMake Error: CMake was unable to find a build program corresponding to "Ninja". CMAKE_MAKE_PROGRAM is not set. You probably need to select a different build tool.
CMake Error: CMake was unable to find a build program corresponding to "Ninja". CMAKE_MAKE_PROGRAM is not set. You probably need to select a different build tool.

[== "CMake Server" ==[

{"cookie":"","inReplyTo":"configure","progressCurrent":1000,"progressMaximum":1000,"progressMessage":"Configuring","progressMinimum":0,"type":"progress"}

]== "CMake Server" ==]

[== "CMake Server" ==[

{"cookie":"","inReplyTo":"configure","message":"Configuring incomplete, errors occurred!\nSee also "/Users/zhairz/lpr/HyperLPR/Prj-Android/app/.externalNativeBuild/cmake/debug/armeabi-v7a/CMakeFiles/CMakeOutput.log".","type":"message"}

]== "CMake Server" ==]

Configuring incomplete, errors occurred!
See also "/Users/zhairz/lpr/HyperLPR/Prj-Android/app/.externalNativeBuild/cmake/debug/armeabi-v7a/CMakeFiles/CMakeOutput.log".
Configuring incomplete, errors occurred!
See also "/Users/zhairz/lpr/HyperLPR/Prj-Android/app/.externalNativeBuild/cmake/debug/armeabi-v7a/CMakeFiles/CMakeOutput.log".

[== "CMake Server" ==[

{"cookie":"","errorMessage":"Configuration failed.","inReplyTo":"configure","type":"error"}

]== "CMake Server" ==]

Configuration failed.
External native generate JSON debug: JSON generation completed with problems

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':app:generateJsonModelDebug'.

com.android.ide.common.process.ProcessException: Error configuring

  • Try:
    Run with --info or --debug option to get more log output. Run with --scan to get full insights.

  • Exception is:
    org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:generateJsonModelDebug'.
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:100)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70)
    at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
    at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:62)
    at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:60)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:97)
    at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:87)
    at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
    at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.run(DefaultTaskGraphExecuter.java:248)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:241)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:230)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:123)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.access$200(DefaultTaskPlanExecutor.java:79)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:104)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:98)
    at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:626)
    at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:581)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:98)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
    at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
    at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
    Caused by: org.gradle.internal.UncheckedException: com.android.ide.common.process.ProcessException: Error configuring
    at org.gradle.internal.UncheckedException.throwAsUncheckedException(UncheckedException.java:63)
    at org.gradle.internal.UncheckedException.throwAsUncheckedException(UncheckedException.java:40)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:76)
    at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:46)
    at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39)
    at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26)
    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:780)
    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:747)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:121)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:110)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:92)
    ... 29 more
    Caused by: com.android.ide.common.process.ProcessException: Error configuring
    at com.android.build.gradle.tasks.CmakeServerExternalNativeJsonGenerator.executeProcessAndGetOutput(CmakeServerExternalNativeJsonGenerator.java:198)
    at com.android.build.gradle.tasks.CmakeExternalNativeJsonGenerator.executeProcess(CmakeExternalNativeJsonGenerator.java:126)
    at com.android.build.gradle.tasks.ExternalNativeJsonGenerator.buildAndPropagateException(ExternalNativeJsonGenerator.java:323)
    at com.android.build.gradle.tasks.ExternalNativeJsonGenerator.build(ExternalNativeJsonGenerator.java:188)
    at com.android.build.gradle.tasks.ExternalNativeBuildJsonTask.build(ExternalNativeBuildJsonTask.java:35)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
    ... 41 more

  • Get more help at https://help.gradle.org

BUILD FAILED in 1s
29 actionable tasks: 1 executed, 28 up-to-date
`

希望给出环境配置信息,帮解决一下问题,不胜感激!如果方便希望能加一下微信号【15810806610】

你好 我这里有一个错误 可以帮我看看吗

错误大概就是这样 : /storage/emulated/0/pr/HorizonalFinemapping.prototxt") in bool cv::dnn::ReadProtoFromTextFile(const char*,google::protobuf::Message*), file /build/master_pack-android/opencv/modules/dnn/src/caffe/caffe_io.cpp, line 1113 请问您知道是什么原因吗

新能源车牌识别率

新能源车牌识别率怎么样?
我这新能源车牌的识别率很低很低,基本上每次都不对

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.