Поиск сообщества
Показаны результаты для тегов 'jniobject'.
Найдено: 1 результат
-
Передача JImage в SO-Библиотеку.
Barbanel опубликовал вопрос в Использование статических библиотек SO
Всем здравствуйте, и мое почтение! Возникла сильная необходимость передать объект 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