OpenCVを使ってリアルタイムに顔認識
やはりリアルタイムに認識するのは重いですね。そりゃそうですよね、iPhoneだもの。
1.いつものようにプロジェクトファイルを作って、いったんXCodeを終了する
2.ターミナルを開き、以下を行う
[sudo] gem install cocoapodsと入力してリターンキーを押す
pod setupと入力してリターンキーを押す
3.いったんターミナルを終了する
4.ターミナルを開き、cdと入力した後にスペースを押す。そして1.のプロジェクトファイル(ファイル名.xcodeprojが入っているフォルダ)を
ドラッグ&ドロップする。そうするとパスが表示されます。そのままリターンキーを押す
5.pod initと入力
6.ターミナルを終了する。プロジェクトファイルが入ったフォルダの中にPodfileというファイルが出来ているので、それを
miなどのテキストエディタで開き、以下のように編集して保存する。
注:どうも2.4.10ではバグがあるようです。あとpod 'OpenCV'だけではダメで、バージョンも入れる必要があります
# Uncomment this line to define a global platform for your project # platform :ios, '8.0' target 'opencvTest4' do pod 'OpenCV', '2.4.9' end target 'opencvTest4Tests' do end
7.4.と同じ
8.pod installと入力し、リターンキーを押す
9.ファイル名.xcworkspaceをダブルクリックして開く
10.こちらを参照してファイルを作ったりコードを入力していく(ありがとうございます)
11.CameraUtil.swiftを以下のように書き換えたほうが良いっぽい
import Foundation import UIKit import AVFoundation class CameraUtil { // sampleBufferからUIImageへ変換 class func imageFromSampleBuffer(sampleBuffer: CMSampleBufferRef) -> UIImage { let imageBuffer: CVImageBufferRef = CMSampleBufferGetImageBuffer(sampleBuffer) // ベースアドレスをロック CVPixelBufferLockBaseAddress(imageBuffer, 0) // 画像データの情報を取得 let baseAddress = CVPixelBufferGetBaseAddressOfPlane(imageBuffer, 0) let bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer) let width = CVPixelBufferGetWidth(imageBuffer) let height = CVPixelBufferGetHeight(imageBuffer) // RGB色空間を作成 let colorSpace = CGColorSpaceCreateDeviceRGB() // Bitmap graphic contextを作成 let bitsPerCompornent: UInt = 8 var bitmapInfo = CGBitmapInfo((CGBitmapInfo.ByteOrder32Little.rawValue | CGImageAlphaInfo.PremultipliedFirst.rawValue) as UInt32) let context = CGBitmapContextCreate(baseAddress, width, height, 8, bytesPerRow, colorSpace, bitmapInfo) // Quartz imageを作成 let imageRef = CGBitmapContextCreateImage(context) // ベースアドレスをアンロック CVPixelBufferUnlockBaseAddress(imageBuffer, 0) // UIImageを作成 let resultImage: UIImage = UIImage(CGImage: imageRef)! return resultImage } }