我是第一次使用 Camera X,但找不到方法来检查设备在运行时是否有前置或后置摄像头...
我只需要使用预览,我不捕获图像,所以我不能使用按钮。
private var lensFacing = CameraX.LensFacing.FRONT
val viewFinderConfig = PreviewConfig.Builder().apply {
setLensFacing(lensFacing)
setTargetAspectRatio(screenAspectRatio)
setTargetRotation(viewFinder.display.rotation)
}.build()
Run Code Online (Sandbox Code Playgroud)
如果用户设备没有前置摄像头,如何确保应用程序不会崩溃?提前致谢!
我正在 Android 上使用新的 CameraX。
我做了一个基本的应用程序(类似于“入门”),其中有相机预览和亮度分析仪。每一秒我都会在 TextView 中显示我的亮度。
现在,按照 CameraX 指南,我想进行颜色检测。大约每隔一秒,我就希望获得屏幕中心像素的颜色。
事实上,我不知道如何按照与亮度分析仪相同的结构进行颜色检测。
光度分析仪类别:
class LuminosityAnalyzer : ImageAnalysis.Analyzer {
private var lastTimeStamp = 0L
private val TAG = this.javaClass.simpleName
var luma = BehaviorSubject.create<Double>()
override fun analyze(image: ImageProxy, rotationDegrees: Int) {
val currentTimeStamp = System.currentTimeMillis()
val intervalInSeconds = TimeUnit.SECONDS.toMillis(1)
val deltaTime = currentTimeStamp - lastTimeStamp
if(deltaTime >= intervalInSeconds) {
val buffer = image.planes[0].buffer
val data = buffer.toByteArray()
val pixels = data.map { it.toInt() and 0xFF }
luma.onNext(pixels.average())
lastTimeStamp = currentTimeStamp
Log.d(TAG, "Average luminosity: …Run Code Online (Sandbox Code Playgroud) android android-camera kotlin color-detection android-camerax
我正在使用 CameraX 开发我的 android 应用程序,其中当我在横向模式或纵向模式下拍摄照片时,捕获和保存的图像是镜像。
我知道前置摄像头的工作方式相同。但是,如果我想以与拍摄照片相同的方式保存照片,该怎么办?
这是buildUseCase()我正在使用的代码:
private fun buildUseCases() {
val screenAspectRatio = Rational(width, height)
val screenTargetRotation = display.rotation
//Preview
val previewConfig = PreviewConfig.Builder().apply {
setTargetAspectRatio(screenAspectRatio)
setTargetRotation(screenTargetRotation)
setLensFacing(lensFacing)
}.build()
preview = AutoFitPreviewBuilder.build(previewConfig, this)
//End - Preview
// Set up the capture use case to allow users to take photos
val imageCaptureConfig = ImageCaptureConfig.Builder().apply {
setTargetAspectRatio(screenAspectRatio)
setTargetRotation(screenTargetRotation)
setLensFacing(lensFacing)
setCaptureMode(ImageCapture.CaptureMode.MAX_QUALITY)
}.build()
imageCapture = ImageCapture(imageCaptureConfig)
}
Run Code Online (Sandbox Code Playgroud)
请帮助我进行更改以获取正确的图像。
注意:相机面向前方且处于横向模式。
我正在尝试使用 Java 实现 CameraX。我不明白他们为什么用这样的说法。
new ImageCaptureConfig.Builder().build();
new PreviewConfig.Builder().build();
Run Code Online (Sandbox Code Playgroud)
每当我尝试实现时,它都会显示编译错误,并且 Builder 类仍保持红色。
编译错误:
reference to 'Builder' is ambigious, both 'androidx.camera.core.impl.UseCaseConfig.Builder' and 'androidx.camera.core.impl.ImageOutputConfig.Builder'
Run Code Online (Sandbox Code Playgroud)
进口:
import androidx.camera.core.impl.ImageCaptureConfig;
Run Code Online (Sandbox Code Playgroud)
我在 ImageCaptureConfig.java 文件中没有找到任何内部类“Builder”。然而,
Builder 用于接口 UseCaseConfig.java 和 ImageOutputConfig.java,后者已由 ImageCaptureConfig.java 实现。我这里如何实现Builder并避免二义性错误?
我已使用开发人员网站上的最新依赖项和说明。我没有明白我错在哪里。
嗨,我正在使用 CameraX api 构建自定义相机,在将更新的库依赖项添加到 build.gradle 文件后,出现以下构建错误
清单合并失败:uses-sdk:minSdkVersion 16 不能小于库 [androidx.camera:camera-extensions:1.0.0-alpha08] /Users/.gradle/caches/transforms-2/files-2.1/ 中声明的版本 21/ f20dc98c605a4c4dbd6030601f9665d3/camera-extensions-1.0.0-alpha08/AndroidManifest.xml 因为该库可能使用了 16 中不可用的 API 建议:使用 minSdk 至多为 16 的兼容库,或将此项目的版本至少增加至 minS21 , 或者使用 tools:overrideLibrary="androidx.camera.extensions" 强制使用(可能会导致运行时失败)
build.gradle 文件
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
android {
compileSdkVersion 29
buildToolsVersion "29.0.3"
defaultConfig {
applicationId ""
minSdkVersion 16
targetSdkVersion 29
versionCode 1
versionName "1.0"
multiDexEnabled true
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions …Run Code Online (Sandbox Code Playgroud) 我尝试使用 Android 开发人员文档使用 CameraX 实现 MLKit 文本分析器。我的期望是分析器将在每一帧上运行,但它只运行一次,当预览初始化时。文本由 MLKit 分析,但只有在我旋转屏幕并重新启动片段时才会执行分析。为什么会发生这种情况?
在我使用的 XML 中<androidx.camera.view.PreviewView .../>。
在片段中:
private lateinit var cameraProviderFuture: ListenableFuture<ProcessCameraProvider>
private fun startCamera() {
context?.let { ctx ->
cameraProviderFuture = ProcessCameraProvider.getInstance(ctx)
cameraProviderFuture.addListener(Runnable {
val cameraProvider = cameraProviderFuture.get()
bindPreview(cameraProvider)
}, ContextCompat.getMainExecutor(ctx))
}
}
private fun bindPreview(cameraProvider: ProcessCameraProvider) {
val preview: Preview = Preview.Builder()
.build()
val cameraSelector: CameraSelector = CameraSelector.Builder()
.requireLensFacing(CameraSelector.LENS_FACING_BACK)
.build()
val analyzer = ImageAnalysis.Builder()
.setTargetResolution(Size(1280, 720))
.setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
.build().apply {
setAnalyzer(Executors.newSingleThreadExecutor(), TextAnalyzer())
}
val camera = cameraProvider.bindToLifecycle(viewLifecycleOwner, cameraSelector, …Run Code Online (Sandbox Code Playgroud) 我想将 CameraX 预览从 previewView 转换为位图。类似于 textureView.bitmap 的东西
我已经用纹理视图尝试过它并且效果很好,我可以截取相机视图的屏幕截图,但相机被拉伸了。
screenshot bitmap android-bitmap takesscreenshot android-camerax
camerax cameraView 和 previewView 有什么区别?因为我找不到有关比较 2 视图以预览 camerax 的资源或文章
Google 的 MLKit(不含 Firebase)是新的,所以我遇到了麻烦。我试图在这里遵循这个例子: https: //developers.google.com/ml-kit/vision/object-detection/custom-models/android
该应用程序可以正常打开,并且相机可以正常工作(例如,我可以看到东西)。但实际检测似乎不起作用。
我是否缺少实际检测对象的部分代码?或者是CameraX或ImageInput的实现有问题?
package com.example.mlkitobjecttest;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.camera.core.Camera;
import androidx.camera.core.CameraSelector;
import androidx.camera.core.CameraX;
import androidx.camera.core.ImageAnalysis;
import androidx.camera.core.ImageProxy;
import androidx.camera.core.Preview;
import androidx.camera.core.impl.PreviewConfig;
import androidx.camera.lifecycle.ProcessCameraProvider;
import androidx.camera.view.PreviewView;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.lifecycle.LifecycleOwner;
import android.content.pm.PackageManager;
import android.graphics.Rect;
import android.media.Image;
import android.os.Bundle;
import android.text.Layout;
import android.util.Rational;
import android.util.Size;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.common.util.concurrent.ListenableFuture;
import com.google.mlkit.common.model.LocalModel;
import com.google.mlkit.vision.common.InputImage;
import com.google.mlkit.vision.objects.DetectedObject;
import com.google.mlkit.vision.objects.ObjectDetection;
import com.google.mlkit.vision.objects.ObjectDetector;
import com.google.mlkit.vision.objects.custom.CustomObjectDetectorOptions;
import org.w3c.dom.Text;
import java.util.List; …Run Code Online (Sandbox Code Playgroud) 每次调用 scanr.process(image) 都会导致 onFailure 调用,并出现以下错误:
错误:com.google.mlkit.common.MlKitException:执行机器学习套件任务时发生内部错误
关于为什么任务失败的任何进一步细节或想法?用条形码显示它似乎也不会改变这种行为。
使用 Pixel 3a 时会显示此错误,但会导致 Nexus 5 完全崩溃并出现 SIGENV 错误。在阅读概述时,我一直在从片段构建我的代码
package jp.oist.cameraxapp;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.camera.core.Camera;
import androidx.camera.core.CameraSelector;
import androidx.camera.core.ImageAnalysis;
import androidx.camera.core.ImageCapture;
import androidx.camera.core.ImageProxy;
import androidx.camera.core.Preview;
import androidx.camera.lifecycle.ProcessCameraProvider;
import androidx.camera.view.PreviewView;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.lifecycle.LifecycleOwner;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.media.Image;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
import android.widget.Toast;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
import com.google.common.util.concurrent.ListenableFuture;
import com.google.mlkit.vision.barcode.Barcode;
import …Run Code Online (Sandbox Code Playgroud) android-camerax ×10
android ×9
java ×3
google-mlkit ×2
kotlin ×2
androidx ×1
bitmap ×1
screenshot ×1
textureview ×1