[안드로이드/OpenCV] java코드에서 cascade xml 불러오는 법

프로그래밍/Android 관련2018. 4. 19. 00:13

안녕하세요. 개발자 드리머즈입니다.

java코드에서 OpenCV에 사용하는 cascade xml파일을 읽어오는 코드는 뭔가 중복되어 보입니다. 

그 이유가 스택 오버플로우에 있네요.

java코드라고 해도 OpenCV의 핵심 코드는 c단에서 돌아가고, android api(getResources().openRawResource())를 통해 얻은 것은.. apk 내부의 압축된 형태?

이기에 추가 작업이 필요하다는 말 같습니다.


제대로 이해한 것인지 확실하지는 않지만.. 일단 자료 보관용으로 글 남깁니다.


https://stackoverflow.com/questions/23229255/android-opencv-load-cascade-files-from-app-folder-in-ndk?rq=1



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



작성자

Posted by 드리머즈

관련 글

댓글 영역