從名字就大概能猜到,Vision 可以執(zhí)行計(jì)算機(jī)視覺任務(wù)。過去我們大概只能用 OpenCV 來做,但現(xiàn)在 iOS 終于有了自己的 API。

Vision 可以執(zhí)行的任務(wù)有以下種類:
- 找出圖片里的面部。每張臉都有一個(gè)矩形。
- 尋找詳細(xì)的面部特征,例如眼睛和嘴巴的位置,頭的形狀等等。
- 找出圖片里矩形的東西,如路標(biāo)。
- 跟蹤視頻里物體的移動(dòng)。
- 確定 horizon 的角度。
- 轉(zhuǎn)換兩張圖片使內(nèi)容對(duì)齊。對(duì)于拼接圖片很有用。
- 檢測(cè)圖片中包含文本的區(qū)域。
- 檢測(cè)和識(shí)別條形碼。
利用 Core Image 和 AVFoundation 已經(jīng)能夠?qū)崿F(xiàn)上述的某些任務(wù),但它們現(xiàn)在都被集中在同一個(gè)框架里,有統(tǒng)一的 API。
如果你的 App 需要做這些計(jì)算器視覺任務(wù),就不再需要自己實(shí)現(xiàn)或用其他人的庫(kù)了——用 Vision 框架即可。也可以把它和 Core Image 結(jié)合使用,以獲得更強(qiáng)的圖像處理能力。
還有更好的:Vision 可以用于驅(qū)動(dòng) Core ML,利用這些計(jì)算機(jī)視覺技術(shù)來預(yù)處理你的神經(jīng)網(wǎng)絡(luò)。例如,可以使用 Vision 來檢測(cè)人臉的位置和尺寸,裁剪該區(qū)域的視頻幀并在面部位置運(yùn)行神經(jīng)網(wǎng)絡(luò)。
事實(shí)上,只要對(duì)圖片或視頻使用 Core ML,就應(yīng)該使用 Vision。如果只用 Core ML,就需要確保輸入圖像是模型所需的格式,但有了 Vision 框架就可以調(diào)整圖像的大小。省事。
使用 Vision 驅(qū)動(dòng) Core ML 的代碼如下所示:
// Core ML 機(jī)器學(xué)習(xí)模型
let modelCoreML = ResNet50()
// 將 Core ML 模型連接到 Vision
let visionModel = try? VNCoreMLModel(for: modelCoreML.model)
let classificationRequest = VNCoreMLRequest(model: visionModel) {
request, error in
if let observations = request.results as? [VNClassificationObservation] {
/* 利用預(yù)測(cè)完成任務(wù) */
}
}
let handler = VNImageRequestHandler(cgImage: yourImage)
try? handler.perform([classificationRequest])
注意可以給 VNImageRequestHandler 請(qǐng)求對(duì)象的數(shù)組,以把幾個(gè)計(jì)算機(jī)視覺任務(wù)連在一起,像這樣:
try? handler.perform([faceDetectionRequest, classificationRequest])
Vision 讓計(jì)算機(jī)視覺真的變得易于使用。但對(duì)于喜歡機(jī)器學(xué)習(xí)的人來說,則可以把計(jì)算機(jī)視覺任務(wù)的輸出輸入到 Core ML 模型中。再結(jié)合 Core Image 的力量,就可以造出無比強(qiáng)大的圖像處理管道!