标签: android-camerax

将ImageProxy转换为位图

因此,我想探索新的Google的Camera API- CameraX。我想做的是每秒从相机提要中获取一张图像,然后将其传递到接受位图的功能中,以进行机器学习。

我阅读了有关Camera XImage Analyzer 的文档:

图像分析用例为您的应用提供了CPU可访问的图像,以执行图像处理,计算机视觉或机器学习推断。该应用程序实现在每个框架上运行的Analyzer方法。

..这基本上是我需要的。因此,我实现了这个图像分析器,如下所示:

imageAnalysis.setAnalyzer { image: ImageProxy, _: Int ->
    viewModel.onAnalyzeImage(image)
}
Run Code Online (Sandbox Code Playgroud)

我得到的是image: ImageProxy。我该如何将其转移ImageProxyBitmap

我试图这样解决:

fun decodeBitmap(image: ImageProxy): Bitmap? {
    val buffer = image.planes[0].buffer
    val bytes = ByteArray(buffer.capacity()).also { buffer.get(it) }
    return BitmapFactory.decodeByteArray(bytes, 0, bytes.size)
}
Run Code Online (Sandbox Code Playgroud)

但是它返回null-因为decodeByteArray没有收到有效的(?)位图字节。有任何想法吗?

android android-camerax

6
推荐指数
5
解决办法
1606
查看次数

Jetpack 的 Camerax - 是否有拍摄连拍图像或保存 DNG 文件的功能?

我已经阅读了 camerax 教程(https://developer.android.com/training/camerax),以及一些文档(https://developer.android.com/reference/androidx/camera/core/ImageCapture)。但是我没有找到负责拍摄连拍图像的部分,也没有保存到 DNG 文件(RAW 格式)。我在 github ( https://github.com/android/camera/issues )上的问题中遇到过类似但没有回答的问题。所以我在这里重新发布问题。

android android-camerax

6
推荐指数
1
解决办法
304
查看次数

Android CameraX GLSurfaceView

拜托,有人可以提供在 GLSurfaceView 中使用 CameraX 库的好例子,找不到任何信息。

android glsurfaceview android-camerax

6
推荐指数
1
解决办法
825
查看次数

OnImageSavedCallback 返回的 OutputFileResults 具有无效的 Uri

我正在使用 CameraX 在我的 android 应用程序中拍照,保存它们,然后从它们的路径中显示它们。在之前的 alpha-09 版本中,我可以使用 onImageSaved(File file) 来做到这一点。但是,对于 alpha-10,我必须使用 onImageSaved(OutputFileResults outputFileResults),然后从 outputFileResults 检索的 uri 中获取路径。但是我得到的 Uri 总是错误的。例如,当我的图像保存在:“/external/images/media/1581680878237.jpg”时,我得到 uri 的路径:“/external/images/media/113758”。

这是我的代码:

                ContentValues contentValues = new ContentValues();
                contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, "NEW_IMAGE");
                contentValues.put(MediaStore.MediaColumns.MIME_TYPE, "image/jpg");

                ImageCapture.OutputFileOptions outputFileOptions = new ImageCapture.OutputFileOptions.Builder(
                        activity.getContentResolver(),
                        MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                        contentValues).build();

                imageCapture.takePicture(outputFileOptions, Runnable::run, new ImageCapture.OnImageSavedCallback() {
                    @Override
                    public void onImageSaved(@NonNull ImageCapture.OutputFileResults outputFileResults) {
                        Uri uri = outputFileResults.getSavedUri();
                        if(uri != null){
                            System.out.println("URI PATH" + uri.getPath());
                            System.out.println("URI PATH" + uri.toString());
                            activity.runOnUiThread(cameraProvider::unbindAll);
                            galleryAddPic(uri);
                            Bundle params = new Bundle();
                            params.putString("FILE_PATH", uri.getPath());
                            Navigation.findNavController(root).navigate(R.id.navigation_edit_image, params);
                        }
                    }

                    @Override …
Run Code Online (Sandbox Code Playgroud)

uri android-camerax

6
推荐指数
2
解决办法
2191
查看次数

6
推荐指数
2
解决办法
6549
查看次数

Android CameraX - 动态附加 ImageAnalysis.Analyzer

我已经实现了我自己的子类ImageAnalysis.Analyzer并且它按预期工作。现在我想ImageAnalysis动态地“附加/分离”这个分析器到类(基于一些用户操作)。从ImageAnalysisAPI来看好像是可以的,有setAnalyzer方法,也有clearAnalyzer方法。但是,这仅在第一次setAnalyzer调用时才能正常工作。如果我一次clearAnalyzer又一次地调用setAnalyzeranalyze则不会调用方法。

在方法的文档中clearAnalyzer

Removes a previously set analyzer.

This will stop data from streaming to the ImageAnalysis.
Run Code Online (Sandbox Code Playgroud)

所以看起来它的工作可能如预期的那样正确?它将停止数据流向ImageAnalysis. 但是可以按照我想要的方式清除/设置分析仪吗?我不想enabled向我的分析器添加一些布尔标志,存在线程问题、图像队列问题,并且使用 set/clear 的解决方案将是我认为最干净的解决方案。

android android-camerax

6
推荐指数
1
解决办法
1027
查看次数

尝试创建生命周期被破坏的 LifecycleCamera

我正在尝试为我的屏幕录像机应用程序制作浮动相机视图。

FloatingViewService.java

public class FloatingViewService extends LifecycleService implements CameraXConfig.Provider, LifecycleOwner {
    private View mFloatingView;
    private WindowManager mWindowManager;
    PreviewView previewView;
    private ListenableFuture<ProcessCameraProvider> cameraProviderFuture;

    public FloatingViewService() {
    }


    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        super.onBind(intent);
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        mFloatingView = LayoutInflater.from(this).inflate(R.layout.layout_floating_widget, null);
        final WindowManager.LayoutParams params;
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
            params = new WindowManager.LayoutParams(
                    WindowManager.LayoutParams.WRAP_CONTENT,
                    WindowManager.LayoutParams.WRAP_CONTENT,
                    WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
                    WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
                    PixelFormat.TRANSLUCENT);

        } else {
            params = new WindowManager.LayoutParams(
                    WindowManager.LayoutParams.WRAP_CONTENT,
                    WindowManager.LayoutParams.WRAP_CONTENT,
                    WindowManager.LayoutParams.TYPE_PHONE,
                    WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
                    PixelFormat.TRANSLUCENT);

        }
        params.width = 400; …
Run Code Online (Sandbox Code Playgroud)

java android android-lifecycle android-camerax lifecycleowner

6
推荐指数
1
解决办法
337
查看次数

camerax 示例:未解析的参考:WindowManager

我正在尝试编译示例cameraxbasic,但出现此错误:未解析的参考:WindowManager 我检查了 gradle 文件,并且存在该依赖项。

android-camerax

6
推荐指数
1
解决办法
1657
查看次数

如何根据预览显示上的矩形裁剪 CameraX 捕获的图像

你好,我是android开发新手,谁能帮我根据PreviewView上的矩形裁剪CameraX捕获的图像?

这是activity_main.xml:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/frameRoot"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <androidx.camera.view.PreviewView
            android:id="@+id/viewFinder"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

        <View
            android:id="@+id/viewOverlay_center"
            android:background="@drawable/card_rectangle"
            android:layout_width="270dp"
            android:layout_height="400dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintBottom_toTopOf="@id/ll_bottom"/>

        <LinearLayout
            android:id="@+id/ll_bottom"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:background="@color/black"
            android:gravity="center"
            android:orientation="horizontal"
            android:padding="16dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent">

            <ImageView
                android:id="@+id/image_capture_button"
                android:layout_width="60dp"
                android:layout_height="60dp"
                android:background="?android:selectableItemBackground"
                android:src="@drawable/shutter_camera" />
        </LinearLayout>
        
    </androidx.constraintlayout.widget.ConstraintLayout>

</FrameLayout>
Run Code Online (Sandbox Code Playgroud)

这是我的MainActivity.java:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        viewBinding = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(viewBinding.getRoot());

        viewBinding.imageCaptureButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                capturePhoto();
            }
        });
    }

    private void capturePhoto(){
        if (imageCapture == null) …
Run Code Online (Sandbox Code Playgroud)

android android-studio android-camerax

6
推荐指数
1
解决办法
3631
查看次数

如何使用 Jetpack Compose 将相机预览缩放到半透明背景中的任何给定尺寸或形状

我有一个带有半透明背景的对话框片段。我想以圆形或方形的形式在此对话框片段上放置相机预览。

设置比例类型为 时PreviewView.ScaleType.FIT_CENTER,预览如下:

带黑色边框的相机预览

而如果我将比例类型设置为PreviewView.ScaleType.FILL_CENTER,则预览如下:

相机预览溢出超出设定边界

以下代码是我用于相机预览可组合项的代码:

@Composable
private fun CameraPreview(
    modifier: Modifier = Modifier,
    scaleType: PreviewView.ScaleType = PreviewView.ScaleType.FILL_CENTER,
    onUseCase: (UseCase) -> Unit
) {
    AndroidView(
        modifier = modifier,
        factory = { context ->
            val previewView = PreviewView(context).apply {
                this.scaleType = scaleType
                layoutParams = ViewGroup.LayoutParams(
                    ViewGroup.LayoutParams.WRAP_CONTENT,
                    ViewGroup.LayoutParams.WRAP_CONTENT
                )
            }
            onUseCase(
                Preview.Builder()
                    .build()
                    .also {
                        it.setSurfaceProvider(previewView.surfaceProvider)
                    }
            )
            previewView
        }
    )
}
Run Code Online (Sandbox Code Playgroud)

我尝试为布局参数设置整数值,但这似乎没有帮助。我怎样才能设置相机预览,使其适合边界,并且不会超出边界或在边界周围留下黑色边框?

这是供参考的图像,它显示了我想要实现的目标:

我想要实现的目标的图片

android kotlin android-camerax android-jetpack-compose

6
推荐指数
1
解决办法
1243
查看次数