Skip to content

Commit 1d2d322

Browse files
committed
refactor recognize methods
1 parent 5530658 commit 1d2d322

File tree

7 files changed

+41
-24
lines changed

7 files changed

+41
-24
lines changed
2.18 MB
Loading
-5.93 MB
Binary file not shown.

visionSamples/FaceTracker/app/src/androidTest/java/dlib/android/FaceRecognizerTest.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import android.graphics.Bitmap;
55
import android.graphics.BitmapFactory;
66
import android.support.test.InstrumentationRegistry;
7+
import android.text.TextUtils;
78
import android.util.Log;
89

910
import org.junit.Test;
@@ -21,10 +22,12 @@ public void RecognizeTest() throws IOException {
2122
FaceRecognizer fr = new FaceRecognizer();
2223
fr.loadNative();
2324
Context testContext = InstrumentationRegistry.getInstrumentation().getContext();
24-
InputStream testInput = testContext.getAssets().open("2.bmp");
25+
InputStream testInput = testContext.getAssets().open("11.png");
2526
Bitmap bitmap = BitmapFactory.decodeStream(testInput);
26-
Log.i(TAG, String.format("test1: %d", bitmap.getAllocationByteCount()));
27-
String res = fr.recognizeNative1(bitmap);
28-
assertEquals("Unknown", res);
27+
28+
//Log.i(TAG, String.format("bitmap size: %d", bitmap.getAllocationByteCount()));
29+
String[] res = fr.recognizeFaces(bitmap);
30+
31+
assertEquals("Unknown,Unknown,Unknown,Unknown,Unknown,Unknown,Unknown,Unknown,Unknown,Unknown,Unknown", TextUtils.join(",", res));
2932
}
3033
}

visionSamples/FaceTracker/app/src/main/cpp/native-lib.cpp

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -201,10 +201,12 @@ Java_dlib_android_FaceRecognizer_loadResourcesPart2(JNIEnv *env, jobject instanc
201201
}
202202
return 0;
203203
}extern "C"
204-
JNIEXPORT jstring JNICALL
205-
Java_dlib_android_FaceRecognizer_recognizeNative1(JNIEnv *env,
204+
JNIEXPORT jobjectArray JNICALL
205+
Java_dlib_android_FaceRecognizer_recognizeFaces(JNIEnv *env,
206206
jobject instance,
207207
jobject bmp) {
208+
jobjectArray strarr;
209+
std::vector<string> names;
208210

209211
AndroidBitmapInfo infocolor;
210212
void *pixelscolor;
@@ -214,14 +216,16 @@ Java_dlib_android_FaceRecognizer_recognizeNative1(JNIEnv *env,
214216
array2d<rgb_pixel> img;
215217
if ((ret = AndroidBitmap_getInfo(env, bmp, &infocolor)) < 0) {
216218
LOGE("AndroidBitmap_getInfo() failed ! error=%d", ret);
217-
return env->NewStringUTF("Image broken");
219+
//return env->NewStringUTF("Image broken");
220+
return strarr;
218221
}
219222
LOGI("color image :: width is %d; height is %d; stride is %d; format is %d;flags is %d",
220223
infocolor.width, infocolor.height, infocolor.stride, infocolor.format, infocolor.flags);
221224

222225
if (infocolor.format != ANDROID_BITMAP_FORMAT_RGBA_8888) {
223226
LOGE("Bitmap format is not RGBA_8888 !");
224-
return env->NewStringUTF("Image broken 2");
227+
//return env->NewStringUTF("Image broken 2");
228+
return strarr;
225229
}
226230

227231
if ((ret = AndroidBitmap_lockPixels(env, bmp, &pixelscolor)) < 0) {
@@ -240,15 +244,13 @@ Java_dlib_android_FaceRecognizer_recognizeNative1(JNIEnv *env,
240244
pixelscolor = (char *) pixelscolor + infocolor.stride;
241245
}
242246

243-
std::string returnValue = "Num Faces: ";
244-
247+
//dlib::save_bmp(img, "/sdcard/Download/tt.bmp");
245248
std::vector<dlib::rectangle> dets = detector1(img);
246249
if (dets.size() == 0){
247-
std::string name = "Unknown";
248-
return env->NewStringUTF(name.c_str());
250+
return strarr;
249251
}
250-
returnValue += std::to_string(dets.size());
251-
returnValue += ". ";
252+
253+
//LOGI("dets: %d", dets.size());
252254

253255
std::vector<matrix<rgb_pixel>> faces;
254256
for (auto face : dets)
@@ -259,27 +261,36 @@ Java_dlib_android_FaceRecognizer_recognizeNative1(JNIEnv *env,
259261
faces.push_back(move(face_chip));
260262
}
261263

264+
//LOGI("faces: %d", faces.size());
265+
262266
std::vector<matrix<float, 0, 1>> face_descriptors = net1(faces);
263267

264268
for (size_t i = 0; i < face_descriptors.size(); ++i)
265269
{
266270
std::string name = "Unknown";
267-
for (auto& j : known_faces) {
271+
for (auto j : known_faces) {
268272
float dist = length(face_descriptors[i] - j.second);
269273
if (dist < FACE_RECOGNIZE_THRESH) {
270274
name = j.first;
271275
break;
272276
}
273277
}
274-
returnValue += name;
275-
returnValue += " ";
278+
names.push_back(name);
276279
}
277280

278281
AndroidBitmap_unlockPixels(env, bmp);
279-
return env->NewStringUTF(returnValue.c_str());
282+
283+
if(names.size() > 0) {
284+
strarr = env->NewObjectArray(names.size(), env->FindClass("java/lang/String"), nullptr);
285+
for (int i = 0; i < names.size(); ++i)
286+
{
287+
env->SetObjectArrayElement(strarr, i, env->NewStringUTF(names[i].c_str()));
288+
}
289+
}
290+
return strarr;
280291
}extern "C"
281292
JNIEXPORT jstring JNICALL
282-
Java_dlib_android_FaceRecognizer_recognizeNative2(JNIEnv *env, jobject instance, jobject bmp) {
293+
Java_dlib_android_FaceRecognizer_recognizeFace(JNIEnv *env, jobject instance, jobject bmp) {
283294

284295
AndroidBitmapInfo infocolor;
285296
void *pixelscolor;
@@ -357,6 +368,8 @@ Java_dlib_android_FaceRecognizer_recognizeNative2(JNIEnv *env, jobject instance,
357368
AndroidBitmap_unlockPixels(env, bmp);
358369

359370
//std::string returnValue = "Unknown" + std::to_string(min_dist);
371+
372+
360373
std::string returnValue = "Unknown";
361374
return env->NewStringUTF(returnValue.c_str());
362375
}

visionSamples/FaceTracker/app/src/main/java/com/google/android/gms/samples/vision/face/facetracker/CustomDetector.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ public SparseArray<Face> detect(Frame frame) {
9898
mT = new Thread(new Runnable() {
9999
@Override
100100
public void run() {
101-
String res = mFaceRecognizer.recognizeNative2(cropped);
101+
String res = mFaceRecognizer.recognizeFace(cropped);
102102
recognitionHandler.onRecognized(res);
103103
}
104104
});

visionSamples/FaceTracker/app/src/main/java/com/google/android/gms/samples/vision/face/facetracker/FaceTrackerActivity.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import android.support.design.widget.Snackbar;
2929
import android.support.v4.app.ActivityCompat;
3030
import android.support.v7.app.AppCompatActivity;
31+
import android.text.TextUtils;
3132
import android.util.Log;
3233
import android.view.View;
3334
import android.widget.Button;
@@ -249,8 +250,8 @@ public void onPictureTaken(byte[] bytes) {
249250
new Thread(new Runnable() {
250251
@Override
251252
public void run() {
252-
final String res = mFaceRecognizer.recognizeNative1(temp);
253-
Toaster.toastLong(res);
253+
String[] array = mFaceRecognizer.recognizeFaces(temp);
254+
Toaster.toastLong(TextUtils.join(",", array));
254255
}
255256
}).start();
256257
}

visionSamples/FaceTracker/app/src/main/java/dlib/android/FaceRecognizer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,6 @@ public void loadNative()
1515

1616
private native int loadResourcesPart1();
1717
private native int loadResourcesPart2();
18-
public native String recognizeNative1(Bitmap bmp); //full image screen
19-
public native String recognizeNative2(Bitmap bmp); //customDetector
18+
public native String[] recognizeFaces(Bitmap bmp); //full image screen
19+
public native String recognizeFace(Bitmap bmp); //customDetector
2020
}

0 commit comments

Comments
 (0)