What I Need:
To Crop out the only exact face from Image.
What I Have Done:
https://github.com/blundell/FaceDetectionTutorialWithPreview
With This way or with
https://github.com/googlesamples/android-vision
Both way I am getting Face Detected. But I am unable to crop the detected Face.
I tried with
Matrix matrix = new Matrix();
RectF sourceRect = null , destRect = null;
for (Camera.Face f : mFaces) {
// Draws a circle at the position of the detected face, with the face's track id below.
float x = translateX(f.rect.centerX() + f.rect.width() / 2);
float y = translateY(f.rect.centerY() + f.rect.height() / 2);
//canvas.drawCircle(x, y, FACE_POSITION_RADIUS, mFacePositionPaint);
// canvas.drawText("id: " + mFaceId, x + ID_X_OFFSET, y + ID_Y_OFFSET, mIdPaint);
// canvas.drawText("happiness: " + String.format("%.2f", face.getIsSmilingProbability()), x - ID_X_OFFSET, y - ID_Y_OFFSET, mIdPaint);
// canvas.drawText("right eye: " + String.format("%.2f", face.getIsRightEyeOpenProbability()), x + ID_X_OFFSET * 2, y + ID_Y_OFFSET * 2, mIdPaint);
//canvas.drawText("left eye: " + String.format("%.2f", face.getIsLeftEyeOpenProbability()), x - ID_X_OFFSET*2, y - ID_Y_OFFSET*2, mIdPaint);
// Draws a bounding box around the face.
float xOffset = scaleX(f.rect.width() / 2.0f);
float yOffset = scaleY(f.rect.height() / 2.0f);
float left = x - xOffset;
float top = y - yOffset;
float right = x + xOffset;
float bottom = y + yOffset;
sourceRect = new RectF(0, 0, source.getWidth(), source.getHeight());
destRect = new RectF(left, top, right, bottom);
Log.v("Margins: ","top: "+top+"\n"+"left: "+left+"\n"+"right: "+right+"\n"+"bottom: "+bottom+"\n");
}
matrix.setRectToRect(sourceRect, destRect, Matrix.ScaleToFit.CENTER);
matrix.postRotate(angle);
return Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(),
matrix, true);
The same code working for drawing it for canvas but while cropping its not working.
For Now, I am taking pictures of the whole view. Just need the way how to crop from that image like below.
Face Crop is a face dretection batch croppign system for Photoshop. It is the ONLY software in the industry that has a true chin to top of subject algorithm. Tall hair, granduation caps, hair bows, ect.
Android Face detection API tracks face in photos, videos using some landmarks like eyes, nose, ears, cheeks, and mouth. Rather than detecting the individual features, the API detects the face at once and then if defined, detects the landmarks and classifications.
Hi Guys Thanks for your time. I successfully cropped the images out of source bitmap using opencv.
Link i followed OpenCv Code
Code To Save cropped Face.
if ((facesArray.length>0) && (faceState==SEARCHING))
{
Mat m=new Mat();
m=mGray.submat(facesArray[0]);
mBitmap = Bitmap.createBitmap(m.width(),m.height(), Bitmap.Config.ARGB_8888);
Utils.matToBitmap(m, mBitmap);
Message msg = new Message();
String textTochange = "IMG";
msg.obj = textTochange;
//mHandler.sendMessage(msg);
textTochange = fr.predict(m);
mLikely=fr.getProb();
msg = new Message();
msg.obj = textTochange;
mHandler.sendMessage(msg);
//for saving added below code
bmpToSave = Bitmap.createBitmap(m.width(), m.height(), Bitmap.Config.ARGB_8888);
Utils.matToBitmap(m,bmpToSave);
bmpToSave= Bitmap.createScaledBitmap(bmpToSave, 128, 128, false);
File pictureFile = getOutputMediaFile();
Log.v("path: ", "" + pictureFile.getAbsolutePath());
Log.v("path: ", "" + pictureFile.getPath());
///storage/emulated/0/ABC/MI_04092018_1218.jpg
try {
FileOutputStream fos = new FileOutputStream(pictureFile);
bmpToSave.compress(Bitmap.CompressFormat.JPEG, 90, fos);
fos.close();
} catch (FileNotFoundException e) {
Log.d("FD", "File not found: " + e.getMessage());
} catch (IOException e) {
Log.d("FD", "Error accessing file: " + e.getMessage());
}
Credit goes to MIT
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With