Skip to content

Commit 0142554

Browse files
committed
try to fix permission issue
1 parent 6bb8264 commit 0142554

File tree

5 files changed

+35
-105
lines changed

5 files changed

+35
-105
lines changed

FaceTracker/app/src/main/AndroidManifest.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
<uses-permission android:name="android.permission.CAMERA" />
1111
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
12-
<!--<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />-->
12+
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
1313

1414
<uses-sdk
1515
android:minSdkVersion="15"
@@ -20,7 +20,7 @@
2020
android:hardwareAccelerated="true"
2121
android:icon="@drawable/icon"
2222
android:theme="@style/Theme.AppCompat"
23-
android:label="FaceTracker"
23+
android:label="Face Recognition"
2424
android:largeHeap="true">
2525

2626
<meta-data android:name="com.google.android.gms.version"
@@ -33,7 +33,7 @@
3333
<activity
3434
android:name="com.google.android.gms.samples.vision.face.facetracker.FaceTrackerActivity"
3535
android:icon="@drawable/icon"
36-
android:label="SG"
36+
android:label="Face Recognition"
3737
android:theme="@style/Theme.AppCompat.NoActionBar"
3838
android:screenOrientation="fullSensor">
3939
<intent-filter>

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ extern "C"
2222

2323
void detect(Mat &gray) {
2424

25-
String face_cascade_name = "/storage/emulated/0/Movies/haarcascade_frontalface_default.xml";
25+
String face_cascade_name = "/sdcard/Download/haarcascade_frontalface_default.xml";
2626

2727
CascadeClassifier face_cascade;
2828
std::vector<Rect> faces;

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

Lines changed: 20 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -72,85 +72,23 @@ float FACE_RECOGNIZE_THRESH = 0.55;
7272

7373
extern "C"
7474
JNIEXPORT jint JNICALL
75-
Java_com_google_android_gms_samples_vision_face_facetracker_FaceTrackerActivity_loadResources(
76-
JNIEnv *env, jobject instance)
77-
{
78-
79-
LOGI("load resource");
80-
FILE *file1 = fopen("/storage/emulated/0/Download/shape_predictor_5_face_landmarks.dat", "r+");
81-
FILE *file2 = fopen("/storage/emulated/0/Download/dlib_face_recognition_resnet_model_v1.dat",
82-
"r+");
83-
//FILE *file3 = fopen("/storage/emulated/0/Download/faces_linear.svm", "r+");
84-
85-
if (file1 != NULL && file2 != NULL ) {
86-
fclose(file1);
87-
fclose(file2);
88-
//fclose(file3);
89-
dlib::deserialize("/storage/emulated/0/Download/shape_predictor_5_face_landmarks.dat")
90-
>> sp;
91-
dlib::deserialize("/storage/emulated/0/Download/shape_predictor_5_face_landmarks.dat")
92-
>> sp1;
93-
dlib::deserialize("/storage/emulated/0/Download/dlib_face_recognition_resnet_model_v1.dat")
94-
>> net;
95-
dlib::deserialize("/storage/emulated/0/Download/dlib_face_recognition_resnet_model_v1.dat")
96-
>> net1;
97-
//dlib::deserialize("/storage/emulated/0/Download/faces_linear.svm") >> df;
98-
99-
DIR *d;
100-
char *p1,*p2;
101-
int ret;
102-
struct dirent *dir;
103-
d = opendir("/storage/emulated/0/Download");
104-
if (d)
105-
{
106-
LOGI("Loading feature vectors using *.vec", p1);
107-
while ((dir = readdir(d)) != NULL)
108-
{
109-
p1=strtok(dir->d_name,".");
110-
p2=strtok(NULL,".");
111-
if(p2!=NULL)
112-
{
113-
ret=strcmp(p2,"vec");
114-
if(ret==0)
115-
{
116-
std::string name = std::string(p1);
117-
std::string file = name + ".vec";
118-
matrix<float, 0, 1> face_vector;
119-
dlib::deserialize("/storage/emulated/0/Download/" + file) >> face_vector;
120-
known_faces.insert({name, face_vector});
121-
}
122-
}
123-
124-
}
125-
closedir(d);
126-
}
127-
} else {
128-
return 1; //failed
129-
}
130-
131-
return 0;
132-
}extern "C"
133-
JNIEXPORT jint JNICALL
13475
Java_dlib_android_FaceRecognizer_loadResourcesPart1(JNIEnv *env, jobject instance) {
13576

13677
LOGI("load resource part1");
137-
FILE *file1 = fopen("/storage/emulated/0/Download/shape_predictor_5_face_landmarks.dat", "r+");
138-
FILE *file2 = fopen("/storage/emulated/0/Download/dlib_face_recognition_resnet_model_v1.dat",
139-
"r+");
78+
FILE *file1 = fopen("/sdcard/Download/shape_predictor_5_face_landmarks.dat", "r+");
79+
FILE *file2 = fopen("/sdcard/Download/dlib_face_recognition_resnet_model_v1.dat", "r+");
14080

14181
if (file1 != NULL && file2 != NULL ) {
14282
fclose(file1);
14383
fclose(file2);
144-
dlib::deserialize("/storage/emulated/0/Download/shape_predictor_5_face_landmarks.dat")
145-
>> sp;
146-
dlib::deserialize("/storage/emulated/0/Download/dlib_face_recognition_resnet_model_v1.dat")
147-
>> net;
84+
dlib::deserialize("/sdcard/Download/shape_predictor_5_face_landmarks.dat") >> sp;
85+
dlib::deserialize("/sdcard/Download/dlib_face_recognition_resnet_model_v1.dat") >> net;
14886

14987
DIR *d;
15088
char *p1,*p2;
15189
int ret;
15290
struct dirent *dir;
153-
d = opendir("/storage/emulated/0/Download");
91+
d = opendir("/sdcard/Download");
15492
if (d)
15593
{
15694
LOGI("Loading feature vectors using *.vec", p1);
@@ -166,7 +104,7 @@ Java_dlib_android_FaceRecognizer_loadResourcesPart1(JNIEnv *env, jobject instanc
166104
std::string name = std::string(p1);
167105
std::string file = name + ".vec";
168106
matrix<float, 0, 1> face_vector;
169-
dlib::deserialize("/storage/emulated/0/Download/" + file) >> face_vector;
107+
dlib::deserialize("/sdcard/Download/" + file) >> face_vector;
170108
known_faces.insert({name, face_vector});
171109
}
172110
}
@@ -175,6 +113,7 @@ Java_dlib_android_FaceRecognizer_loadResourcesPart1(JNIEnv *env, jobject instanc
175113
closedir(d);
176114
}
177115
} else {
116+
LOGI("Failed to load resources part1");
178117
return -1; //failed
179118
}
180119

@@ -185,18 +124,16 @@ JNIEXPORT jint JNICALL
185124
Java_dlib_android_FaceRecognizer_loadResourcesPart2(JNIEnv *env, jobject instance) {
186125

187126
LOGI("load resource part2");
188-
FILE *file1 = fopen("/storage/emulated/0/Download/shape_predictor_5_face_landmarks.dat", "r+");
189-
FILE *file2 = fopen("/storage/emulated/0/Download/dlib_face_recognition_resnet_model_v1.dat",
190-
"r+");
127+
FILE *file1 = fopen("/sdcard/Download/shape_predictor_5_face_landmarks.dat", "r+");
128+
FILE *file2 = fopen("/sdcard/Download/dlib_face_recognition_resnet_model_v1.dat", "r+");
191129

192130
if (file1 != NULL && file2 != NULL ) {
193131
fclose(file1);
194132
fclose(file2);
195-
dlib::deserialize("/storage/emulated/0/Download/shape_predictor_5_face_landmarks.dat")
196-
>> sp1;
197-
dlib::deserialize("/storage/emulated/0/Download/dlib_face_recognition_resnet_model_v1.dat")
198-
>> net1;
133+
dlib::deserialize("/sdcard/Download/shape_predictor_5_face_landmarks.dat") >> sp1;
134+
dlib::deserialize("/sdcard/Download/dlib_face_recognition_resnet_model_v1.dat") >> net1;
199135
} else{
136+
LOGI("Failed to load resources part2");
200137
return -1;
201138
}
202139
return 0;
@@ -234,7 +171,7 @@ Java_dlib_android_FaceRecognizer_recognizeFaces(JNIEnv *env,
234171

235172
img.set_size(infocolor.height, infocolor.width);
236173

237-
LOGI("size w=%d h=%d", infocolor.width, infocolor.height);
174+
// LOGI("size w=%d h=%d", infocolor.width, infocolor.height);
238175
for (y = 0; y < infocolor.height; y++) { //todo: performance
239176
argb *line = (argb *) pixelscolor;
240177
for (x = 0; x < infocolor.width; ++x) {
@@ -302,6 +239,7 @@ Java_dlib_android_FaceRecognizer_recognizeFace(JNIEnv *env, jobject instance, jo
302239
LOGI("color image :: width is %d; height is %d; stride is %d; format is %d;flags is %d",
303240
infocolor.width, infocolor.height, infocolor.stride, infocolor.format, infocolor.flags);
304241

242+
LOGI("known_faces size %d", known_faces.size());
305243
if (infocolor.format != ANDROID_BITMAP_FORMAT_RGBA_8888) {
306244
LOGE("Bitmap format is not RGBA_8888 !");
307245
return env->NewStringUTF("Image broken 2");
@@ -328,7 +266,7 @@ Java_dlib_android_FaceRecognizer_recognizeFace(JNIEnv *env, jobject instance, jo
328266
LOGI("detected size %d", dets.size());
329267

330268
float min_dist = 0.0;
331-
if(dets.size() > 0 ){
269+
if(dets.size() > 0 ){
332270
auto face = dets.front();
333271
std::vector<matrix<rgb_pixel>> faces;
334272
int x = face.left();
@@ -337,18 +275,18 @@ Java_dlib_android_FaceRecognizer_recognizeFace(JNIEnv *env, jobject instance, jo
337275
int height = face.height();
338276

339277
auto shape = sp(img, face);
340-
LOGI("shape predictor");
278+
// LOGI("shape predictor");
341279
matrix<rgb_pixel> face_chip;
342280
extract_image_chip(img, get_face_chip_details(shape, 150, 0.25), face_chip);
343281
faces.push_back(move(face_chip));
344282

345-
LOGI("before recognized size %d", 0);
283+
// LOGI("before recognized size %d", -1);
346284
std::vector<matrix<float, 0, 1>> face_descriptors = net(faces);
347-
LOGI("after recognized size %d", face_descriptors.size());
285+
// LOGI("after recognized size %d", face_descriptors.size());
348286
if (face_descriptors.size() > 0)
349287
{
350288
matrix<float, 0, 1> face_desc = face_descriptors[0];
351-
for (auto& i : known_faces) {
289+
for (auto i : known_faces) {
352290
float dist = length(face_desc - i.second );
353291
if (dist < min_dist){
354292
min_dist = dist;
@@ -363,7 +301,7 @@ Java_dlib_android_FaceRecognizer_recognizeFace(JNIEnv *env, jobject instance, jo
363301
LOGI("not recognized, max dist %0.2f", min_dist);
364302
}
365303

366-
// LOGI("unlocking pixels");
304+
LOGI("unlocking pixels");
367305
AndroidBitmap_unlockPixels(env, bmp);
368306

369307
std::string returnValue = "Unknown";

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

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,9 @@ public void onCreate(Bundle icicle) {
9898
// permission is not granted yet, request permission.
9999
int rc = ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA);
100100
int rs = ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE);
101+
101102
if (rc == PackageManager.PERMISSION_GRANTED && rs == PackageManager.PERMISSION_GRANTED) {
103+
102104
createCameraSource();
103105
} else {
104106
requestCameraAndSdCardPermission();
@@ -114,7 +116,8 @@ private void requestCameraAndSdCardPermission() {
114116
Log.w(TAG, "Camera and sdcard permissions are not granted. Requesting permission");
115117

116118
final String[] permissions = new String[]{Manifest.permission.CAMERA,
117-
Manifest.permission.READ_EXTERNAL_STORAGE};
119+
Manifest.permission.READ_EXTERNAL_STORAGE,
120+
Manifest.permission.WRITE_EXTERNAL_STORAGE};
118121

119122
if (!ActivityCompat.shouldShowRequestPermissionRationale(this,
120123
Manifest.permission.CAMERA)) {
@@ -140,12 +143,9 @@ public void onClick(View view) {
140143

141144
private void calcCameraFrameSize()
142145
{
143-
// Log.i(TAG, String.format("width %d height %d", mFrontCamWidth, mFrontCamHeight));
144-
Log.i(TAG, "test");
145146
int numCameras = Camera.getNumberOfCameras();
146-
Log.i(TAG, String.format("%d",numCameras));
147147

148-
for (int i=0;i<numCameras;i++)
148+
for (int i = 0; i < numCameras; i++)
149149
{
150150
Camera.CameraInfo cameraInfo=new Camera.CameraInfo();
151151
Camera.getCameraInfo(i, cameraInfo);
@@ -154,21 +154,15 @@ private void calcCameraFrameSize()
154154
Camera camera= Camera.open(i);
155155
Camera.Parameters cameraParams=camera.getParameters();
156156
List<Camera.Size> sizes= cameraParams.getSupportedPreviewSizes();
157-
Log.i(TAG, String.format("front sizes %d", sizes.size()));
158157
mFrontCamWidth = sizes.get(0).width;
159158
mFrontCamHeight = sizes.get(0).height;
160-
Log.i(TAG, String.format("mFrontCamWidth %d", mFrontCamWidth));
161-
Log.i(TAG, String.format("mFrontCamHeight %d", mFrontCamHeight));
162159
camera.release();
163160
} else if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_BACK) {
164161
Camera camera = Camera.open(i);
165162
Camera.Parameters cameraParams = camera.getParameters();
166163
List<Camera.Size> sizes = cameraParams.getSupportedPreviewSizes();
167-
Log.i(TAG, String.format("back sizes %d", sizes.size()));
168164
mBackCamWidth = sizes.get(0).width;
169165
mBackCamHeight = sizes.get(0).height;
170-
Log.i(TAG, String.format("mBackCamWidth %d", mBackCamWidth));
171-
Log.i(TAG, String.format("mBackCamHeight %d", mBackCamHeight));
172166
camera.release();
173167
}
174168
}
@@ -223,15 +217,12 @@ private void createCameraSource() {
223217
// Log.w(TAG, "mPictureDetector dependencies are not yet available.");
224218
// }
225219

226-
//.setRequestedPreviewSize(640, 480)
227-
//.setRequestedFps(30.0f)
228-
//.setFacing(CameraSource.CAMERA_FACING_BACK)
229220
calcCameraFrameSize();
230221
mCameraSource = new CameraSource.Builder(context, customDetector)
231222
.setRequestedPreviewSize(mBackCamWidth, mBackCamHeight)
232223
.setFacing(CameraSource.CAMERA_FACING_BACK)
233224
.setAutoFocusEnabled(true)
234-
.setRequestedFps(20)
225+
.setRequestedFps(10)
235226
.build();
236227

237228
// mBtnDetect.setOnClickListener(new View.OnClickListener() {
@@ -324,6 +315,7 @@ public void onRequestPermissionsResult(int requestCode, String[] permissions, in
324315
if (grantResults.length != 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
325316
Log.d(TAG, "Camera permission granted - initialize the camera source");
326317
// we have permission, so create the camerasource
318+
mFaceRecognizer.loadNative();
327319
createCameraSource();
328320

329321
return;

FaceTracker/app/src/main/java/com/google/android/gms/samples/vision/face/facetracker/ui/camera/CameraSourcePreview.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -149,10 +149,10 @@ protected void onLayout(boolean changed, int left, int top, int right, int botto
149149
int childHeight = (int)(((float) layoutWidth / (float) width) * height);
150150

151151
// If height is too tall using fit width, does fit height instead.
152-
if (childHeight > layoutHeight) {
153-
childHeight = layoutHeight;
154-
childWidth = (int)(((float) layoutHeight / (float) height) * width);
155-
}
152+
// if (childHeight > layoutHeight) {
153+
// childHeight = layoutHeight;
154+
// childWidth = (int)(((float) layoutHeight / (float) height) * width);
155+
// }
156156

157157
for (int i = 0; i < getChildCount(); ++i) {
158158
getChildAt(i).layout(0, 0, childWidth, childHeight);

0 commit comments

Comments
 (0)