⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 detectfaces.java

📁 透過jjil在android上實現haar人臉偵測 
💻 JAVA
字号:
package jjil.app.facedetect;

import java.util.Enumeration;

import jjil.android.RgbImageAndroid;
import jjil.core.RgbImage;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Rect;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.WindowManager;

public class DetectFaces extends Activity {
	private DetectHaarParam mDhp = new DetectHaarParam();
	private static byte[] mJpegData = null;
	private FaceView mFaceView;
	RgbImage mRgbCurrent = null;
	
	public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.faces);
        mFaceView = (FaceView) findViewById(R.id.detectedFaces);
		if (mJpegData != null) {
        	runOnUiThread(new Runnable() {
        		public void run() {
        			mFaceView.resetFaces();
        			mFaceView.resetShowX();
		        	BitmapFactory.Options opt = new BitmapFactory.Options();
		        	opt.inSampleSize = 4;
		        	final Bitmap bmp = BitmapFactory.decodeByteArray(mJpegData, 0, mJpegData.length, opt);
					mFaceView.setImageBitmap(bmp);
        		}
        	});
        	
			try {
				Thread t = new Thread() {
					public void run() {
						for (int nSample = 16; nSample >= 8 && !mFaceView.hasFaces(); nSample /= 2) {
				        	BitmapFactory.Options opt = new BitmapFactory.Options();
				        	opt.inSampleSize = nSample;
				        	final Bitmap bmp = BitmapFactory.decodeByteArray(mJpegData, 0, mJpegData.length, opt);
							mRgbCurrent = RgbImageAndroid.toRgbImage(bmp);
				        	mDhp.push(mRgbCurrent);
		        	    	for (Enumeration<jjil.core.Rect> e = mDhp.getResult(); e.hasMoreElements();) {
			            		jjil.core.Rect r = e.nextElement();
			            		int nTop = (r.getTop() * mFaceView.getHeight()) / mRgbCurrent.getHeight();
			            		int nBottom = (r.getBottom() * mFaceView.getHeight()) / mRgbCurrent.getHeight();
			            		int nLeft = (r.getLeft() * mFaceView.getWidth()) / mRgbCurrent.getWidth();
			            		int nRight = (r.getRight() * mFaceView.getWidth()) / mRgbCurrent.getWidth();
			            		final Rect rDisplay = new Rect(
			            						nLeft, 
			            						nTop, 
			            						nRight, 
			            						nBottom);
			            		runOnUiThread(new Runnable() {
				            			public void run() {
						            		mFaceView.addRect(rDisplay);
				            			}
			            			}
			            		);
		        	    	};
		        	    	mRgbCurrent = null;
						};
 						runOnUiThread(new Runnable() {
		        			public void run() {
		        				mFaceView.setShowX();
		        				mFaceView.invalidate();
							}
						});
					}
				};
				t.start();
			} catch (Exception ex) {
				
			}
		}
	}
	
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        switch (keyCode) {
            case KeyEvent.KEYCODE_CAMERA:
            case KeyEvent.KEYCODE_DPAD_CENTER:
            case KeyEvent.KEYCODE_FOCUS:
            case KeyEvent.KEYCODE_BACK:
                startActivity(new Intent("jjil.app.facedetect.preview"));
                finish();
                return true;
       }
       return super.onKeyDown(keyCode, event);
    }

    public static void setJpegData(byte[] jpegData) {
		mJpegData = jpegData;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -