8

フロントカメラフレーム内の顔の数を検出したい。これを使用して画像を取得したら、顔を検出できます: http://www.developer.com/ws/android/programming/face-detection-with-android-apis.html。しかし、ユーザーの操作なしで 30 秒ごとに前面カメラを使用して画像をキャプチャする方法がわかりません。誰か助けてください。

4

3 に答える 3

4

次のコードは、5 秒ごとにカメラから写真をキャプチャします。

if (TIMER_STARTED) {
    multishotTimer.cancel();
    multishotTimer.purge();
    TIMER_STARTED = false;
} else {
    multishotTimer = new Timer();
    multishotTimer.schedule(new TimerTask() {
        @Override
        public void run() {
            TIMER_STARTED = true;
            Camera camera = surfaceView.getCamera();
            camera.takePicture(null, null,
                new HandlePictureStorage());
        }
    }, 1000, 5000L);
}

ここで、TIMER_STARTEDはブール値で、タイマーが実行中かどうかを示します。

以下はHandlePictureStorageのコードです

private class HandlePictureStorage implements PictureCallback {
    @Override
    public void onPictureTaken(byte[] picture, final Camera camera) {
    //do something when picture is captured...
    }
}
于 2013-05-09T13:22:01.133 に答える
1

次のように、SurfaceView を手動で作成し、カメラをプレビューすることができます。

//First get a reference to the SurfaceView displaying the camera preview
cameraSurface = (SurfaceView) findViewById(R.id.cameraSurface);
cameraSurfaceHolder = cameraSurface.getHolder();
cameraSurfaceHolder.addCallback(cameraSurfaceHolderCallbacks);
.
.
.
private SurfaceHolder.Callback cameraSurfaceHolderCallbacks = new SurfaceHolder.Callback() {

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        if(mCamera == null)return;
        mCamera.stopPreview();
        mCamera.release();
        mCamera = null;
    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {

        try {
            mCamera = Camera.open();
            mCamera.setPreviewDisplay(holder);
        } catch (Exception exception) {
            if(mCamera == null)return;
            mCamera.release();
            mCamera = null; 
        }
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
        Parameters cameraParameters = mCamera.getParameters();
        cameraParameters.setPreviewSize(320, 240);
        cameraParameters.setPictureSize(320, 240);
        int avrgExposure = (cameraParameters.getMinExposureCompensation() + cameraParameters.getMaxExposureCompensation())/2;
        cameraParameters.setExposureCompensation(avrgExposure);
        mCamera.setParameters(cameraParameters);
        mCamera.startPreview();
        mCamera.takePicture(null, null, mPictureCallback);
    }
};

マニフェストに適切なカメラ許可を追加することを忘れないでください。

<uses-permission android:name="android.permission.CAMERA"/>

最後に、Android 4.0 以降のデバイスを使用している場合は、次の方法を使用できます。

mCamera.startFaceDetection();
.
.
.
private FaceDetectionListener faceDetectionListener = new FaceDetectionListener() {

    @Override
    public void onFaceDetection(Face[] faces, Camera camera) {
        //Faces have been detected...
    }
};
.
.
.
mCamera.setFaceDetectionListener(faceDetectionListener);

この記事では、その特定の機能に関連するすべてを説明し、ダウンロードして自分で実行できる機能的な Android ソース コードも提供しています。

よろしく!

于 2014-01-25T00:29:43.660 に答える
-1

RTC_WAKEUP Alarmを使用して をスケジュールしAlarmManager、30 秒ごとに を に設定PendingIntentしてAlarmを起動しService、 内で にServiceアクセスしCameraて画像をキャプチャする必要があります。

あなたはおそらくこの投稿を見るべきです: Open/Run camera from a background Service .

于 2013-05-09T13:00:03.980 に答える