OpenCV图像处理——iOS端人脸检测
生活随笔
收集整理的這篇文章主要介紹了
OpenCV图像处理——iOS端人脸检测
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言
1.OpenCV有專門的iOS平臺的包,可以真接下載導入工程,也可以用cmake把OpenCV源碼編成.a文件,以靜態庫的形式導入工程。
2.我這里用的Xcode11,OpenCV用的是最4.20這個版本。
3.這里用到的人臉檢測是OpenCV官方給的級聯分類器,可以在OpenCV源碼的Data目錄中找到。
iOS人臉檢測
1.新建一個iOS工程,把用于與C++混編的文件后綴.m改成.mm,添加一個用于做圖像處理的文件,也改成.mm文件。如下:
2.把OpenCV和人臉檢測的級聯分類器導入工程。
3.在main.storyboard里面添加一個UIImageView,兩個Button,然后關聯到事件,如下:
4.處理文件里Commom.mm里面的代碼:
5.交互文件ViewController.mm里面的代碼:
#import "Common.h" #import "ViewController.h" #import <AVFoundation/AVFoundation.h> #import <AVKit/AVKit.h>@interface ViewController () <UINavigationControllerDelegate, UIImagePickerControllerDelegate>@property (strong, nonatomic) UIImagePickerController *ui_album_selected;/* 相冊選擇器 */ @property (strong, nonatomic) AVPlayerViewController *ui_player;/* 視頻播放器 */ @property (weak, nonatomic) IBOutlet UIImageView *ui_show_view;/* 顯示圖片 */ @property (nonatomic, weak) UIImage *ui_selected_image;@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];//設置顯示圖片可交互self.ui_show_view.userInteractionEnabled = YES;//創建AVPlayerViewController控制器AVPlayerViewController *playerVC = [[AVPlayerViewController alloc] init];playerVC.view.frame = self.ui_show_view.bounds;[self.ui_show_view addSubview:playerVC.view];self.ui_player = playerVC;self.ui_player.view.hidden = YES; } #pragma mark - UI點擊 /* 點擊打開本地相冊 */ - (IBAction)pickImage:(id)sender {//如果正在播放視頻,停止播放if (self.ui_player.player){[self.ui_player.player pause];}//創建圖片選擇控制器UIImagePickerController *ipc = [[UIImagePickerController alloc] init];//判斷設備是否有圖冊if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]){//設置拾取源類型ipc.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;//設置媒體類型,這里設置圖冊支持的所有媒體類型,圖片和視頻ipc.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:ipc.sourceType];}ipc.delegate = self;//設置代理ipc.allowsEditing = YES;//設置可編輯self.ui_album_selected = ipc;//彈出圖片選擇控制器[self presentViewController:ipc animated:YES completion:nil]; } #pragma mark - UIImagePickerControllerDelegate代理方法 /* 選擇了一個圖片或者視頻后調用 */ - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {//獲取選擇文件的媒體類型NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];NSURL *videoURL = nil;if ([mediaType isEqualToString:@"public.image"]){//選擇了圖片//獲取選擇的圖片self.ui_selected_image = [info objectForKey:UIImagePickerControllerOriginalImage];//self.ui_id = self.ui_selected_image;//顯示圖片self.ui_show_view.image = self.ui_selected_image;self.ui_show_view.contentMode = UIViewContentModeScaleAspectFit;NSLog(@"found an image %@",self.ui_selected_image);//刪除視頻self.ui_player.player = nil;self.ui_player.view.hidden = YES;}else if ([mediaType isEqualToString:@"public.movie"]){//選擇了視頻//獲取臨時保存視頻的URLvideoURL = [info objectForKey:UIImagePickerControllerMediaURL];NSLog(@"found a video %@",videoURL);//直接創建AVPlayer,它內部也是先創建AVPlayerItem,這個只是快捷方法AVPlayer *player = [AVPlayer playerWithURL:videoURL];self.ui_player.player = player;self.ui_player.view.hidden = NO;}[self dismissViewControllerAnimated:YES completion:^{if (videoURL) {//調用控制器的屬性player的開始播放方法[self.ui_player.player play];}}]; } /* 取消選擇后調用 */ - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {[self dismissViewControllerAnimated:YES completion:^{//取消選擇后繼續播放視頻if (self.ui_player.player){[self.ui_player.player play];}}];NSLog(@"取消選擇"); }- (IBAction)faceDetection:(id)sender {NSString* const model_file_name = @"haarcascade_frontalface_default";NSString* const model_file_type = @"xml";NSString* model = [[NSBundle mainBundle] pathForResource:model_file_name ofType:model_file_type];std::string face_class = [model UTF8String];cv::Mat cv_src;UIImageToMat(self.ui_selected_image, cv_src);cv::Mat cv_dst;faceDetection(cv_src, cv_dst, face_class);UIImage *face_image = MatToUIImage(cv_dst);self.ui_show_view.image = face_image; } @end6.連接到真機運行如下:
注:有興趣于OpenCV學習的可以加。
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的OpenCV图像处理——iOS端人脸检测的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenCV的图像处理——iOS与Ope
- 下一篇: OpenCV图像处理——深度学习样本制造