gpt4 book ai didi

java - 从 com.google.android.gms.vision.CameraSource 访问相机并增加/减少预览亮度

转载 作者:行者123 更新时间:2023-12-02 08:51:37 28 4
gpt4 key购买 nike

我必须在 Google Vision API 的 CameraSource 中实现来构建相机并在捕获图像之前进行面部检测。现在我遇到了一些问题,所以我需要从 CameraSource 访问相机对象。

  1. 如何使用 CameraSource 提高或降低相机预览亮度?

这是我的 CameraSource Builder

 mCameraSource = new CameraSource.Builder(context, detector)
.setRequestedPreviewSize(640, 480)
.setFacing(CameraSource.CAMERA_FACING_FRONT)
.setRequestedFps(30.0f)
.build();

这里我必须尝试从 mCameraSource 对象访问/获取相机。

Field[] declaredFields = CameraSource.class.getDeclaredFields();

for (Field field : declaredFields) {
if (field.getType() == Camera.class) {
field.setAccessible(true);
try {
Camera camera = (Camera) field.get(mCameraSource);
if (camera != null) {
Camera.Parameters params = camera.getParameters();
params.setExposureCompensation(1500);
camera.setParameters(params);
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}

}
}

相机仅返回null,我的第二个问题是如何进行亮度选项...

if (camera != null) {
Camera.Parameters params = camera.getParameters();
params.setExposureCompensation(1500);
camera.setParameters(params);
}

最佳答案

我必须这样实现我的目标,

相机亮度级别为 -12 到 12。因此最小亮度级别为 -12,最大亮度级别为 12。

现在我必须自定义 CameraSourcePreview 构造函数,例如

private int defaultBrightness = 12;

public CameraSourcePreview(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
mStartRequested = false;
mSurfaceAvailable = false;

mSurfaceView = new SurfaceView(context);
mSurfaceView.getHolder().addCallback(new SurfaceCallback());
addView(mSurfaceView);
mSurfaceView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
cameraFocus(mCameraSource, brightness);
}
});
}

private static boolean cameraFocus(@NonNull CameraSource cameraSource, int brightness) {
Field[] declaredFields = CameraSource.class.getDeclaredFields();

for (Field field : declaredFields) {
if (field.getType() == Camera.class) {
field.setAccessible(true);
try {
Camera camera = (Camera) field.get(cameraSource);
if (camera != null) {
Camera.Parameters params = camera.getParameters();
params.setExposureCompensation(brightness);
camera.setParameters(params);
return true;
}

return false;
} catch (IllegalAccessException e) {
e.printStackTrace();
}

break;
}
}

return false;
}

然后我必须通过seekbar来实现动态亮度调节。

喜欢

seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {


cameraFocus(mCameraSource,i-12);
}

@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}

@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});

seekbar xml代码

<SeekBar
android:id="@+id/seekBar1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:max="24"
android:layout_gravity="center_vertical"/>

终于,我找到了解决方案......:)

关于java - 从 com.google.android.gms.vision.CameraSource 访问相机并增加/减少预览亮度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49752955/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com