gpt4 book ai didi

android - Tensorflow 的应用程序相机图像模糊

转载 作者:行者123 更新时间:2023-12-04 04:11:40 25 4
gpt4 key购买 nike

我要实现的目标:

enter image description here

我使用我的 tensorflow 应用程序取得的成就:

enter image description here

背景:我使用的 TensorFlow lite 应用程序效果不佳,因为使用闪光灯生成的图像模糊不清,无法区分许多类似的白色物体。 (图片是在一个类似杯子的地方拍的,这是一个封闭的环境,所以闪光灯一直亮着)

如果你想复现项目,可以按照下面的说明操作:

设置工作目录

git clone https://github.com/tensorflow/examples.git

用Android Studio打开项目

按照以下步骤使用 Android Studio 打开一个项目:

  1. 打开 Android Studio。加载后选择“打开现有的Android Studio 项目”。

  2. 在文件选择器中,从您的文件中选择 examples/lite/examples/image_classification/android加载项目的工作目录。

LegacyCameraConnectionFragment.java 中,函数“onSurfaceTextureAvailable

在第90行添加~这段代码是为了一直开闪光灯(默认关闭):

List<String> flashModes = parameters.getSupportedFlashModes();
if (flashModes.contains(android.hardware.Camera.Parameters.FLASH_MODE_TORCH))
{
parameters.setFlashMode(parameters.FLASH_MODE_TORCH);
}

更多信息。关于安装可以在这里找到:https://www.tensorflow.org/lite/models/image_classification/overview#example_applications_and_guides

我尝试了什么:

首先,我尝试调整相机参数:

            previewRequestBuilder.set(
CaptureRequest.CONTROL_AF_MODE,
CaptureRequest.CONTROL_AF_MODE_MACRO);

previewRequestBuilder.set(CaptureRequest.FLASH_MODE,
CaptureRequest.FLASH_MODE_TORCH);

parameters.setFlashMode(parameters.FLASH_MODE_TORCH);
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_MACRO);
parameters.set("iso","100");
parameters.setJpegQuality(100);

然后,

我尝试使用以下代码实现自动对焦(这似乎做了一些对焦,但图像几乎保持不变)

 private Camera.AutoFocusCallback myAutoFocusCallback = new Camera.AutoFocusCallback() {

@Override
public void onAutoFocus(boolean arg0, Camera arg1) {
if (arg0) {
LegacyCameraConnectionFragment.camera.cancelAutoFocus();
}
}
};

public void doTouchFocus(final Rect tfocusRect) {
try {
Camera mCamera = LegacyCameraConnectionFragment.camera;
List<Camera.Area> focusList = new ArrayList<Camera.Area>();
Camera.Area focusArea = new Camera.Area(tfocusRect, 1000);
focusList.add(focusArea);

Camera.Parameters param = mCamera.getParameters();
param.setFocusAreas(focusList);
param.setMeteringAreas(focusList);
mCamera.setParameters(param);

mCamera.autoFocus(myAutoFocusCallback);
} catch (Exception e) {
e.printStackTrace();
}

}

@Override
public boolean onTouchEvent(MotionEvent event) {

if (event.getAction() == MotionEvent.ACTION_DOWN) {
float x = event.getX();
float y = event.getY();
Rect touchRect = new Rect(
(int) (x - 100),
(int) (y - 100),
(int) (x + 100),
(int) (y + 100));


final Rect targetFocusRect = new Rect(
touchRect.left * 2000 / previewWidth - 1000,
touchRect.top * 2000 / previewHeight - 1000,
touchRect.right * 2000 / previewWidth - 1000,
touchRect.bottom * 2000 / previewHeight - 1000);

doTouchFocus(targetFocusRect);
}

return false;

第三,我尝试检查一些 repo 协议(protocol):第一个 repo 是 Camera2Basic

https://github.com/googlearchive/android-Camera2Basic

这个 repo 产生了同样糟糕的结果。

然后我尝试了可以​​在 source-forge.net 中找到的 OpenCamera 的源代码:

https://sourceforge.net/projects/opencamera/files/test_20200301/

该应用程序产生了非常好的结果,但几天后我仍然无法弄清楚我应该从那里提取哪一部分来完成这项工作。我相信它必须与焦点有关,但我无法理解如何从那里获取代码。

我还观看了一些 YouTube 视频,并在此处浏览了 10 多篇关于 Android 的 Studio Camera API v1 和 v2 的帖子,并尝试自行修复它。

我不知道如何继续,任何想法都非常感谢。

最佳答案

您正在 LegacyCameraConnectionFragment 中使用相机 API 的非常旧实现,即 deprecated .你应该use android.hardware.camera2,在另一个 tensorflow 示例中使用,CameraConnectionFragment .最近CameraX上线了Beta,网上的例子可能会比较少,但是有人在enjoying它已经。有关 cameraX 的更多信息 here .

看起来 CameraConnectionFragment.java 已经在使用最佳 settings给你?

// Auto focus should be continuous for camera preview.
previewRequestBuilder.set(
CaptureRequest.CONTROL_AF_MODE,
CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
// Flash is automatically enabled when necessary.
previewRequestBuilder.set(
CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);

PS:我认为您不应该硬编码甚至“微调”您的相机设置,以使其仅在非常小的情况下工作。让 API 为您完成工作。

关于android - Tensorflow 的应用程序相机图像模糊,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61611050/

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