Android Things - 创建相机预览会话失败,并且不显示预览

2024-07-01

我正在尝试部署 Android TensorFlow-Lite 示例,特别是检测器活动。

我已成功将其部署在平板电脑中。该应用程序运行良好,它能够检测对象,在其周围放置一个边界矩形,并带有标签和置信度。

然后,我设置了 Raspberry Pi 3 B 型板,在其中安装了 Android Things,通过 ADB 连接,然后从 Android Studio 部署了相同的程序。然而,我用于 Rπ 板的屏幕是空白的。

经检查Android Things 相机演示教程 https://github.com/weichen2046/CameraDemoForAndroidThings,我有这个想法,启用硬件加速以支持相机预览。我添加了:

android:hardwareAccelerated="true"

in the application清单的标签。

我还在应用程序标签中添加了以下内容:

<uses-library android:name="com.google.android.things" />

我的活动标签中有一个意图过滤器:

<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.IOT_LAUNCHER" />
    <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

以便 TensorFlow App 在启动后运行。

我再次部署了该应用程序,但同样的错误仍然存​​在——我无法配置预览屏幕会话。

以下是 TensorFlow 示例中包含的以下代码:

private void createCameraPreviewSession() {
    try {
        final SurfaceTexture texture = textureView.getSurfaceTexture();
        assert texture != null;

        // We configure the size of default buffer to be the size of camera preview we want.
        texture.setDefaultBufferSize(previewSize.getWidth(), previewSize.getHeight());

        // This is the output Surface we need to start preview.
        final Surface surface = new Surface(texture);

        // We set up a CaptureRequest.Builder with the output Surface.
        previewRequestBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
        previewRequestBuilder.addTarget(surface);

        LOGGER.e("Opening camera preview: " + previewSize.getWidth() + "x" + previewSize.getHeight());

        // Create the reader for the preview frames.
        previewReader =
                ImageReader.newInstance(
                        previewSize.getWidth(), previewSize.getHeight(), ImageFormat.YUV_420_888, 2);

        previewReader.setOnImageAvailableListener(imageListener, backgroundHandler);
        previewRequestBuilder.addTarget(previewReader.getSurface());

        // Here, we create a CameraCaptureSession for camera preview.
        cameraDevice.createCaptureSession(
                Arrays.asList(surface, previewReader.getSurface()),
                new CameraCaptureSession.StateCallback() {

                    @Override
                    public void onConfigured(final CameraCaptureSession cameraCaptureSession) {
                        // The camera is already closed
                        if (null == cameraDevice) {
                            return;
                        }

                        // When the session is ready, we start displaying the preview.
                        captureSession = cameraCaptureSession;
                        try {
                            // 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);

                            // Finally, we start displaying the camera preview.
                            previewRequest = previewRequestBuilder.build();
                            captureSession.setRepeatingRequest(
                                    previewRequest, captureCallback, backgroundHandler);
                        } catch (final CameraAccessException e) {
                            LOGGER.e(e, "Exception!");
                            LOGGER.e("camera access exception!");
                        }
                    }

                    @Override
                    public void onConfigureFailed(final CameraCaptureSession cameraCaptureSession) {
                        showToast("Failed");
                        LOGGER.e("configure failed!!");
                    }
                },
                null);
    } catch (final CameraAccessException e) {
        LOGGER.e("camera access exception!");
        LOGGER.e(e, "Exception!");
    }
}

错误日志位于onConfigureFailedoverride 方法,以及导致该语句的相关错误日志是:

11-12 14:02:40.677 1991-2035/org.tensorflow.demo E/CameraCaptureSession: Session 0: Failed to create capture session; configuration failed
11-12 14:02:40.679 1991-2035/org.tensorflow.demo E/tensorflow: CameraConnectionFragment: configure failed!!

然而,我无法追踪Session 0:堆栈跟踪。

除了开启硬件加速和在Manifest中添加其他几个标签之外,我还没有尝试过任何东西。

我已经完成了研究,也看到了其他示例,但它们只是通过单击按钮来拍照。我需要一个可以正常工作的相机预览。

我也有 CameraDemoForAndroidThings 示例,但恐怕我不了解 Kotlin,无法猜测它是如何工作的。

如果有人设法在 Raspberry Pi Android Things 上运行 Java 版本的 TensorFlow 检测活动,请贡献并告诉我们您是如何做到的。

UPDATE:

显然,相机一次只能支持一种流配置。我还能够推断出我必须修改createCaptureSession()函数仅使用一个表面,我的函数现在如下所示:

cameraDevice.createCaptureSession(
//                    Arrays.asList(surface, previewReader.getSurface()),
        Arrays.asList(surface),
        new CameraCaptureSession.StateCallback() {

            @Override
            public void onConfigured(final CameraCaptureSession cameraCaptureSession) {
                // The camera is already closed
                if (null == cameraDevice) {
                    return;
                }

                // When the session is ready, we start displaying the preview.
                captureSession = cameraCaptureSession;
                try {
                    // 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);

                    // Finally, we start displaying the camera preview.
                    previewRequest = previewRequestBuilder.build();
                    captureSession.setRepeatingRequest(
                            previewRequest, captureCallback, backgroundHandler);

                    previewRequestBuilder.addTarget(previewReader.getSurface());

                } catch (final CameraAccessException e) {
                    LOGGER.e("exception hit while configuring camera!");
                    LOGGER.e(e, "Exception!");
                }
            }

            @Override
            public void onConfigureFailed(final CameraCaptureSession cameraCaptureSession) {
                LOGGER.e("Configure failed!");
                showToast("Failed");
            }
        },
        null);

这使我能够获得实时预览。但是,代码不会继续将图像从预览发送到processImage() block.

有人成功实施了涉及 Android Things 实时相机预览的 TensorFlow-Lite 示例吗?


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android Things - 创建相机预览会话失败,并且不显示预览 的相关文章

  • android下拉刷新列表视图出错

    我正在使用功能下拉来刷新library https github com chrisbanes Android PullToRefresh克里斯班斯的 但是当我尝试在我的 xml 文件中导入这个小部件时 它向我显示以下错误 请帮助我如何解决
  • 使用 jsoup 收集倒计时器并为 android 设置计时器

    我想解析 eBay 上的倒计时器 span class 5g 20h span 如何用 jsoup 解析它以在 android studio 上创建倒计时器 我可以像平常一样解析它吗element 像下面这样 更新 getMsFromStr
  • 在 Eclipse 中打开 Android XML 布局的快捷方式

    例如 如果我有类似的东西 setContentView R layout activity main 有没有快捷方式可以打开activity main xml 如果没有 有没有办法创建一个 Its there Just hold Ctrl
  • 待定意图的多个实例

    我创建了一个小部件 单击该小部件会激活 PendingIntent 问题是 当我屏幕上有多个小部件时 只有最新的小部件才会启动 PendingIntent 我读过一些关于独特请求代码的内容 但没有弄清楚这一点 有什么想法可以让多个小部件和
  • Progruard 和 R8 已弃用 - Android Studio 3.6

    将 Android Studio 升级到 3 6 后 我收到了有关 Proguard 和 R8 的弃用警告 这是否意味着我们不应该在项目中使用混淆 或者在发布模式下构建时我们应该考虑另一个等效选项 选项 android enableR8 已
  • PerformException:执行“单击”时出错

    当我运行 android espresso 测试时出现错误 com google android apps common testing ui espresso PerformException 在视图 id 为 上执行 单击 时出错 我的
  • 使用 Kotlin 在 Android 中渲染 PDF

    我已经在使用 Java 的 PDF 上看到了该线程 但找不到任何有关如何使用 Kotlin 执行此操作的信息 有什么方法或者我需要使用Java吗 在 Android 上使用 Java 渲染 PDF 文件 https stackoverflo
  • 无法解析“:app@debug/compileClasspath”的依赖关系:无法解析

    新安装的安卓工作室3 1 3在创建新项目并第一次编译时出现奇怪的依赖关系错误 一个相似的question https stackoverflow com questions 46949622 android studio 3 0 unabl
  • 使用硬件键盘时 Android TabHost 选项卡会窃取焦点

    我目前有一个TabHost包含 4 个选项卡 在一些片段上我们有一些EditText布局内的视图 我们注意到 当您尝试输入任何内容时EditText使用硬件键盘的视图 焦点被窃取EditText并赋予当前活动选项卡TabHost 这只发生在
  • Android Fragment 后台事务

    我正在开发一个带有片段的应用程序 它有一个 JavaScript 接口 在主 Activity 中调用 并具有片段替换逻辑 当应用程序位于前台时 一切正常 但当应用程序位于后台时 片段事务替换不起作用 当我返回应用程序时 我仍然看到旧片段
  • Android 自定义进度条不旋转

    我想更改默认动画ProgressBar 所以我在我的主题中添加了自定义样式 样式 xml 我在我的内部调用这种风格ProgressBar具有以下内容 进度条 xml
  • Android 定期运行任务

    我想在 android 活动中定期运行一个方法 该方法会在 x 秒后更新某个字段 我知道它可以在timerTask中完成 但是最好的方法是什么 代码示例会很有帮助 你应该使用Handler和它的postDelayed功能 您可以在这里找到示
  • 如何在多个 GPU 上运行具有数据并行性的 Tensorflow Estimator

    我有一个带有某些模型的标准张量流估算器 并且希望在多个 GPU 而不是一个 上运行它 如何使用数据并行性来实现这一点 我搜索了 Tensorflow Docs 但没有找到示例 只有几句话说使用 Estimator 会很容易 有人有使用 tf
  • 现代 Android 中 WakeLock 的用途是什么?

    我很难理解其目的WakeLock https developer android com reference android os PowerManager WakeLock在现代版本的 Android 中 引入 Doze 和前台服务之后
  • android 图像被文本包裹

    我想将图像插入文本中 例如 我想显示这样的文本 要编辑图片 您应该单击 图片 按钮 其中 image 是真实图像 例如 ImageView 你可以试试这个 不知道这是否是你的需要 setContentView R layout main T
  • 当 error.networkResponse 为 null 时 Android Volley 中的 Http 状态代码

    我在 Android 平台上使用 Google Volley 我遇到的问题是error参数输入onErrorResponse返回 nullnetworkResponse对于我正在使用的 RESTful API 我需要确定通常以 401 SC
  • 如何在Android中启用接近传感器

    我已在代码中成功配置了距离计 现在我想以编程方式关闭和打开屏幕 传感器代码工作正常 并且也调用了以下方法 Override public void onSensorChanged SensorEvent event TODO Auto ge
  • Android - 循环 strings.xml 文件

    我想知道是否有办法循环strings xml file 假设我有以下格式
  • 消息应用程序的 ListView 滚动后显示错误的 listItem 布局

    我知道stackoverflow上已经发布了很多类似的问题 所以请不要以为我没有高低搜索过 我认为我的问题只是来自于现在完全理解 listViews 和列表项的生命周期 我有一个列表视图 可以包含两种类型的消息 出站或入站 最初 我的 li
  • 在这种情况下是否违反了 Google Play 开发者政策? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想通过 Android 应用程序赚一些钱 但我面临一个大问题 Google 在 Google Play 上不支持我所在的国家 地区 适用

随机推荐

  • 这可以强制iOS键盘弹出英文键盘吗?

    如果用户的 iOS 设备上有多个键盘 这可以强制弹出英文键盘吗 谢谢 From iOS 文本编程指南 https developer apple com library ios documentation StringsTextFonts
  • Mysql 选择主键 = x 的记录

    我的 mysql 表中有一个主键 它由三列组成 CREATE TABLE IF NOT EXISTS bb bulletin OfficeCode int 5 NOT NULL IssuerId int 11 NOT NULL Bullet
  • pdf下载 html2pdf

    我正在使用 html2pdf 类来生成 pdf 在我的问题中 它为 html 代码生成 pdf 但它没有提供下载该 pdf 的对话框选项 请帮助我的情况如下
  • 获取kendo下拉值的选定id

    如何从下拉列表中获取所选名称的 ID 当选择Apples然后得到了id1并选择Oranges then 2 这是简单的剑道下拉示例
  • d3 添加 html 链接到表中的数据列

    我是 d3 和 Javascript 的新手 我正在尝试添加一个 a 元素 带有 href 属性 到指定数据列中的每个值 目前我正在使用以下代码来生成表 function tabulate data columns var table d3
  • 使用 div 模糊其后面的图像? [复制]

    这个问题在这里已经有答案了 是否可以编写一个 div 使其能够模糊其下方的任何图像 像这样的东西 这可以通过某种方式完成吗 webkit maybe 不能单独使用 CSS 但您可以使用 Canvas 和 StackBlurforCanvas
  • 类内的 CSS @import

    我正在尝试执行以下操作 bootstrap scope import bootstrap min css I know bootstrap min css位于正确的位置 因为放置 import bootstrap min css css页面
  • 如何发现asp.net客户端立即断开连接

    我知道Response IsClientConnected但在我的场景中它有很大的滞后 代码 sample code for sending a dynamic file in chuncks long bytesSent 0 while
  • 使用 AutoMapper 全局应用值解析器

    我试图让 AutoMapper 为我们本地化视图模型上的所有 DateTime 属性 我们在系统中的任何地方都使用 UTC 并将所有内容都以 UTC 格式存储在数据库中 但我们希望自动将其转换为用户的时区以供显示 在查看了所有选项后 我决定
  • 了解虚拟复制构造函数

    我无法理解我用来学习 C 的书中的代码到底发生了什么 这是代码 class Base public Base virtual Base virtual Base Clone return new Base this class Derive
  • android:Textview 在运行时设置样式[重复]

    这个问题在这里已经有答案了 可能的重复 android 在运行时设置textView样式 https stackoverflow com questions 3237752 android set textview style at run
  • Chrome 扩展:如何重定向到自定义 HTML 页面以响应特定的 Web 请求?

    I d like to write an extension that redirects all web traffic to a specific domain let s say wikipedia org to an interme
  • 使用 jQuery 将 HTML 页面动态加载到 div 中

    我试图做到这一点 以便当我单击 HTML 页面中的链接时 它会使用 jQuery 将请求的页面动态加载到 div 中 我怎样才能做到这一点 div div a href page1 html Page 1 a br a href page2
  • 在 Angular 2 中动态更新 css

    假设我有一个 Angular2 组件 home component ts import Component from angular2 core Component selector home templateUrl app compone
  • Java - 加载 .OBJ 文件

    我希望能够从 obj 文件获取信息 例如子组件的名称 那里有装载机可以做到这一点吗 Java3D 有一个 ObjectFile 但是我见过的方法列表让我觉得它不完全是我想要的 我自己解析文件会更好吗 谢谢 将要 几个月前我写了一个 java
  • 如何修复 Django 1.9 中的弃用警告

    我是 Django 框架的新用户 我目前正在使用 django rest framework 构建 REST API 启动服务器时 我收到弃用警告 但我不知道如何修复 已删除InDjango110警告 get all lated objec
  • 如何使模式窗口在页面上居中?

    我正在尝试在浏览器页面中居中放置一个模式窗口 我只想将其居中 以便它能够响应所有屏幕 与位置 绝对假设你的模态是 300x300 modal width 300px height 300px position absolute left 5
  • 是否有针对部分类型同义词实例的 Haskell (GHC) 扩展?

    使用扩展TypeSynonymInstances可以编写这样的实例 instances MyClass String where Using newtype可以声明这样的实例 newtype Kleisli m a b Kleisli a
  • R 中的数据转换

    我有一个包含 2 列的表格 我想根据第二列绘制值当前行之前的 5 行中第一列中的 N 个值的总和 如何在 R 中实现这种转换而无需外部预处理 Example 文件 数据 csv 7 2 4 8 3 6 7 10 9 3 0 4 8 9 3
  • Android Things - 创建相机预览会话失败,并且不显示预览

    我正在尝试部署 Android TensorFlow Lite 示例 特别是检测器活动 我已成功将其部署在平板电脑中 该应用程序运行良好 它能够检测对象 在其周围放置一个边界矩形 并带有标签和置信度 然后 我设置了 Raspberry Pi