这篇文章将针对下面几点展开介绍: 一、Android平台人脸识别流程图 二、ArcSoft人脸识别算法sdk下载 三、Camera2 API 集成 ArcSoft人脸识别算法 一、Android平台人脸识别流程图...介绍完了官方的demo,那接下来我们看下采用Android Camera2 的api,如何去集成arcsoft的人脸识别算法呢。...1、如下面代码块所示,arcsoft 官方demo采用的是Camera1的api接口,设置的预览数据的回调,回调的直接就是nv21的byte[]数据,然后再把byte[]数据送进去算法处理。...格式,然后再送进arcsoft的人脸检测算法中进行处理 Camera1 接口上,设置预览数据回调后,回调的直接就是nv21格式的数据,相对来说会比Camera2上的处理会简单很多。...不过Android 目前已经不再对Camera旧的架构进行维护,而且目前主流的手机采用的基本上也都是Camera2的接口。所以我们还是非常有必要熟悉掌握Camera2的各种使用。
这篇文章将针对下面几点展开介绍: 一、Android平台人脸识别程图 二、ArcSoft人脸识别算法sdk下载 三、Camera2 API 集成 ArcSoft人脸识别算法 一、Android平台人脸识别流程图...人脸识别流程图基本如下图所示,用一句话来说就是获取camera数据,送到算法中进行识别,最后显示识别结果。...1、如下面代码块所示,arcsoft 官方demo采用的是Camera1的api接口,设置的预览数据的回调,回调的直接就是nv21的byte[]数据,然后再把byte[]数据送进去算法处理。...我们先来看下我自己写的demo效果图: 下面来讲解下代码实现的主要步骤: (不熟悉Camera2接口的同学,建议先找一篇关于Camera2 API的文章先了解下,关于Camera2,我自己前面也写过算是比较详细的文章介绍...Camera1 接口上,设置预览数据回调后,回调的直接就是nv21格式的数据,相对来说会比Camera2上的处理会简单很多。
: YYYYYYYY VUVU =>YUV420SP 2、安卓相机camera2 简介: 从 Android 5.0 开始,Google 引入了一套全新的相机框架 Camera2(android.hardware.camera2...Pipeline Camera2 的 API 模型被设计成一个 Pipeline(管道),它按顺序处理每一帧的请求并返回请求结果给客户端。下面这张来自官方的图展示了 Pipeline 的工作流程。...outputSizes = map.getOutputSizes(SurfaceTexture.class); //todo,计算后,从枚举数组中...使用Image的getPlanes()获取plane数组: Image.Plane[] planes = image.getPlanes(); 它保证planes[0] 总是Y ,planes[1] 总是...当然这张图只是说可以这么理解,实际上拿到的一维的byte数组,是每行数据接出来的如下。
解决方案 Android5.0以上,通过camera2采集YUV_420_888 不再调用 TXLivePusher 的 startCameraPreview 接口。...在摄像机的预览回调onImageAvailable()中,获取到 YUV_420_888 格式的视频数据,然后将 YUV_420_888 格式转码为 I420 格式,再使用 sendCustomVideoData...在摄像机的预览回调onPreviewFrame()中,获取到 NV21 格式的视频数据,然后将 NV21 格式转码为 I420 格式,再使用 sendCustomVideoData 向SDK填充您采集和处理后的...) { // 假设摄像机获取的视频格式是 NV21, 预览画面大小为 1280X720 // 即宽度 mPreviewWidth 值为1280,高度 mPreviewHeight 值为...camera2在获取摄像机预览宽高前,请先检测手机支持的分辨率,如果指定分辨率与支持的分辨率不一致,会获取到比指定分辨率小的画面,sendCustomVideoData时要以实际预览画面的宽高为准。
Camera1中我们可以通过onPreviewFrame接口直接获取到默认为NV21格式的预览数据, 如下图注释所示,还可以通过调用setPreviewFormat方法要求Camera返回YV12格式的预览数据...那么在Camera2的架构中,我们要如何获取NV21或者YV12格式的预览数据呢?...在之前的文章Android Camera2详解中描述到,要获取每一帧的预览数据,我们需要ImageReader这个类的帮助: val imageReader = ImageReader(width, height...Camera2中官方建议使用YUV_420_888 ?..., data, vOffset, tmp.size) } return true } YV12 ImageReader的format是可以直接指定为YV12的,这种格式下又是如何从Image
关于手机端的开发流程 : ① 首先实现 Camera 采集图像数据 : 【Android RTMP】Android Camera 视频数据采集预览 ( 视频采集相关概念 | 摄像头预览参数设置 | 摄像头预览数据回调接口...) 【Android RTMP】Android Camera 视频数据采集预览 ( 图像传感器方向设置 | Camera 使用流程 | 动态权限申请 ) 【Android RTMP】Android Camera...视频数据采集预览 ( 图像传感器方向设置 | Camera 使用流程 | 动态权限申请 ) ② 理解 NV21 格式的图像数据 : 【Android RTMP】RTMP 数据格式 ( FLV 视频格式分析...将 NV21 格式的图像数据编码为 H.264 格式的图像数据 : 【Android RTMP】x264 编码器初始化及设置 ( 获取 x264 编码参数 | 编码规格 | 码率 | 帧率 | B帧个数...| 关键帧间隔 | 关键帧解码数据 SPS PPS ) Android RTMP】x264 图像数据编码 ( Camera 图像数据采集 | NV21 图像数据传到 Native 处理 | JNI 传输字节数组
格式的 Byte 数组,因为我们使用的sdk只能处理 NV21 格式的数据,NV21 格式限制高度不能为奇数; mBitmap = Application.decodeImage(mFilePath)...; //创建字节数组 大小由拍照传来的图片尺寸决定 byte[] data = new byte[mBitmap.getWidth() * mBitmap.getHeight() * 3 / 2]; try...{ //将bitmap转换成nv21,结果保存到data数组中 ImageConverter convert = new ImageConverter(); convert.initial...数据数组,传入图片的宽度、高度、NV21、探测结果 err = engine.AFD_FSDK_StillImageFaceDetection(data, mBitmap.getWidth(), mBitmap.getHeight...第三步: 经过上述的两部,我们已经成功的从图片中识别到了人脸,并且将该人脸在图片中的位置获取到了,接下来我们要做的就是使用 FR 人脸识别引擎识别该位置人脸中的特征信息。 if (!
本课程内容由 @公众号:小驰笔记出品,欢迎关注公众号,获取更多交流信息~ 一、如何获取实时预览流? 1)camera1 api 如何获取?...//1) 设置preview callback Camera.setPreviewCallback(mPreviewCallback); //2)回调数据是nv21格式yuv数据 public PreviewCallback...Override public void onPreviewFrame(byte[] data, Camera camera) { } }; 2)camera2...api如何获取?...深圳上班, 从事Android Camera相关软件开发工作, 公众号记录生活和工作的点滴,
从Android 5.0开始,Google 引入了一套全新的相机框架 Camera2(android.hardware.camera2)并且废弃了旧的相机框架 Camera1(android.hardware.Camera...下面这张来自官方的图展示了 Pipeline 的工作流程,我们会通过一个简单的例子详细解释这张图。...整个拍摄流程如下: 创建一个用于从 Pipeline 获取图片的 CaptureRequest。 修改 CaptureRequest 的闪光灯配置,让闪光灯在拍照过程中亮起来。...每一个 Surface 都可以有自己的尺寸和数据格式,你可以从 CameraCharacteristics 获取某一个数据格式支持的尺寸列表。...需要注意的是,CaptureResult 并不包含任何图像数据,前面我们在介绍 Surface 的时候说了,图像数据都是从 Surface 获取的。
——实现预览、拍照、保存照片等功能 Android: Camera相机开发详解(下) —— 实现人脸检测功能 Camera2架构概述 Camera2引用了管道的概念将安卓设备和摄像头之间联通起来,系统向摄像头发送...Camera2预览流程图 Camera2拍照流程图 Camera2录像流程图 Camera2中比较重要的类及方法 CameraManager 摄像头管理器,用于打开和关闭系统摄像头 getCameraIdList...这个数组的大小跟图片的格式有关,如 JPEG格式数组大小为1 Plane 图像数据的单色平面 **getBuffer()**:获取包含帧数据的ByteBuffer。...下面是我的手机跑起来时打印的日志 **注意 :**Camera2在一些低端机器上会出现预览画面拉伸问题。...在android 5.0,硬件兼容级别为legacy时,Camera2输出的宽高比和Camera Sensor保持一致。
从Android 5.0开始,Google 引入了一套全新的相机框架 Camera2(android.hardware.camera2)并且废弃了旧的相机框架 Camera1(android.hardware.Camera...下面这张来自官方的图展示了 Pipeline 的工作流程,我们会通过一个简单的例子详细解释这张图。 ?...整个拍摄流程如下: 1.创建一个用于从 Pipeline 获取图片的 CaptureRequest。2.修改 CaptureRequest 的闪光灯配置,让闪光灯在拍照过程中亮起来。...每一个 Surface 都可以有自己的尺寸和数据格式,你可以从 CameraCharacteristics 获取某一个数据格式支持的尺寸列表。...需要注意的是,CaptureResult 并不包含任何图像数据,前面我们在介绍 Surface 的时候说了,图像数据都是从 Surface 获取的。 11) Request的整体处理流程 ?
Camera2),不过项目中还在使用,这个不是重点。...其中,onPreviewFrame方法传回的byte数组,默认数据格式为 YCbCr_420_SP (NV21) 格式,这个才是重点。 所以 YCbCr 是什么?420 是什么?SP 是什么?...在 Android 中,接口返回的数据是以一维byte 数组存储,但是为了好理解,将一维的 byte 数组按照图片宽高,进行宽高抽象化,在文章中显示。这样好和图片实体对应,便于理解。...如果这样旋转,则会导致每一行数据排列错误,UV 和 Y 混排;而从内存的角度来看,数据是用数组存储的,这样的旋转会让原本连续的Y断开 - U1 V1 Y13 Y9 Y5 Y1 U2 V2 ......对于镜像,我们也可以按照上述的方法,一个一个字节的对应找规律。
image.png 从 Android 5.0 开始,Google 引入了一套全新的相机框架 Camera2(android.hardware.camera2)并且废弃了旧的相机框架 Camera1...下面这张来自官方的图展示了 Pipeline 的工作流程,我们会通过一个简单的例子详细解释这张图。...每一个 Surface 都可以有自己的尺寸和数据格式,你可以从 CameraCharacteristics 获取某一个数据格式支持的尺寸列表。...需要注意的是,CaptureResult 并不包含任何图像数据,前面我们在介绍 Surface 的时候说了,图像数据都是从 Surface 获取的。...12 一些从 Camera1 迁移到 Camera2 的建议 如果你熟悉 Camera1,并且打算从 Camera1 迁移到 Camera2 的话,希望以下几个建议可以对你起到帮助: Camera1 严格区分了预览和拍照两个流程
首先,Android系统目前已经提供了两套Camera API,其中Camera 2 API是从Android 5.0(API Level 21)开始提供的。...因为TextureView是从Android 4.0(API level 14)开始才有的(TexturView算是SurfaceView的一个增强版),所以在Android 4.0之后使用的是TextureViewPreview...是为Android 5.0(API level 21)及以上系统提供的,Camera2Api23继承自Camera2,是为Android 6.0(API level 23)及以上系统提供的。...相机权限 众所周知,从Android 6.0开始,Android系统引入了动态权限的机制,所以如果你的应用的targetSDK设置在23及以上的话,你需要在运行的时候检查相机权限是否授予了,如果没有授予的话就要申请...cameraview的代码你会发现,这不算是cameraview的锅,拍照(takePicture)的时候最终会回调onPictureTaken方法,其参数是byte[] data,一般情况下我们都只是将这个字节数组保存到某个文件中即可得到拍照的图片
Android 的Camera硬件抽象层 (HAL) 可将 Camera2 中较高层级的Camera框架 API 连接到底层的Camera驱动程序和硬件。...Camera应用框架 Camera应用代码位于应用框架级别,它使用 Camera2 API 与Camera硬件进行互动。...从 Android 8.0 开始,相机 HAL 实现必须使用 HIDL API;不支持使用旧版接口。 旧版Camera HAL 组件 此部分介绍了旧版 HAL 组件的架构以及如何实现 HAL。...此代码会调用较低级别的原生代码以获取对实体相机的访问权限,并返回用于在框架级别创建 android.hardware.Camera 对象的数据。...相机和驱动程序必须支持 YV12 和 NV21 图像格式,以便在显示和视频录制时支持预览相机图像。
做过camera, 播放器,图片处理的对YUV都不会陌生,但是关于YUV有很多的格式YUV420, NV21, YUV420sp, YV12等等往往令人混乱 介绍 YUV色彩模型利用人类视觉对亮度的敏感度比对色度的敏感度高的特点获得较...Y信号分量为黑白灰度图。U、V信号分量为单色彩色图。如果只需获取灰度图,只要获取Y分量就好了. YUV主要用于优化彩色视频信号的传输,使其向后相容老式黑白电视。...VV的顺序(UV的顺序可能会调换) YUV420SP: Y是planer格式, UV是packet格式,即 YYYY YYYY UV UV的顺序(UV的顺序可能会调换) 常见的代码中YUV格式定义 NV21..., 即 YYYY YYYY VV UU YU12: 属于YUV420p, 即 YYYYYYYY UUVV YUV_420_888 Android camera2引入了这个格式,解析起来比较复杂点....其他人的博客有关于YUV_420_888的讲解,这里转一下 Android: Image类浅析(结合YUV_420_888) 内存空间的计算 以yuv420为例 Y = width * height
其中嘉宾有《Android群英传》系列作者徐宜生、今日头条高级工程师月亮和六便士、阿里巴巴无线技术专家辰星。加入星球可以7折购买签名版《Android进阶之光》续作。更多福利请扫描下方二维码了解。...第一步: 创建两个叠加在一起的 SurfaceView,一个用于显示摄像头的预览信息,一个用于框出摄像头预览中人脸的位置; //覆盖在相机预览之上的一层surfaceview mGLSurfaceView...,该数据为NV21格式 byte数组 //调用FT人脸追踪引擎的人脸特征查明方法,结果保存到List result AFT_FSDKError err = engine.AFT_FSDK_FaceFeatureDetect...流程是这样的 提取图片中的人脸 → 与我们已经注册过得特征集合进行特征匹配 → 匹配程度最高的作为最终识别结果 这一过程是放在一个子线程中运行的,代码如下: //人脸识别线程 class FRAbsLoop...这里在废话几句:FD与FT引擎功能大致相同,完成的都是从一个 NV21 格式的图片 byte 数组中检测识别出人脸的位置 Rect 与角度信息。
在不同的应用场景中,可能会有调整预览帧率的时候,比如客户需要录制的视频固定在24帧,或者需要优化Camera功耗(抖音功耗优化实践) (来自字节跳动技术团队的抖音功耗优化实践) 本篇文章分别从Camera1...和Camera2两套API来说明如何调整相机预览帧率 Camera1 getSupportedPreviewFpsRange: 获取设备支持的fps range 总结下来有两个关键点: 每个Range...值必须来自support list 帧率的设置需要在startPreview之前 如下是笔者的手机相机支持的fps range情况,可以看到最大的动态范围为【8,30】,最大的固定帧率为【30,30】 Camera2...CameraCharacteristics#CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES: 通过该Tag获取支持的fps range CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE...: 通过该Tag设置预览fps range 示例如下: 可以看到通过Camera2 API获取的fps range是没有乘以1000的 关于高帧率的设置,比如【240,240】,可以参考Android
领取专属 10元无门槛券
手把手带您无忧上云