提交 0f34ec3e 编写于 作者: W wangliu

modify code style

上级 ea0fdd9d
...@@ -69,15 +69,16 @@ JNIEXPORT jboolean JNICALL Java_com_baidu_paddle_PML_loadCombined( ...@@ -69,15 +69,16 @@ JNIEXPORT jboolean JNICALL Java_com_baidu_paddle_PML_loadCombined(
optimize); optimize);
} }
JNIEXPORT jfloatArray JNICALL JNIEXPORT jfloatArray JNICALL Java_com_baidu_paddle_PML_predictImage(
Java_com_baidu_paddle_PML_predictImage(JNIEnv *env, jclass thiz, jfloatArray buf, jintArray ddims) { JNIEnv *env, jclass thiz, jfloatArray buf, jintArray ddims) {
ANDROIDLOGI("predictImage invoked"); ANDROIDLOGI("predictImage invoked");
jsize ddim_size = env->GetArrayLength(ddims); jsize ddim_size = env->GetArrayLength(ddims);
if(ddim_size != 4) { if (ddim_size != 4) {
ANDROIDLOGE("ddims size not equal to 4"); ANDROIDLOGE("ddims size not equal to 4");
} }
jint *ddim_ptr = env->GetIntArrayElements(ddims, NULL); jint *ddim_ptr = env->GetIntArrayElements(ddims, NULL);
framework::DDim ddim = framework::make_ddim({ddim_ptr[0], ddim_ptr[1], ddim_ptr[2], ddim_ptr[3]}); framework::DDim ddim = framework::make_ddim(
{ddim_ptr[0], ddim_ptr[1], ddim_ptr[2], ddim_ptr[3]});
int length = framework::product(ddim); int length = framework::product(ddim);
jfloatArray result = NULL; jfloatArray result = NULL;
int count = 0; int count = 0;
...@@ -95,93 +96,94 @@ Java_com_baidu_paddle_PML_predictImage(JNIEnv *env, jclass thiz, jfloatArray buf ...@@ -95,93 +96,94 @@ Java_com_baidu_paddle_PML_predictImage(JNIEnv *env, jclass thiz, jfloatArray buf
count = output->numel(); count = output->numel();
result = env->NewFloatArray(count); result = env->NewFloatArray(count);
env->SetFloatArrayRegion(result, 0, count, output->data<float>()); env->SetFloatArrayRegion(result, 0, count, output->data<float>());
env->ReleaseIntArrayElements(ddims,ddim_ptr, 0); env->ReleaseIntArrayElements(ddims, ddim_ptr, 0);
ANDROIDLOGI("predictImage finished"); ANDROIDLOGI("predictImage finished");
return result; return result;
} }
inline int yuv_to_rgb(int y, int u, int v, float *r, float *g, float *b) inline int yuv_to_rgb(int y, int u, int v, float *r, float *g, float *b) {
{ int r1 = (int)(y + 1.370705 * (v - 128));
int r1 = (int)(y + 1.370705 * (v - 128)); int g1 = (int)(y - 0.698001 * (u - 128) - 0.703125 * (v - 128));
int g1 = (int)(y - 0.698001 * (u - 128) - 0.703125 * (v - 128)); int b1 = (int)(y + 1.732446 * (u - 128));
int b1 = (int)(y + 1.732446 * (u - 128));
r1 = (int) fminf(255, fmaxf(0, r1)); r1 = (int)fminf(255, fmaxf(0, r1));
g1 = (int) fminf(255, fmaxf(0, g1)); g1 = (int)fminf(255, fmaxf(0, g1));
b1 = (int) fminf(255, fmaxf(0, b1)); b1 = (int)fminf(255, fmaxf(0, b1));
*r = r1; *r = r1;
*g = g1; *g = g1;
*b = b1; *b = b1;
return 0; return 0;
} }
void convert_nv21_to_matrix(uint8_t *nv21, float *matrix, int width, int height, int targetWidth, int targetHeight, float *means) { void convert_nv21_to_matrix(uint8_t *nv21, float *matrix, int width, int height,
const uint8_t *yData = nv21; int targetWidth, int targetHeight, float *means) {
const uint8_t *vuData = nv21 + width * height; const uint8_t *yData = nv21;
const uint8_t *vuData = nv21 + width * height;
const int yRowStride = width;
const int vuRowStride = width; const int yRowStride = width;
const int vuRowStride = width;
float scale_x = width * 1.0 / targetWidth;
float scale_y = height * 1.0 / targetHeight; float scale_x = width * 1.0 / targetWidth;
float scale_y = height * 1.0 / targetHeight;
for (int j = 0; j < targetHeight; ++j) {
int y = j * scale_y; for (int j = 0; j < targetHeight; ++j) {
const uint8_t *pY = yData + y * yRowStride; int y = j * scale_y;
const uint8_t *pVU = vuData + (y >> 1) * vuRowStride; const uint8_t *pY = yData + y * yRowStride;
for (int i = 0; i < targetWidth; ++i) { const uint8_t *pVU = vuData + (y >> 1) * vuRowStride;
int x = i * scale_x; for (int i = 0; i < targetWidth; ++i) {
const int offset = ((x >> 1) << 1); int x = i * scale_x;
float r = 0; const int offset = ((x >> 1) << 1);
float g = 0; float r = 0;
float b = 0; float g = 0;
yuv_to_rgb(pY[x], pVU[offset + 1], pVU[offset], &r, &g, &b); float b = 0;
int r_index = j * targetWidth + i; yuv_to_rgb(pY[x], pVU[offset + 1], pVU[offset], &r, &g, &b);
int g_index = r_index + targetWidth * targetHeight; int r_index = j * targetWidth + i;
int b_index = g_index + targetWidth * targetHeight; int g_index = r_index + targetWidth * targetHeight;
matrix[r_index] = r - means[0]; int b_index = g_index + targetWidth * targetHeight;
matrix[g_index] = g - means[1]; matrix[r_index] = r - means[0];
matrix[b_index] = b - means[2]; matrix[g_index] = g - means[1];
} matrix[b_index] = b - means[2];
}
}
JNIEXPORT jfloatArray JNICALL
Java_com_baidu_paddle_PML_predictYuv(JNIEnv *env, jclass thiz, jbyteArray yuv_, jint imgwidth, jint imgHeight, jintArray ddims,
jfloatArray meanValues) {
ANDROIDLOGI("predictYuv invoked");
jsize ddim_size = env->GetArrayLength(ddims);
if(ddim_size != 4) {
ANDROIDLOGE("ddims size not equal to 4");
}
jint *ddim_ptr = env->GetIntArrayElements(ddims, NULL);
framework::DDim ddim = framework::make_ddim({ddim_ptr[0], ddim_ptr[1], ddim_ptr[2], ddim_ptr[3]});
int length = framework::product(ddim);
float matrix[length];
jbyte *yuv = env->GetByteArrayElements(yuv_, NULL);
float *meansPointer = nullptr;
if (nullptr != meanValues) {
meansPointer = env->GetFloatArrayElements(meanValues, NULL);
}
convert_nv21_to_matrix((uint8_t *)yuv,matrix, imgwidth, imgHeight, ddim[3], ddim[2], meansPointer );
jfloatArray result = NULL;
int count = 0;
framework::Tensor input;
input.Resize(ddim);
auto input_ptr = input.mutable_data<float>();
for (int i = 0; i < length; i++) {
input_ptr[i] = matrix[i];
} }
auto output = shared_paddle_mobile_instance->Predict(input); }
count = output->numel(); }
result = env->NewFloatArray(count);
env->SetFloatArrayRegion(result, 0, count, output->data<float>());
env->ReleaseByteArrayElements(yuv_, yuv, 0);
env->ReleaseIntArrayElements(ddims, ddim_ptr, 0);
env->ReleaseFloatArrayElements(meanValues, meansPointer, 0);
ANDROIDLOGI("predictYuv finished");
return result;
JNIEXPORT jfloatArray JNICALL Java_com_baidu_paddle_PML_predictYuv(
JNIEnv *env, jclass thiz, jbyteArray yuv_, jint imgwidth, jint imgHeight,
jintArray ddims, jfloatArray meanValues) {
ANDROIDLOGI("predictYuv invoked");
jsize ddim_size = env->GetArrayLength(ddims);
if (ddim_size != 4) {
ANDROIDLOGE("ddims size not equal to 4");
}
jint *ddim_ptr = env->GetIntArrayElements(ddims, NULL);
framework::DDim ddim = framework::make_ddim(
{ddim_ptr[0], ddim_ptr[1], ddim_ptr[2], ddim_ptr[3]});
int length = framework::product(ddim);
float matrix[length];
jbyte *yuv = env->GetByteArrayElements(yuv_, NULL);
float *meansPointer = nullptr;
if (nullptr != meanValues) {
meansPointer = env->GetFloatArrayElements(meanValues, NULL);
}
convert_nv21_to_matrix((uint8_t *)yuv, matrix, imgwidth, imgHeight, ddim[3],
ddim[2], meansPointer);
jfloatArray result = NULL;
int count = 0;
framework::Tensor input;
input.Resize(ddim);
auto input_ptr = input.mutable_data<float>();
for (int i = 0; i < length; i++) {
input_ptr[i] = matrix[i];
}
auto output = shared_paddle_mobile_instance->Predict(input);
count = output->numel();
result = env->NewFloatArray(count);
env->SetFloatArrayRegion(result, 0, count, output->data<float>());
env->ReleaseByteArrayElements(yuv_, yuv, 0);
env->ReleaseIntArrayElements(ddims, ddim_ptr, 0);
env->ReleaseFloatArrayElements(meanValues, meansPointer, 0);
ANDROIDLOGI("predictYuv finished");
return result;
} }
JNIEXPORT void JNICALL Java_com_baidu_paddle_PML_clear(JNIEnv *env, JNIEXPORT void JNICALL Java_com_baidu_paddle_PML_clear(JNIEnv *env,
......
...@@ -36,14 +36,15 @@ JNIEXPORT jboolean JNICALL Java_com_baidu_paddle_PML_loadCombined( ...@@ -36,14 +36,15 @@ JNIEXPORT jboolean JNICALL Java_com_baidu_paddle_PML_loadCombined(
/** /**
* object detection for anroid * object detection for anroid
*/ */
JNIEXPORT jfloatArray JNICALL JNIEXPORT jfloatArray JNICALL Java_com_baidu_paddle_PML_predictImage(
Java_com_baidu_paddle_PML_predictImage(JNIEnv *env, jclass thiz, jfloatArray buf, jintArray ddims); JNIEnv *env, jclass thiz, jfloatArray buf, jintArray ddims);
/** /**
* object detection for anroid * object detection for anroid
*/ */
JNIEXPORT jfloatArray JNICALL JNIEXPORT jfloatArray JNICALL Java_com_baidu_paddle_PML_predictYuv(
Java_com_baidu_paddle_PML_predictYuv(JNIEnv *env, jclass thiz, jbyteArray yuv, jint imgwidth, jint imgHeight, jintArray ddims, jfloatArray meanValues); JNIEnv *env, jclass thiz, jbyteArray yuv, jint imgwidth, jint imgHeight,
jintArray ddims, jfloatArray meanValues);
/** /**
* object detection for anroid * object detection for anroid
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册