1

Android デバイスのカメラからのフレームを使用して画像処理を行うスレッドを実行し続ける必要があります。

私は最も簡単な方法を試しました

new Thread() {

    @Override
    public void run() {
        while (true) {
            /* Processing frames here */
        }
    }
}.start();

しかし、これは CPU を大量に消費し、UI が遅れ始めます。また、UI スレッドが CPU 時間を取得できるようにフレームを処理した後に追加さThread.sleep(300)れますが、ある程度は役に立ちますが、正しい方法とは思えません。

これを処理するための良いアプローチについていくつかのアイデアを持ちたいと思います。

編集:使用AsyncTask

private DetectionTask detectionTask;

@Override
public void onPreviewFrame(byte[] data, Camera camera) {
    /* Doing some stuff here */

    camera.addCallbackBuffer(data);

    if (detectionTask != null && detectionTask.getStatus() != AsyncTask.Status.FINISHED)
        return;

    detectionTask = new DetectionTask();
    detectionTask.execute();
}

private class DetectionTask extends AsyncTask<Void, Void, float[]> {

    @Override
    protected float[] doInBackground(Void... params) {
        /* Processing frames here */
        return result;
    }

    @Override
    protected void onPostExecute(float[] result) {
        if (result != null) {
           /* Update UI */
        }
    };
};
4

4 に答える 4

1

AsyncTaskを検討しましたか?
バックグラウンドで重い負荷を処理するためだけに特別に設計されています。
バックグラウンドで重いプロセスを実行し、完了したら UI を更新します。

于 2013-09-26T04:31:34.740 に答える