activity_layout
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity"> <package.FaceOverlayView
android:id="@+id/face_overlay"
android:layout_width="wrap_content"
android:layout_height="wrap_content" /> </LinearLayout>
MainActivity
public class MainActivity extends AppCompatActivity { private FaceOverlayView mFaceOverlayView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mFaceOverlayView = (FaceOverlayView) findViewById(R.id.face_overlay); mFaceOverlayView.setBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.img_2)); } }
FaceOverlayView
public class FaceOverlayView extends View { private Bitmap mBitmap; private SparseArray<Face> mFaces; public FaceOverlayView(Context context) { this(context, null); } public FaceOverlayView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public FaceOverlayView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public void setBitmap(Bitmap bitmap) { mBitmap = bitmap; FaceDetector detector = new FaceDetector.Builder(getContext()) .setTrackingEnabled(true) .setLandmarkType(FaceDetector.ALL_LANDMARKS) .setMode(FaceDetector.ACCURATE_MODE) .build(); if (!detector.isOperational()) { //Handle contingency } else { Frame frame = new Frame.Builder().setBitmap(bitmap).build(); mFaces = detector.detect(frame); detector.release(); } invalidate(); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if ((mBitmap != null) && (mFaces != null)) { drawBitmap(canvas); } } private void drawBitmap(Canvas canvas) { double viewWidth = canvas.getWidth(); double viewHeight = canvas.getHeight(); double imageWidth = mBitmap.getWidth(); double imageHeight = mBitmap.getHeight(); int size = 200; float left = 0; float top = 0; float right = 0; float bottom = 0; for (int i = 0; i < mFaces.size(); i++) { Face face = mFaces.valueAt(i); left = (float) (face.getPosition().x); top = (float) (face.getPosition().y); right = (float) (face.getPosition().x + face.getWidth()); bottom = (float) (face.getPosition().y + face.getHeight()); } Rect src = new Rect((int) left, (int) top, (int) right, (int) bottom); Rect dst = new Rect(0, 0, size, size); canvas.drawBitmap(mBitmap, src, dst, null); } }
No comments:
Post a Comment