版本記錄
版本號 | 時間 |
---|---|
V1.0 | 2018.01.28 |
前言
Core Image是IOS5中新加入的一個框架,里面提供了強大高效的圖像處理功能,用來對基于像素的圖像進行操作與分析。還提供了很多強大的濾鏡,可以實現你想要的效果,下面我們就一起解析一下這個框架。感興趣的可以參考上面幾篇。
1. Core Image框架詳細解析(一) —— 基本概覽
2. Core Image框架詳細解析(二) —— Core Image濾波器參考
3. Core Image框架詳細解析(三) —— 關于Core Image
4. Core Image框架詳細解析(四) —— Processing Images處理圖像(一)
5. Core Image框架詳細解析(五) —— Processing Images處理圖像(二)
圖像中的面部識別
Core Image可以分析和查找圖像中的人臉。 它執行人臉檢測,而不是識別。 人臉檢測是包含人臉特征的矩形的識別,而人臉識別是特定人臉的識別(John,Mary等)。 Core Image檢測到人臉后,可以提供有關人臉特征的信息,例如眼睛和嘴巴的位置。 它還可以跟蹤視頻中識別的臉部的位置。
知道圖像中人臉的位置可讓您執行其他操作,例如裁剪或調整人臉的圖像質量(色調平衡,紅眼校正等)。 你也可以在臉上進行其他有趣的操作,例如:
- Anonymous Faces Filter Recipe顯示了如何將像素化過濾器僅應用于圖像中的面部。
- White Vignette for Faces Filter Recipe展示如何在臉上放置一個小插圖。
Note: Face detection is available in iOS v5.0 and later and in OS X v10.7 and later. 注意:iOS v5.0及更高版本和OS X v10.7及更高版本均提供人臉檢測功能。
Detecting Faces - 面部檢測
使用CIDetector類在圖像中查找面,如Listing 2-1所示
// Listing 2-1 Creating a face detector
CIContext *context = [CIContext context]; // 1
NSDictionary *opts = @{ CIDetectorAccuracy : CIDetectorAccuracyHigh }; // 2
CIDetector *detector = [CIDetector detectorOfType:CIDetectorTypeFace
context:context
options:opts]; // 3
opts = @{ CIDetectorImageOrientation :
[[myImage properties] valueForKey:kCGImagePropertyOrientation] }; // 4
NSArray *features = [detector featuresInImage:myImage options:opts]; // 5
這里說明一下代碼要做的事情:
- 使用默認選項創建上下文。您可以使用Processing Images中描述的任何上下文創建函數。),創建檢測器時,您也可以選擇提供
nil
而不是上下文。)
- 使用默認選項創建上下文。您可以使用Processing Images中描述的任何上下文創建函數。),創建檢測器時,您也可以選擇提供
- 創建一個選項字典來指定檢測器的準確度。您可以指定低或高準確度。在這個例子中顯示,精度低(
CIDetectorAccuracyLow
)速度快,高精度但速度較慢。
- 創建一個選項字典來指定檢測器的準確度。您可以指定低或高準確度。在這個例子中顯示,精度低(
- 創建面部檢測器。你可以創造的唯一類型的探測器是人類的面孔。
- 設置尋找面部的選項字典。讓Core Image知道圖像的方向是非常重要的,因此探測器知道在哪里可以找到直立的面孔。大多數情況下,您將從圖像本身讀取圖像方向,然后將該值提供給選項字典。
- 使用探測器查找圖像中的特征。您提供的圖像必須是
CIImage
對象。 Core Image返回一個CIFeature對象數組,每個對象表示圖像中的一個面部。
- 使用探測器查找圖像中的特征。您提供的圖像必須是
在獲得一面孔數組之后,您可能需要了解其特征,例如眼睛和嘴巴的位置。 接下來的部分描述了應該怎么做。
Getting Face and Face Feature Bounds - 獲取臉部和臉部特征界限
臉部特征包括:
- 左右眼位置
- 嘴巴的位置
- Core Image用于跟蹤視頻片段中的人臉的跟蹤ID和跟蹤幀數(可在iOS v6.0及更高版本和OS X v10.8及更高版本中使用)
從CIDetector
對象獲取一數組面部特征后,您可以遍歷數組來檢查每個面的邊界以及面中的每個特征,如Listing 2-2所示
// Listing 2-2 Examining face feature bounds
for (CIFaceFeature *f in features) {
NSLog(@"%@", NSStringFromRect(f.bounds));
if (f.hasLeftEyePosition) {
NSLog(@"Left eye %g %g", f.leftEyePosition.x, f.leftEyePosition.y);
}
if (f.hasRightEyePosition) {
NSLog(@"Right eye %g %g", f.rightEyePosition.x, f.rightEyePosition.y);
}
if (f.hasMouthPosition) {
NSLog(@"Mouth %g %g", f.mouthPosition.x, f.mouthPosition.y);
}
}
后記
本篇已結束,后面更精彩~~~