在检测到的面部上显示圆圈 - Android
Display Circle on Face Detected- Android
我做了视频抓拍和人脸检测应用。我想在检测到的面部上显示一个圆圈,并在 Myview class 中使用以下方法,检查它是否有效:
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawCircle(50f,50f,50f, paint);
}
我有带有 CameraPreview 的相对布局。我在哪里可以调用 MyView Class 以获得所需的功能?
您可以在使用 canvas 检测到的面部上显示圆圈,这是一个示例
import com.google.android.gms.vision.face.Face;
/**
* Created by echessa on 8/31/15.
*/
public class CustomView extends View {
private Bitmap mBitmap;
private SparseArray<Face> mFaces;
public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
}
/**
* Sets the bitmap background and the associated face detections.
*/
void setContent(Bitmap bitmap, SparseArray<Face> faces) {
mBitmap = bitmap;
mFaces = faces;
invalidate();
}
/**
* Draws the bitmap background and the associated face landmarks.
*/
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if ((mBitmap != null) && (mFaces != null)) {
double scale = drawBitmap(canvas);
drawFaceRectangle(canvas, scale);
}
}
/**
* Draws the bitmap background, scaled to the device size. Returns the scale for future use in
* positioning the facial landmark graphics.
*/
private double drawBitmap(Canvas canvas) {
double viewWidth = canvas.getWidth();
double viewHeight = canvas.getHeight();
double imageWidth = mBitmap.getWidth();
double imageHeight = mBitmap.getHeight();
double scale = Math.min(viewWidth / imageWidth, viewHeight / imageHeight);
Rect destBounds = new Rect(0, 0, (int)(imageWidth * scale), (int)(imageHeight * scale));
canvas.drawBitmap(mBitmap, null, destBounds, null);
return scale;
}
/**
* Draws a rectangle around each detected face
*/
private void drawFaceRectangle(Canvas canvas, double scale) {
Paint paint = new Paint();
paint.setColor(Color.GREEN);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(5);
for (int i = 0; i < mFaces.size(); ++i) {
Face face = mFaces.valueAt(i);
canvas.drawRect((float)(face.getPosition().x * scale),
(float)(face.getPosition().y * scale),
(float)((face.getPosition().x + face.getWidth()) * scale),
(float)((face.getPosition().y + face.getHeight()) * scale),
paint);
}
}
}
更多信息http://www.sitepoint.com/face-detection-in-android-with-google-play-services/
我做了视频抓拍和人脸检测应用。我想在检测到的面部上显示一个圆圈,并在 Myview class 中使用以下方法,检查它是否有效:
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawCircle(50f,50f,50f, paint);
}
我有带有 CameraPreview 的相对布局。我在哪里可以调用 MyView Class 以获得所需的功能?
您可以在使用 canvas 检测到的面部上显示圆圈,这是一个示例
import com.google.android.gms.vision.face.Face;
/**
* Created by echessa on 8/31/15.
*/
public class CustomView extends View {
private Bitmap mBitmap;
private SparseArray<Face> mFaces;
public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
}
/**
* Sets the bitmap background and the associated face detections.
*/
void setContent(Bitmap bitmap, SparseArray<Face> faces) {
mBitmap = bitmap;
mFaces = faces;
invalidate();
}
/**
* Draws the bitmap background and the associated face landmarks.
*/
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if ((mBitmap != null) && (mFaces != null)) {
double scale = drawBitmap(canvas);
drawFaceRectangle(canvas, scale);
}
}
/**
* Draws the bitmap background, scaled to the device size. Returns the scale for future use in
* positioning the facial landmark graphics.
*/
private double drawBitmap(Canvas canvas) {
double viewWidth = canvas.getWidth();
double viewHeight = canvas.getHeight();
double imageWidth = mBitmap.getWidth();
double imageHeight = mBitmap.getHeight();
double scale = Math.min(viewWidth / imageWidth, viewHeight / imageHeight);
Rect destBounds = new Rect(0, 0, (int)(imageWidth * scale), (int)(imageHeight * scale));
canvas.drawBitmap(mBitmap, null, destBounds, null);
return scale;
}
/**
* Draws a rectangle around each detected face
*/
private void drawFaceRectangle(Canvas canvas, double scale) {
Paint paint = new Paint();
paint.setColor(Color.GREEN);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(5);
for (int i = 0; i < mFaces.size(); ++i) {
Face face = mFaces.valueAt(i);
canvas.drawRect((float)(face.getPosition().x * scale),
(float)(face.getPosition().y * scale),
(float)((face.getPosition().x + face.getWidth()) * scale),
(float)((face.getPosition().y + face.getHeight()) * scale),
paint);
}
}
}
更多信息http://www.sitepoint.com/face-detection-in-android-with-google-play-services/