Opencv: Algorithm::save(๋ฐ ๊ธฐํƒ€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฉ”์„œ๋“œ)๊ฐ€ Java ๋ฐ”์ธ๋”ฉ์— ๋Œ€ํ•ด ์†์ƒ๋จ

์— ๋งŒ๋“  2015๋…„ 12์›” 29์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: opencv/opencv

OpenCV 3.1์—์„œ Java ๋ฐ”์ธ๋”ฉ์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

Boost ๋ชจ๋ธ์„ ์ €์žฅํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์ฝ”์–ด ๋คํ”„๋ฅผ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒ์„ฑ๋œ Java<->CPP ์—ฐ๊ฒฐ์— ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

JNIEXPORT void JNICALL Java_org_opencv_core_Algorithm_save_10
  (JNIEnv* env, jclass , jlong self, jstring filename)
{
    static const char method_name[] = "core::save_10()";
    try {
        LOGD("%s", method_name);
        cv::Algorithm* me = (cv::Algorithm*) self; //TODO: check for NULL                                                                                                                                            
        const char* utf_filename = env->GetStringUTFChars(filename, 0); String n_filename(utf_filename ? utf_filename : "" ); env->ReleaseStringUTFChars(filename, utf_filename);
        me->save( n_filename );
        return;
    } catch(const std::exception &e) {
        throwJavaException(env, &e, method_name);
    } catch (...) {
        throwJavaException(env, 0, method_name);
    }
    return;
}

์ƒ์„ฑ๋œ ์ฝ”์–ด ํŒŒ์ผ์„ gdb๋กœ ๋””๋ฒ„๊น…ํ•˜๋ฉด cv::Algorithm* ๋Œ€ํ•œ ์œ ํšจํ•œ ํฌ์ธํ„ฐ๊ฐ€ ์•„๋‹Œ ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค(NULL์€ ์•„๋‹˜). me->save ์€ ๋ถ„ํ•  ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์œ„์น˜์ด๋ฉฐ ์Šคํƒ ์ถ”์ ์„ ๋ณด๋ฉด save ๋ฉ”์†Œ๋“œ์— ๋„๋‹ฌํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

StatModel(๊ณ„์ธต ๊ตฌ์กฐ์˜ ๋‹ค๋ฅธ ํด๋ž˜์Šค)์—์„œ empty()๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์ž‘๋™ํ•˜๋ฉฐ ์—ฐ๊ฒฐ โ€‹โ€‹์ฝ”๋“œ๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํฌ์ธํ„ฐ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    Ptr<cv::ml::StatModel>* me = (Ptr<cv::ml::StatModel>*) self; //TODO: check for NULL                                                                                                                          
    bool _retval_ = (*me)->empty(  );

์ €์žฅ ๊ตฌํ˜„์„ StatModel ํด๋ž˜์Šค๋กœ ์ด๋™ํ•˜๋ฉด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ชจ๋“  Algorithm ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค.

3.4 bug java bindings

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

#8524์—์„œ ์ˆ˜์ •๋จ

๋ชจ๋“  3 ๋Œ“๊ธ€

gdb์—์„œ ์—ญ์ถ”์ :

#0  0x00007f1498a25cc9 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
#1  0x00007f1498a290d8 in __GI_abort () at abort.c:89
#2  0x00007f1498330795 in os::abort(bool) () from /usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/libjvm.so
#3  0x00007f14984cee23 in VMError::report_and_die() () from /usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/libjvm.so
#4  0x00007f1498335fbf in JVM_handle_linux_signal () from /usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/libjvm.so
#5  0x00007f149832c753 in signalHandler(int, siginfo*, void*) () from /usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/libjvm.so
#6  <signal handler called>
#7  0x00007f14902f5510 in ?? ()
#8  0x00007f1461c928e6 in Java_org_opencv_core_Algorithm_save_10 (env=0x7f149000b1f8, self=139726295094592, filename=0x7f14995ef778) at /home/pace/workspace/opencv-3.1.0/debug/modules/java/core.cpp:4272
#9  0x00007f1481015994 in ?? ()
#10 0x00007f14995ef758 in ?? ()
#11 0x00007f1481015727 in ?? ()
#12 0x00007f14810156e2 in ?? ()
#13 0x00007f14995ef718 in ?? ()
#14 0x00007f1464174728 in ?? ()
#15 0x00007f14995ef788 in ?? ()
#16 0x00007f1464178868 in ?? ()
#17 0x0000000000000000 in ?? ()

1๋…„ ํ›„... ์ด ๋ฌธ์ œ๊ฐ€ ๊ณง ํ•ด๊ฒฐ๋ ๊นŒ์š”? ์ด๊ฒƒ์€ ์ž๋ฐ” ๋จธ์‹  ๋Ÿฌ๋‹์— ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

#8524์—์„œ ์ˆ˜์ •๋จ

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰