Skip to content

Commit f58b237

Browse files
Merge pull request #1 from hoopoe/bitmap_orientation
Bitmap orientation
2 parents 1d2d322 + e778aaf commit f58b237

File tree

3 files changed

+46
-36
lines changed

3 files changed

+46
-36
lines changed

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

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -244,14 +244,13 @@ Java_dlib_android_FaceRecognizer_recognizeFaces(JNIEnv *env,
244244
pixelscolor = (char *) pixelscolor + infocolor.stride;
245245
}
246246

247-
//dlib::save_bmp(img, "/sdcard/Download/tt.bmp");
247+
//dlib::save_bmp(img, "/sdcard/Download/res1.bmp");
248+
248249
std::vector<dlib::rectangle> dets = detector1(img);
249250
if (dets.size() == 0){
250251
return strarr;
251252
}
252253

253-
//LOGI("dets: %d", dets.size());
254-
255254
std::vector<matrix<rgb_pixel>> faces;
256255
for (auto face : dets)
257256
{
@@ -261,8 +260,6 @@ Java_dlib_android_FaceRecognizer_recognizeFaces(JNIEnv *env,
261260
faces.push_back(move(face_chip));
262261
}
263262

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

268265
for (size_t i = 0; i < face_descriptors.size(); ++i)
@@ -325,7 +322,7 @@ Java_dlib_android_FaceRecognizer_recognizeFace(JNIEnv *env, jobject instance, jo
325322
}
326323

327324
//todo: smth wrong with colors
328-
//dlib::save_bmp(img, "/storage/emulated/0/Download/test.bmp");
325+
//dlib::save_bmp(img, "/sdcard/Download/res.bmp");
329326

330327
std::vector<dlib::rectangle> dets = detector(img);
331328
LOGI("detected size %d", dets.size());
@@ -354,22 +351,19 @@ Java_dlib_android_FaceRecognizer_recognizeFace(JNIEnv *env, jobject instance, jo
354351
if (dist < min_dist){
355352
min_dist = dist;
356353
}
357-
if( dist < FACE_RECOGNIZE_THRESH) //todo: extract thresh
354+
if( dist < FACE_RECOGNIZE_THRESH)
358355
{
359-
LOGI("recognized");
356+
//LOGI("recognized");
360357
return env->NewStringUTF(i.first.c_str());
361358
}
362359
}
363360
}
364361
LOGI("not recognized, max dist %0.2f", min_dist);
365362
}
366363

367-
LOGI("unlocking pixels");
364+
// LOGI("unlocking pixels");
368365
AndroidBitmap_unlockPixels(env, bmp);
369366

370-
//std::string returnValue = "Unknown" + std::to_string(min_dist);
371-
372-
373367
std::string returnValue = "Unknown";
374368
return env->NewStringUTF(returnValue.c_str());
375369
}

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

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,19 @@
33
import android.graphics.Bitmap;
44
import android.graphics.BitmapFactory;
55
import android.graphics.ImageFormat;
6+
import android.graphics.Matrix;
67
import android.graphics.Rect;
78
import android.graphics.YuvImage;
8-
import android.os.Environment;
9-
import android.util.Log;
109
import android.util.SparseArray;
1110

1211
import com.google.android.gms.vision.Detector;
1312
import com.google.android.gms.vision.Frame;
1413
import com.google.android.gms.vision.face.Face;
1514

1615
import java.io.ByteArrayOutputStream;
17-
import java.io.File;
18-
import java.io.FileOutputStream;
19-
import java.io.FileWriter;
20-
import java.io.IOException;
2116

2217
import dlib.android.FaceRecognizer;
2318

24-
import static android.os.Environment.getExternalStorageDirectory;
25-
2619
interface RecognitionInterface
2720
{
2821
void onRecognized(String obj);
@@ -77,14 +70,37 @@ public SparseArray<Face> detect(Frame frame) {
7770
if (!IsBusy && y > 0 && recognitionHandler != null) {
7871
IsBusy = true;
7972

73+
int fHeight = frame.getMetadata().getHeight();
74+
int fWidth = frame.getMetadata().getWidth();
8075
YuvImage yuvImage = new YuvImage(frame.getGrayscaleImageData().array(), ImageFormat.NV21,
81-
frame.getMetadata().getWidth(), frame.getMetadata().getHeight(), null);
76+
fWidth, fHeight, null);
8277
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
83-
yuvImage.compressToJpeg(new Rect(0, 0, frame.getMetadata().getWidth(),
84-
frame.getMetadata().getHeight()), 100, byteArrayOutputStream);
78+
yuvImage.compressToJpeg(new Rect(0, 0, fWidth, fHeight),
79+
100, byteArrayOutputStream);
8580
byte[] jpegArray = byteArrayOutputStream.toByteArray();
8681
Bitmap tmpBitmap = BitmapFactory.decodeByteArray(jpegArray, 0, jpegArray.length);
87-
final Bitmap cropped = Bitmap.createBitmap(tmpBitmap, x, y, w, h);
82+
final Bitmap cropped;
83+
Matrix rot = new Matrix();
84+
switch (frame.getMetadata().getRotation())
85+
{
86+
case 1:
87+
rot.postRotate(90);
88+
cropped = Bitmap.createBitmap(tmpBitmap, y, fHeight - (x + w), h, w,
89+
rot,false );
90+
break;
91+
case 2:
92+
rot.postRotate(180);
93+
cropped = Bitmap.createBitmap(tmpBitmap, fWidth - (x + w),
94+
fHeight - (y + h), w, h, rot, false);
95+
break;
96+
case 3:
97+
rot.postRotate(270);
98+
cropped = Bitmap.createBitmap(tmpBitmap, fWidth - (y + h), x, h, w, rot, false);
99+
break;
100+
default:
101+
cropped = Bitmap.createBitmap(tmpBitmap, x, y, w, h);
102+
break;
103+
}
88104
// try {
89105
//
90106
// File file = new File (getExternalStorageDirectory(), "/Download/test1.bmp");

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

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public final class FaceTrackerActivity extends AppCompatActivity {
6262
private GraphicOverlay mGraphicOverlay;
6363
private Button mBtnDetect;
6464
private CustomDetector customDetector;
65-
private FaceDetector mPictureDetector;
65+
//private FaceDetector mPictureDetector;
6666

6767
private static final int RC_HANDLE_GMS = 9001;
6868
// permission request codes need to be < 256
@@ -185,16 +185,16 @@ private void createCameraSource() {
185185
.setClassificationType(FaceDetector.NO_CLASSIFICATIONS)
186186
.setProminentFaceOnly(false)
187187
.setMode(FaceDetector.ACCURATE_MODE)
188-
.setMinFaceSize(0.05f)
188+
.setMinFaceSize(0.015f)
189189
.build();
190190

191-
mPictureDetector = new FaceDetector.Builder(context)
192-
.setTrackingEnabled(false)
193-
.setProminentFaceOnly(false)
194-
.setMinFaceSize(0.015f) // 80 / 5312 detect up to 80 pixels head width
195-
.setMode(FaceDetector.ACCURATE_MODE)
196-
.setClassificationType(FaceDetector.NO_CLASSIFICATIONS)
197-
.build();
191+
// mPictureDetector = new FaceDetector.Builder(context)
192+
// .setTrackingEnabled(false)
193+
// .setProminentFaceOnly(false)
194+
// .setMinFaceSize(0.015f) // 80 / 5312 detect up to 80 pixels head width
195+
// .setMode(FaceDetector.ACCURATE_MODE)
196+
// .setClassificationType(FaceDetector.NO_CLASSIFICATIONS)
197+
// .build();
198198

199199
//mFaceRecognizer
200200
customDetector = new CustomDetector(detector, mFaceRecognizer);
@@ -215,9 +215,9 @@ private void createCameraSource() {
215215
Log.w(TAG, "Face detector dependencies are not yet available.");
216216
}
217217

218-
if (!mPictureDetector.isOperational()) {
219-
Log.w(TAG, "mPictureDetector dependencies are not yet available.");
220-
}
218+
// if (!mPictureDetector.isOperational()) {
219+
// Log.w(TAG, "mPictureDetector dependencies are not yet available.");
220+
// }
221221

222222
//.setRequestedPreviewSize(640, 480)
223223
//.setRequestedFps(30.0f)

0 commit comments

Comments
 (0)