- 0
Передача JImage в SO-Библиотеку.
-
Похожий контент
-
- 9 ответов
- 2 467 просмотров
-
- 2 ответа
- 1 306 просмотров
-
- 1 ответ
- 1 505 просмотров
-
- 0 ответов
- 1 436 просмотров
-
- 6 ответов
- 1 986 просмотров
-
- 6 ответов
- 1 877 просмотров
-
- 2 ответа
- 2 365 просмотров
-
- 4 ответа
- 1 806 просмотров
-
- 8 ответов
- 2 496 просмотров
-
- 2 ответа
- 1 944 просмотра
-
-
Последние посетители 0 пользователей онлайн
- Ни одного зарегистрированного пользователя не просматривает данную страницу
Вопрос
Barbanel
Всем здравствуйте, и мое почтение!
Возникла сильная необходимость передать объект JImage в so-библиотеку, написанную на c++
Суть - нужно передать изображение в библиотеку распознавания лиц и ориентации головы.
В библиотеке есть функция, объявленная так:
jint JNIEXPORT JNICALL DLIB_JNI_METHOD(jniBitmapExtractFaceGazes)(JNIEnv* env, jobject thiz, jobject bitmap) {...}
В Delphi я описал эту функцию следующим образом:
var jniExtractGazes : function(PVM: PJNIEnv; Reserved: Pointer; bitmap: JObject): INT; cdecl;
Гружу/ищу ее так:
function HPELoadLibrary: boolean; var lJNIInt : JNIInt; begin Result := False; HPEMode := MODE_ITERATIVE; {$IFDEF ANDROID} HPEDocDir := IncludeTrailingPathDelimiter(System.IOUtils.TPath.GetDocumentsPath); {$ELSE} exit; {$ENDIF} HPELibraryHandle := LoadLibrary(PChar(HPEDocDir + 'libhead_pose_det.so')); if ( HPELibraryHandle = 0 ) then Exit; PEnv := TJNIResolver.GetJNIEnv; PVM := PJavaVM(System.JavaMachine); if HPELibraryHandle <> 0 then begin @OnLoadFunc := GetProcAddress(HPELibraryHandle, 'JNI_OnLoad'); if not Assigned(OnLoadFunc) then begin FreeLibrary(HPELibraryHandle); Exit; end; lJNIInt := OnLoadFunc(PVM, nil); @jniInit := GetProcAddress(HPELibraryHandle, 'Java_com_beraldo_hpe_dlib_HeadPoseDetector_jniInit'); //jniInit @jniDeInit := GetProcAddress(HPELibraryHandle, 'Java_com_beraldo_hpe_dlib_HeadPoseDetector_jniDeInit'); //jniDeInit @jniExtractGazes := GetProcAddress(HPELibraryHandle, 'Java_com_beraldo_hpe_dlib_HeadPoseDetector_jniBitmapExtractFaceGazes'); Result := True; end; end;
Адреса всех функций находятся, jniInit и OnLoadFunc отрабатывают корректно.
Проблема с функцией jniExtractGazes.
function HPEDetect(ABitmap: TBitmap): INT; var lBitmap : jBitmap; begin result := 0; if ( HPELibraryHandle = 0 ) then exit; lBitmap := BitmapToJBitmap(ABitmap); result := jniExtractGazes(PEnv, nil, lBitmap); <===== Project FaceLockClientMobile.apk raised exception class Aborted (6). end;
На указанной строке всегда вылетает Exception Aborted. Стек ничего внятного не показывает.
Путем долгих проб и ошибок прихожу к подозрению что я неправильно передаю Java-объект в библиотеку.
Как его передавать из Дельфи правильно - не могу найти.
Буду очень признателен за любые подсказки и догадки.
PS речь идет о этой библиотеке: https://github.com/beraldofilippo/android-hpe-library
убрано несущественное
Ссылка на комментарий
3 ответа на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.