iOS视频捕获进阶篇
1. 前言
前面【iOS视频捕获实践篇】制作了一个简单拍照和视频录制的相机,事实上,大多数app都有扫码的功能,因此仅仅一个相机是不够的。本篇文章来对前面的相机做一个升级,对拍照界面增人脸检测与追踪的功能。
2. MetadataOutput
AVCaptureOutput有一个子类 AVCaptureMetadataOutput,它用来输出元数据。元数据简单来说就是现实一个具体的物体,比如人脸、条码、动物等,所有元数据对象都有时间、持续时间、界限和类型。下面是一个元数据的抽象类,我们需要使用其子类。
1 | @interface AVMetadataObject : NSObject { |
在使用上和AVCaptureVideoDataOutput是类似的。设置一个代理和一个派发队列。
1 | - (void)setMetadataObjectsDelegate:(nullable id<AVCaptureMetadataOutputObjectsDelegate>)objectsDelegate queue:(nullable dispatch_queue_t)objectsCallbackQueue; |
在设置完代理后,我们需要实现下面这个方法:
1 | - (void)captureOutput:(AVCaptureOutput *)output didOutputMetadataObjects:(NSArray<__kindof AVMetadataObject *> *)metadataObjects fromConnection:(AVCaptureConnection *)connection; |
3. 人脸追踪
航向偏角(Pitch)是沿着X轴旋转;
偏航(yaw)是沿着Y轴旋转;
侧滚(roll)是沿着Z轴旋转。
对应于人头来说,pitch就是点头,yaw摇头,roll就是左右肩膀摆头。下面是笛卡尔积坐标系。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PHZWfKIO-1663297785545)(./tc_avf_pyr.png)]
1 | @interface AVMetadataFaceObject : AVMetadataObject <NSCopying> { |
我们实现如下代理方法:
1 | - (void)captureOutput:(AVCaptureOutput *)output didOutputMetadataObjects:(NSArray<__kindof AVMetadataObject *> *)metadataObjects fromConnection:(AVCaptureConnection *)connection { |
4. 总结
【iOS视频捕获】到这里就结束了,由于时间关系,在细节上面没有打磨。
对于barcode识别,CIImage的detector、VisionFramework等的使用,大家可以自行搜索使用。
瑞思拜~
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Coolnaut space!
评论
LivereGiscus