CIDetector 继承自NSObject
,是一种图像处理器,用于识别静止图像或视频中的显著特征,如:面部和条形码。检测到的特征由CIFeature
对象表示,提供有关每个特征的更多信息。
1、创建检测器对象
+ (nullable CIDetector *)detectorOfType:(NSString*)type
context:(nullable CIContext *)context
options:(nullable NSDictionary<NSString *,id> *)options
创建并返回已配置的检测器;该类方法有三个参数:
- 参数
type
:检测器类型。 - 参数
context
:检测器在分析图像时可以使用的核心图像。 - 参数
options
:包含有关如何配置检测器的详细信息的字典。
CIDetector
类可以维护许多可能影响性能的状态变量;因此,为了获得最佳性能,需要重用该类实例,而不是创建新实例。
此外,在使用检测器对象处理图像时,如果用于初始化检测器的CIContext
与用于处理CIImage
对象的上下文相同,则应用程序的性能会更好。
1.1、检测器类型
检测器类型 | 描述 |
---|---|
CIDetectorTypeFace |
用于搜索静止图像或视频中的面部,返回CIFaceFeature 对象。为了在面部检测中获得更好的准确性和性能,需要使用 - featuresInImage:options: 方法,并使用CIDetectorImageOrientation 键指定图像方向。 |
CIDetectorTypeRectangle |
用于搜索静止图像或视频中的矩形区域,返回CIRectangleFeature 对象。矩形检测器找到可能表示在图像中以透视方式出现的矩形对象的区域,例如在桌面上看到的纸张或书籍。 |
CIDetectorTypeQRCode |
用于在静止图像或视频中搜索二维码或条形码,返回CIQRCodeFeature 对象。 |
CIDetectorTypeText |
用于搜索静止图像或视频中的文本,返回CITextFeature 对象。文本检测器找到可能包含直立文本的区域,但不执行光学字符识别。 |
1.2、检测器配置
用于配置检测器的字典中使用的键。
键 | 描述 |
---|---|
CIDetectorAccuracy |
用于指定检测器所需精度 |
CIDetectorTracking |
用于启用或禁用检测器的面部跟踪;如果要在视频中的帧中跟踪面,请使用此选项。 |
CIDetectorMinFeatureSize |
用于指定探测器将识别为特征的最小大小的键;此键的值是一个取值范围0.0~1.0的NSNumber 对象,表示小尺寸图像的一小部分。 |
CIDetectorNumberOfAngles |
用于在视频输入中检测面部的透视数;此键的值是包含数字1,3,5,7,9或11的NSNumber 对象。在更高的角度数量下,视频中的面部检测变得更准确,但计算成本更高。 |
CIDetectorMaxFeatureCount |
表示检测器应返回的最大特征数。默认值为1.取值范围[1,256]。 |
关于键 CIDetectorAccuracy
表示检测器所需精度的值:
- 值
CIDetectorAccuracyLow
: 表示检测器应选择精度较低但可以更快速处理的技术。 - 值
CIDetectorAccuracyHigh
:表示检测器应选择精度更高的技术,即使它需要更多的处理时间。
2、使用检测器对象查找特征
- (NSArray<CIFeature *> *)featuresInImage:(CIImage *)image
//根据指定的图像方向检测图像中的特征。
- (NSArray<CIFeature *> *)featuresInImage:(CIImage *)image
options:(nullable NSDictionary<NSString *,id> *)options
一组CIFeature对象:每个对象代表图像中检测到的特征;上述方法的参数:
- 参数
image
:要检查的图像。 - 参数
options
:指定特征检测选项的字典。
2.1、特征检测键
用于特征检测选项的字典的键:
键 | 描述 |
---|---|
CIDetectorSmile |
Core Image 是否执行检测面部微笑的选项。 |
CIDetectorEyeBlink |
Core Image 是否执行检测面部闭眼的选项。 |
CIDetectorAspectRatio |
指定要搜索的矩形的宽高比(宽度除以高度),此键的值是NSNumber对象,其值为正浮点数。将此选项与CIDetectorTypeRectangle 检测器类型一起使用可微调检测器的精度。 例如,要更准确地在图像中找到 3.5 x 2英寸的名片,可指定 3.5/2 = 1.75 的宽高比。 |
CIDetectorReturnSubFeatures |
是否返回检测到的特征组件的特征信息;此键的值是具有布尔值的NSNumber对象。将此选项与CIDetectorTypeText 检测器类型一起使用,以选择是仅检测可能包含文本的区域(NO,默认值)还是识别可能包含单个文本字符的子区域(YES)。 |
CIDetectorImageOrientation |
设置要检测其特征的图像的显示方向,其值指示图像显示时像素坐标原点(0,0)应该出现在何处;其值为1到8之间的整数,默认值为 1 表示原点位于图像的左上角。Core Image 仅检测其方向与图像的方向匹配的面部;如果要检测不同方向的面,则应为此键提供值 参阅详细信息kCGImagePropertyOrientation。 |
CIDetectorFocalLength |
一种以像素为单位的识别焦距的选项;其值为浮点数,可以是0.0,-1.0或任何正值。将此选项与CIDetectorTypeRectangle 检测器类型一起使用可控制CIDetectorAspectRatio 选项对特征检测的影响。 |
关于识别焦距的键 CIDetectorFocalLength
其值可以是 0.0,-1.0 或任何正值:
- 默认值 -1.0 禁用返回矩形的宽高比测试。
- 特殊值 0.0 可以实现不太精确的高宽比测试,这种测试近似于正投影(非透视)投影。如果要通过
CIDetectorAspectRatio
选项指定矩形的宽高比,使用此值,但无法确定焦距的值,以像素为单位。 - 任何其他值指定相机焦距,允许宽高比规格考虑输入图像中矩形的透视失真。
如果知道相机的对角线视场(对角线角对场景角度的影响),可以用下面的公式来计算一个近似的焦距(以像素为单位):
//焦距像素 = (图像对角像素/2)/tan(FOV/2)
focal_length_pixels = (image_diagonal_pixels/2)/tan(FOV/2)
在这个公式中,image_diagonal_pixels
是相机传感器最大分辨率的图像对角线的长度(以像素为单位)。例如,3264 x 2448(800万像素)传感器的值是4080像素,4096x3024(1200万像素)传感器的值是5000像素。
为了测量对角视场,把相机放在一个三脚架上,使它垂直于一个表面,图像的中心朝向表面上的一个标记。测量从标记到图像一角点的距离(Y),测量相机到表面的距离(Z),视场为2*arctan(Y/Z)。
必须根据最大传感器分辨率指定此值。如果所提供的CIImage相对于最大传感器分辨率进行了缩放,那么所提供的焦距也必须进行类似的缩放。
网友评论