iOS 5 SDKの顔検出

iOS SDKは長い間利用可能ですが、クライアントはこのOSの古いバージョンとのプログラムの互換性に関心があるため、すべてのiOS開発者は、アプリケーションで新しいAPIを使用するのがまだ早いことを知っています。

しかし、すべてが新しいSDKでいくつかの利点が見つかりました。 最初に注目したのは、数か月前に必要だったUIViewController viewWillUnloadのメソッドでした。
iOS 5の技術革新の完全なリストは、 こちらをご覧ください
アドオンフレームワークのリストでは、CoreImageおよび特にCIDetector.hが対象です。

CIDetectorクラス 、画像内の顔を見つけて識別するのに役立つよう作成されました。これを簡単に説明します。


iOS 5 SDKでXcode 4.2を使用します。

プロジェクトを作成する

「自動参照カウントを使用する」を無効にすることを強くお勧めします。

プロジェクトフレームワークCoreImageに接続します

画像

UIViewControllerを作成する

#import <UIKit / UIKit.h>

@interface RootViewController UIViewController <UIImagePickerControllerDelegate、UINavigationControllerDelegate>
{
IBOutlet UIImageView * imageView;
IBOutlet UILabel *ラベル;
CIDetector *検出器。
}

@end


UIImagePickerControllerを使用して画像をアップロードします

- IBAction onImport id 送信者
{
UIImagePickerController * vc = [ [ UIImagePickerController alloc ] init ] ;
vc.delegate = self;
vc.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
[ self presentModalViewController vc animated YES ] ;
[ vcリリース] ;
}


デバイスをiOS 5にアップグレードしませんでした。すべてのアクションは、カメラではなくギャラリーからのインポートを使用してシミュレーターで実行されるためです。

画像内の顔を定義する

- IBAction onRecognize id 送信者
{
detector = [ CIDetector detectorOfType CIDetectorTypeFace context nil options [ NSDictionary dictionaryWithObject CIDetectorAccuracyHigh forKey CIDetectorAccuracy ] ] ;

NSDate * date = [ NSDate date ] ;

NSArray * features = [ディテクターfeaturesInImage
[ [ [ CIImage alloc ] initWithCGImage imageView.image.CGImage ] autorelease ]
] ;

NSTimeInterval ti = fabs [ date timeIntervalSinceNow ] ;

label.text = [ NSString stringWithFormat @ "Time:%0.3f \ n Faces:%i" 、ti、 [機能カウント] ] ;

UIGraphicsBeginImageContext imageView.image.size ;

CGContextRef ctx = UIGraphicsGetCurrentContext ;

CGContextDrawImage ctx、CGRectMake 0、0 、imageView.image.size.width、imageView.image.size.height 、imageView.image.CGImage ;


for CIFeature *機能の機能
{
CGRect r = feature.bounds;

CGContextSetStrokeColor ctx、CGColorGetComponents [ UIColor yellowColor ] .CGColor ;
CGContextSetLineWidth ctx、1.0f ;

CGContextBeginPath ctx ;
CGContextAddRect ctx、r ;
CGContextClosePath ctx ;
CGContextStrokePath ctx ;

}
imageView.image = [ UIImage imageWithCGImage UIGraphicsGetImageFromCurrentImageContext ). CGImage scale 1.0f orientation UIImageOrientationDownMirrored ] ;
UIGraphicsEndImageContext ;

}


結果

ドキュメントでは、 CIFeatureクラスのインスタンスはフェイスフレームとそのタイプに関する情報のみを提供しますが、AppleがOpenCVを完全にリダイレクトしたら、クラスの更新(IMHO)を待つことができます。





編集:onImportメソッドの顔を修正:

Source: https://habr.com/ru/post/J131121/


All Articles