如何从此处将 FirebaseVisionFace 转换为位图?
How to convert FirebaseVisionFace to Bitmap from here?
我实现了 Firebase ML 工具包,你们能帮我如何根据这些信息创建位图并将其显示给 imageview 吗?请帮助我如何从这个阶段创建位图并将其保存到设备内存中?我试过这段代码,帮助我更深入。
public void onSuccess(List<FirebaseVisionFace> faces) {
// Task completed successfully
// ...
Log.d("Success: ", "success");
for (FirebaseVisionFace face : faces) {
Rect bounds = face.getBoundingBox();
float rotY = face.getHeadEulerAngleY(); // Head is rotated to the right rotY degrees
float rotZ = face.getHeadEulerAngleZ(); // Head is tilted sideways rotZ degrees
Log.d("rotY: ", ""+rotY);
Log.d("rotZ: ", ""+rotZ);
// If landmark detection was enabled (mouth, ears, eyes, cheeks, and
// nose available):
FirebaseVisionFaceLandmark leftEar = face.getLandmark(FirebaseVisionFaceLandmark.LEFT_EAR);
if (leftEar != null) {
FirebaseVisionPoint leftEarPos = leftEar.getPosition();
}
// If contour detection was enabled:
List<FirebaseVisionPoint> leftEyeContour =
face.getContour(FirebaseVisionFaceContour.LEFT_EYE).getPoints();
List<FirebaseVisionPoint> upperLipBottomContour =
face.getContour(FirebaseVisionFaceContour.UPPER_LIP_BOTTOM).getPoints();
// If classification was enabled:
if (face.getSmilingProbability() != FirebaseVisionFace.UNCOMPUTED_PROBABILITY) {
float smileProb = face.getSmilingProbability();
}
if (face.getRightEyeOpenProbability() != FirebaseVisionFace.UNCOMPUTED_PROBABILITY) {
float rightEyeOpenProb = face.getRightEyeOpenProbability();
}
// If face tracking was enabled:
if (face.getTrackingId() != FirebaseVisionFace.INVALID_ID) {
int id = face.getTrackingId();
}
}
}
您可以进行如下操作:
// bitmap is the image you already detected faces
Paint myRectPain = new Paint();
myRectPain.setStrokeWidth(10);
myRectPain.setColor(Color.RED);
myRectPain.setStyle(Paint.Style.STROKE);
Bitmap tempBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(),Bitmap.Config.RGB_565);
Canvas tempCanvas = new Canvas(tempBitmap);
tempCanvas.drawBitmap(bitmap,0,0,null);
for (FirebaseVisionFace face: faces) {
Rect bound = face.getBoundingBox();
tempCanvas.drawRect(bound,myRectPain);
}
// imgView is an ImageView
imgView.setImageDrawable(new BitmapDrawable(getResources(),tempBitmap));
我实现了 Firebase ML 工具包,你们能帮我如何根据这些信息创建位图并将其显示给 imageview 吗?请帮助我如何从这个阶段创建位图并将其保存到设备内存中?我试过这段代码,帮助我更深入。
public void onSuccess(List<FirebaseVisionFace> faces) {
// Task completed successfully
// ...
Log.d("Success: ", "success");
for (FirebaseVisionFace face : faces) {
Rect bounds = face.getBoundingBox();
float rotY = face.getHeadEulerAngleY(); // Head is rotated to the right rotY degrees
float rotZ = face.getHeadEulerAngleZ(); // Head is tilted sideways rotZ degrees
Log.d("rotY: ", ""+rotY);
Log.d("rotZ: ", ""+rotZ);
// If landmark detection was enabled (mouth, ears, eyes, cheeks, and
// nose available):
FirebaseVisionFaceLandmark leftEar = face.getLandmark(FirebaseVisionFaceLandmark.LEFT_EAR);
if (leftEar != null) {
FirebaseVisionPoint leftEarPos = leftEar.getPosition();
}
// If contour detection was enabled:
List<FirebaseVisionPoint> leftEyeContour =
face.getContour(FirebaseVisionFaceContour.LEFT_EYE).getPoints();
List<FirebaseVisionPoint> upperLipBottomContour =
face.getContour(FirebaseVisionFaceContour.UPPER_LIP_BOTTOM).getPoints();
// If classification was enabled:
if (face.getSmilingProbability() != FirebaseVisionFace.UNCOMPUTED_PROBABILITY) {
float smileProb = face.getSmilingProbability();
}
if (face.getRightEyeOpenProbability() != FirebaseVisionFace.UNCOMPUTED_PROBABILITY) {
float rightEyeOpenProb = face.getRightEyeOpenProbability();
}
// If face tracking was enabled:
if (face.getTrackingId() != FirebaseVisionFace.INVALID_ID) {
int id = face.getTrackingId();
}
}
}
您可以进行如下操作:
// bitmap is the image you already detected faces
Paint myRectPain = new Paint();
myRectPain.setStrokeWidth(10);
myRectPain.setColor(Color.RED);
myRectPain.setStyle(Paint.Style.STROKE);
Bitmap tempBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(),Bitmap.Config.RGB_565);
Canvas tempCanvas = new Canvas(tempBitmap);
tempCanvas.drawBitmap(bitmap,0,0,null);
for (FirebaseVisionFace face: faces) {
Rect bound = face.getBoundingBox();
tempCanvas.drawRect(bound,myRectPain);
}
// imgView is an ImageView
imgView.setImageDrawable(new BitmapDrawable(getResources(),tempBitmap));