저는 OpenCV 및 Android Camera로 작업했습니다. 그것은 시작하기가 그렇게 어렵지 않습니다. 프레임을 처리하기 위해 JNI를 사용했습니다. 당신이해야 할 일들.
- 사용 android.hardware.Camera
OnPreviewFrame
방법의 SurfaceHolder.Callback 및 Camera.PreviewCallback
를 확장하는 클래스를 작성하는 것 아마 NV21
의 형식 (byte[]
데이터를 얻을 수 YUV) RGBA로 변환하거나 필요에 맞게 변환해야합니다. 프레임 데이터를 얻은 후에는 UI 스레드를 방해하지 않도록 프레임을 처리 할 백그라운드 스레드를 만들어야합니다.
private class ProcessPreviewDataTask
extends
AsyncTask<byte[], Void, Boolean> {
@Override
protected Boolean doInBackground(byte[]... datas) {
mState = STATE_PROCESS_IN_PROGRESS;
Log.i(TAG, "background process started");
byte[] data = datas[0];
/* JNI Call here */
mCamera.addCallbackBuffer(data);
mProcessInProgress = false;
return true;
}
@Override
protected void onPostExecute(Boolean result) {
mState = STATE_PROCESS;
threadInProcess = false;
}
}
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
if (data == null) {
Log.i(TAG, "data is null");
return;
}
int expectedBytes = previewWidth * previewHeight *
ImageFormat.getBitsPerPixel(ImageFormat.NV21)/8;
if (expectedBytes != data.length) {
Log.e(TAG, "Mismatched size of buffer! Expected ");
mState = STATE_NO_CALLBACKS;
mCamera.setPreviewCallbackWithBuffer(null);
return;
}
if (mProcessInProgress) {
mCamera.addCallbackBuffer(data);
return;
}
if (mState == STATE_PROCESS) {
mProcessInProgress = true;
processDataTask = new ProcessPreviewDataTask();
processDataTask.execute(data);
} else {
mCamera.addCallbackBuffer(data);
return;
}
}
난 당신이 사용할 수있는 샘플 코드가 있습니다. 당신은 그것을
here 찾을 수 있습니다.
나는이 개 프로그램이 하나 개 더 질문 .. 있습니다 1 - 않는이 이미지 처리 물건 2 - 나는 2 프로그램을 만들기 위해 1을 호출하는 필요한 다른 물건 않는 또 다른 하나 (아무 것도 보이지 않고 프로그램 2가 계속 작동하기 때문에 서비스처럼) 그래서 정말로 필요한 것은 프로그램 1입니다. 그래서 프로그램 1 서비스를 호출하는 프로그램 2를 실행 한 다음 program2가 닫히면 서비스 1을 닫습니다. 이 프로그램을 어떻게 서비스로 만들 수 있습니까? –
정말 혼란 스럽습니다. 이미지 처리 부분을 서비스로 실행하고 싶습니까? 이미지 처리 만 포함하거나 카메라에 액세스하는 것도 포함됩니까? 내가 만든 앱은 비슷한 기능을합니다. 긴 노출 사진을 만듭니다. 따라서 사용자가 시작 버튼을 누르면 이미지 처리 부가 시작되고 사용자가 중지 버튼을 누르면 중지됩니다. 또한 거기에 일시 중지 및 다시 시작 기능이 포함되어 있습니다. 비슷한 것을 찾고 계십니까? – Froyo
카메라에 액세스하여 이미지 처리 작업을 수행하는 앱이 필요합니다. (실시간 처리) 다른 앱이 다른 작업을하는 동안 해당 앱/서비스 또는 그와 유사한 작업을 계속해야합니다. –