当前位置: 首页 > news >正文

Android相机调用-CameraX【外接摄像头】【USB摄像头】

Android相机调用有原生的Camera和Camera2,我觉得调用代码都太复杂了,CameraX调用代码简洁很多。

说明文档:https://developer.android.com/jetpack/androidx/releases/camera?hl=zh-cn

现有查到的调用资料都不够新,对于外接摄像头(USB摄像头)这类非前置也非后置摄像头的设备调用,都说是没有实现。旧版本的库可能更多目标用户是基于手机的,1.3.0-alpha03版本针对外接摄像头有增加配置项(CameraSelector.LENS_FACING_EXTERNAL),使用该配置项可以实现外接摄像头的调用。

0,摄像头选择可用值

    /** A camera on the devices that its lens facing is resolved. */public static final int LENS_FACING_UNKNOWN = -1;/** A camera on the device facing the same direction as the device's screen. */public static final int LENS_FACING_FRONT = 0;/** A camera on the device facing the opposite direction as the device's screen. */public static final int LENS_FACING_BACK = 1;/*** An external camera that has no fixed facing relative to the device's screen.** <p>The behavior of an external camera highly depends on the manufacturer. Currently it's* treated similar to a front facing camera with little verification. So it's considered* experimental and should be used with caution.*/@ExperimentalLensFacingpublic static final int LENS_FACING_EXTERNAL = 2;

1,在AndroidManifest.xml添加权限

    <uses-permission android:name="android.permission.CAMERA" /><uses-feature android:name="android.hardware.camera.any" />

2,在settings.gradle或build.gradle添加maven

    repositories {google()mavenCentral()maven { url 'https://jitpack.io' }}

3,在build.gradle添加依赖库

    //摄像头预览库implementation "androidx.camera:camera-core:1.3.0-alpha04"// CameraX Camera2 extensions[可选]拓展库可实现人像、HDR、夜间和美颜、滤镜但依赖于OEMimplementation "androidx.camera:camera-camera2:1.3.0-alpha04"// CameraX Lifecycle library[可选]避免手动在生命周期释放和销毁数据implementation "androidx.camera:camera-lifecycle:1.3.0-alpha04"// CameraX View class[可选]最佳实践,最好用里面的PreviewView,它会自行判断用SurfaceView还是TextureView来实现implementation 'androidx.camera:camera-view:1.3.0-alpha04'

4,开启预览代码

    private ListenableFuture<ProcessCameraProvider> cameraProviderFuture;private PreviewView previewView;private ProcessCameraProvider cameraProvider;ImageView picture = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);picture = (ImageView) findViewById(R.id.picture);previewView=findViewById(R.id.previewView);//初始化//高版本系统动态权限申请if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_DENIED) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {requestPermissions(new String[]{Manifest.permission.CAMERA,}, 11);}} else {//启动相机startCamera();}takePhoto.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {takePhoto(picture);//取图识别}});}@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);if (requestCode==11){//获取权限后,开启摄像头//启动相机startCamera();}}private void startCamera() {// 请求 CameraProvidercameraProviderFuture = ProcessCameraProvider.getInstance(this);//检查 CameraProvider 可用性,验证它能否在视图创建后成功初始化cameraProviderFuture.addListener(() -> {try {ProcessCameraProvider cameraProvider = cameraProviderFuture.get();bindPreview(cameraProvider);} catch (ExecutionException | InterruptedException e) {// No errors need to be handled for this Future.// This should never be reached.}}, ContextCompat.getMainExecutor(this));}//选择相机并绑定生命周期和用例private void bindPreview(@NonNull ProcessCameraProvider cp) {this.cameraProvider=cp;Preview preview = new Preview.Builder().build();@SuppressLint("UnsafeOptInUsageError")CameraSelector cameraSelector = new CameraSelector.Builder().requireLensFacing(CameraSelector.LENS_FACING_BACK)//CameraSelector.LENS_FACING_EXTERNAL.build();preview.setSurfaceProvider(previewView.getSurfaceProvider());cameraProvider.unbindAll();//解绑组件cameraProvider.bindToLifecycle((LifecycleOwner) this, cameraSelector, preview);}//拍照,这里偷懒了,直接取了预览控件的图片,需要拍照的再去看看官方文档吧public void takePhoto(View view){Log.e("OCR", "takePhoto");Bitmap bitmap = previewView.getBitmap();view.setBackground(new BitmapDrawable(getApplicationContext().getResources(),bitmap)); //show picture}@Overrideprotected void onDestroy() {super.onDestroy();cameraProvider.unbindAll();}

5,界面布局

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="5dp"android:orientation="vertical"><androidx.camera.view.PreviewViewandroid:id="@+id/previewView"android:layout_width="300dp"android:layout_height="300dp"android:layout_gravity="center"/><Buttonandroid:id="@+id/take_photo"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="5dp"android:text="取图"/><ImageViewandroid:id="@+id/picture"android:layout_width="300dp"android:layout_height="300dp"android:layout_gravity="center"/></LinearLayout></androidx.coordinatorlayout.widget.CoordinatorLayout>

6,测试效果(文字识别部分请忽略)

s

7,库的调用版本是比较新的,建议JDK版本不要太低,我使用的是16.0.2

新人入行,经验分享,如有所误,欢迎指出~

版权归属:深圳市琪智科技有限公司-花花

相关文章:

Android相机调用-CameraX【外接摄像头】【USB摄像头】

Android相机调用有原生的Camera和Camera2&#xff0c;我觉得调用代码都太复杂了&#xff0c;CameraX调用代码简洁很多。 说明文档&#xff1a;https://developer.android.com/jetpack/androidx/releases/camera?hlzh-cn 现有查到的调用资料都不够新&#xff0c;对于外接摄像…...

第一个Java程序

1. 将扩展名.text更改为.java 2.文件夹&#xff08;Hello.java&#xff09;上方输入“cmd空格回车”&#xff08;没有加号&#xff09; 3.在命令提示符内输入“javac空格文件夹名称.java回车” (javac空格Hello.java回车) 执行成功后&#xff0c;文件夹下多一个Hello.class…...

OpenCV之霍夫变换检测直线

霍夫变换 首先是笛卡尔坐标系到霍夫空间的转换&#xff0c;比如笛卡尔坐标系中有一条直线 yaxb。 笛卡尔坐标系中一条直线&#xff0c;对应霍夫空间的一个点。 反过来同样成立&#xff08;霍夫空间的一条直线&#xff0c;对应笛卡尔坐标系的一个点&#xff09; 原理其实很简单 …...

lv3 嵌入式开发-11 Linux下GDB调试工具

目录 1 GDB简介 2 GDB基本命令 3 GDB调试程序 1 GDB简介 GDB是GNU开源组织发布的一个强大的Linux下的程序调试工具。 一般来说&#xff0c;GDB主要帮助你完成下面四个方面的功能&#xff1a; 1、启动你的程序&#xff0c;可以按照你的自定义的要求随心所欲的运行程序&#…...

Zabbix监控平台概念

1.概念 Zabbix是一款开源的、免费的、分布式监控平台支持web管理&#xff0c;WEB界面可以方便管理员使用可以监控硬件服务器CPU温度、风扇转速、操作系统CPU、EME、DISK、I/O、流量宽带、负载、端口、进程等Zabbix是C/S架构&#xff0c;Client客户端和Server端组成 2.Zabbix可…...

【javaSE】 枚举与枚举的使用

文章目录 &#x1f384;枚举的背景及定义⚾枚举特性总结&#xff1a; &#x1f332;枚举的使用&#x1f6a9;switch语句&#x1f6a9;常用方法&#x1f4cc;示例一&#x1f4cc;示例二 &#x1f38d;枚举优点缺点&#x1f334;枚举和反射&#x1f6a9;枚举是否可以通过反射&…...

NetSuite知识会汇编-管理员篇顾问篇2023

本月初&#xff0c;开学之际&#xff0c;我们发布了《NetSuite知识会汇编-用户篇 2023》&#xff0c;这次发布《NetSuite知识会汇编-管理员篇&顾问篇2023》。本篇挑选了近两年NetSuite知识会中的一些文章&#xff0c;涉及开发、权限、系统管理等较深的内容&#xff0c;共19…...

根号分治与多项式的巧妙结合:GYM-104386G

使用范围&#xff1a;序列上对于每种数的计数问题 考虑对每种数的出现次数进行根号分治 如果出现次数很少&#xff0c;直接平方暴力即可 如果很大考虑任意 ( i , j ) (i,j) (i,j)&#xff0c;我们拆一下&#xff0c;再移一下&#xff0c;然后就变成了卷积形式...

通过FTP高速下载几百G数据

基因组下载 (FTP) 常见问题解答 基因组FTP站点有哪些亮点?下载多个基因组组装数据的最简单方法是什么?下载大型数据集的最佳协议是什么?为什么 NCBI 基因组 FTP 站点要重组?我如何及时了解 NCBI 基因组 FTP 站点的变化?...

cudnn-windows-x86_64-8.6.0.163_cuda11-archive 下载

网址不太好访问的话,请从下面我提供的分享下载 Download cuDNN v8.6.0 (October 3rd, 2022), for CUDA 11.x 此资源适配 cuda11.x 将bin和include文件夹里的文件&#xff0c;分别复制到C盘安装CUDA目录的对应文件夹里 安装cuda时自动设置了 CUDA_PATH_V11_8 及path C:\Progra…...

多线程案例(1) - 单例模式

目录 单例模式 饿汉模式 懒汉模式 前言 多线程中有许多非常经典的设计模式&#xff08;这就类似于围棋的棋谱&#xff09;&#xff0c;这是用来解决我们在开发中遇到很多 "经典场景"&#xff0c;简单来说&#xff0c;设计模式就是一份模板&#xff0c;可以套用。…...

Arduino驱动TCS34725传感器(颜色传感器篇)

目录 1、传感器特性 2、硬件原理图 3、控制器和传感器连线图 4、驱动程序 TCS34725是一款低成本,高性价比的RGB全彩颜色识别传感器,传感器通过光学感应来识别物体的表面颜色。...

知识库网站如何搭建?需要注意这五个要点!

正因为知识库提供结构化知识库来记载信息和知识&#xff0c;便于团队沉淀经验、共享资源&#xff0c;形成完整的知识体系并持续进化​&#xff0c;使得它成为当前企业发展新宠。 构建自己/团队的知识库是一个良好的习惯&#xff0c;可以提高工作和学习效率&#xff0c;以下是一…...

【UE虚幻引擎】UE源码版编译、Andorid配置、打包

首先是要下载源码版的UE&#xff0c;我这里下载的是5.2.1 首先要安装Git 在你准备放代码的文件夹下右键点击Git Bash Here 然后可以直接git clone https://github.com/EpicGames/UnrealEngine 不行的话可以直接去官方的Github上下载Zip压缩包后解压 运行里面的Setup.bat&a…...

树和二叉树的相关概念及结构

目录 1.树的概念及结构 1.1 树的概念 1.2 树的相关概念 1.3 树的表示 1.3.1 孩子兄弟表示法 1.3.2 双亲表示法 1.4 树的实际应用 2.二叉树的概念及结构 2.1 二叉树的概念 2.2 特殊的二叉树 2.3 二叉树的性质 2.4 二叉树的存储 2.4.1 顺序存储 2.4.2 链式存储 1.树…...

MySQL安装validate_password_policy插件

功能介绍 validate_password_policy 是插件用于验证密码强度的策略。该参数可以设定三种级别&#xff1a;0代表低&#xff0c;1代表中&#xff0c;2代表高。 validate_password_policy 主要影响密码的强度检查级别&#xff1a; 0/LOW&#xff1a;只检查密码长度。 1/MEDIUM&am…...

数据在内存中的存储——练习3

题目&#xff1a; 3.1 #include <stdio.h> int main() {char a -128;printf("%u\n",a);return 0; }3.2 #include <stdio.h> int main() {char a 128;printf("%u\n",a);return 0; }思路分析&#xff1a; 首先二者极其相似%u是无符号格式进行…...

web-案例

分页插件 登录 事务...

第一章 JAVA入门

文章目录 1.2 Java 的特点1.2.1 简单1.2.2 面向对象1.2.3 与平台无关① 平台与机器指令② C/C程序依赖平台③ Java 虚拟机与字节码1.2.4 多线程1.2.5 动态1.30安装 JDK1.3.1 平台简介0 Java SE②Java EE1.4 Java 程序的开发步骤②保存源文件1.5.2 编译1.8 Java之父-James Gosli…...

二叉树详解(求二叉树的结点个数、深度、第k层的个数、遍历等)

二叉树&#xff0c;是一种特殊的树&#xff0c;特点是树的度小于等于2&#xff08;树的度是整个树的结点的度的最大值&#xff09;&#xff0c;由于该特性&#xff0c;构建二叉树的结点只有三个成员&#xff0c;结点的值和指向结点左、右子树的指针。 typedef int DateType; t…...

蓝桥杯EDA国赛备赛

一.电路设计部分&#xff08;1&#xff09;13届国赛要求&#xff1a;数码管驱动电路设计区域内&#xff0c;使用给定的元器件&#xff08;锁存器-U6、电容等&#xff09;和网络标识补充完成数码管驱动电路&#xff0c;实现单片机对数码管的显示控制。参考答案&#xff1a;1. 10…...

ComfyUI全面掌握-知识点详解——自定义节点安装与首次 AI 绘图(实操+排错)

本文为系列第 6 篇&#xff08;第一章第 5 个知识点&#xff09;&#xff0c;讲解自定义节点的作用与安装方式&#xff0c;手把手教读者加载默认工作流、完成首次 AI 绘图&#xff0c;解读核心参数并排查常见问题。 目录 一、引言&#xff1a;自定义节点是什么&#xff1f;为什…...

在Android Termux中搭建轻量级Docker容器环境:原理、部署与实战

1. 项目概述与核心价值最近在折腾移动设备上的开发环境&#xff0c;发现一个挺有意思的项目&#xff1a;George-Seven/Termux-Udocker。简单来说&#xff0c;它是在Android平台的Termux终端模拟器里&#xff0c;实现一个轻量级的Docker容器运行环境。这玩意儿解决了一个挺实际的…...

基于MCP协议构建AI知识库:解决会话失忆,实现知识持久化

1. 项目概述&#xff1a;让AI拥有自己的“亚历山大图书馆”如果你和我一样&#xff0c;长期与Claude Code、Cursor这类AI编程助手打交道&#xff0c;一定会遇到一个核心痛点&#xff1a;会话失忆。每次开启一个新对话&#xff0c;AI助手就像一张白纸&#xff0c;它对你项目的历…...

EmbedClaw:RAG应用中文本智能分块与向量化检索的工程实践

1. 项目概述&#xff1a;一个面向嵌入向量检索的“机械爪”最近在折腾RAG&#xff08;检索增强生成&#xff09;应用&#xff0c;发现向量数据库的检索效果&#xff0c;很大程度上取决于你“喂”进去的文本是怎么被切成一块一块的&#xff08;也就是分块&#xff0c;Chunking&a…...

在Node.js后端服务中集成Taotoken调用大模型指南

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 在Node.js后端服务中集成Taotoken调用大模型指南 将大模型能力集成到后端服务是现代应用开发的常见需求。Taotoken平台提供了OpenA…...

AI Agent 的难点,不在搭 Demo,而在让人敢交任务

Agent难在让人敢托付 很多团队做 Agent 的误会&#xff0c;是把跑通一次当成好用。 现在搭一个 Demo 确实不难。一个大模型&#xff0c;几段提示词&#xff0c;接几个搜索、表格、浏览器或数据库工具&#xff0c;很快就能演示一个会拆任务、会调用工具、会输出结果的流程。看起…...

学术合规性危机预警:Perplexity生成内容如何精准适配Chicago第17版?,一文锁定98.7%高校期刊投稿要求

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;学术合规性危机预警&#xff1a;Perplexity生成内容如何精准适配Chicago第17版&#xff1f; 随着AI辅助写作工具在人文社科领域的深度渗透&#xff0c;Perplexity等生成式平台输出的引文、脚注与参考文…...

避坑指南:海康威视工业相机SDK二次开发常见问题排查(从环境配置到图像采集)

海康威视工业相机SDK开发实战&#xff1a;从环境搭建到图像处理的深度避坑指南 工业视觉领域的开发者们&#xff0c;是否曾在深夜调试海康威视相机SDK时&#xff0c;被突如其来的"DLL缺失"错误打断思路&#xff1f;或是明明按照文档配置了项目属性&#xff0c;却始终…...

泰拉瑞亚整合包下载灾厄大杂烩整合包2026最新版下载

1. 游戏基础介绍 《泰拉瑞亚》是一款经典的二维像素风格沙盒冒险游戏。游戏拥有极高的自由度&#xff0c;玩家可以自由探索地图、收集资源、建造房屋、打造装备、挑战BOSS。凭借自由开放的玩法、丰富的道具体系和独特的冒险氛围&#xff0c;这款游戏长久以来备受玩家喜爱。原版…...