[안드로이드/OpenCV] java코드에서 cascade xml 불러오는 법
프로그래밍/Android 관련2018. 4. 19. 00:13
안녕하세요. 개발자 드리머즈입니다.
java코드에서 OpenCV에 사용하는 cascade xml파일을 읽어오는 코드는 뭔가 중복되어 보입니다.
그 이유가 스택 오버플로우에 있네요.
java코드라고 해도 OpenCV의 핵심 코드는 c단에서 돌아가고, android api(getResources().openRawResource())를 통해 얻은 것은.. apk 내부의 압축된 형태?
이기에 추가 작업이 필요하다는 말 같습니다.
제대로 이해한 것인지 확실하지는 않지만.. 일단 자료 보관용으로 글 남깁니다.
opencv can't read from zip files directly.
so if you put the cascade into your apk, you'll have to load it and save it again to internal/external storage, like in the facedetect sample
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | // load cascade file from application resources InputStream is = getResources().openRawResource(R.raw.lbpcascade_frontalface); File cascadeDir = getDir("cascade", Context.MODE_PRIVATE); mCascadeFile = new File(cascadeDir, "lbpcascade_frontalface.xml"); FileOutputStream os = new FileOutputStream(mCascadeFile); byte[] buffer = new byte[4096]; int bytesRead; while ((bytesRead = is.read(buffer)) != -1) { os.write(buffer, 0, bytesRead); } is.close(); os.close(); mJavaDetector = new CascadeClassifier(mCascadeFile.getAbsolutePath()); if (mJavaDetector.empty()) { Log.e(TAG, "Failed to load cascade classifier"); mJavaDetector = null; } else Log.i(TAG, "Loaded cascade classifier from " + mCascadeFile.getAbsolutePath()); mNativeDetector = new DetectionBasedTracker(mCascadeFile.getAbsolutePath(), 0); cascadeDir.delete(); | cs |
댓글 영역