日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

OpenCV图像处理——iOS端人脸检测

發布時間:2025/3/21 pytorch 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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里面的代碼:

void UIImageToMat(UIImage *ui_image, cv::Mat &cv_dst) {assert(ui_image.size.width > 0 && ui_image.size.height > 0);assert(ui_image.CGImage != nil || ui_image.CIImage != nil);//開緩沖區NSInteger width = ui_image.size.width;NSInteger height = ui_image.size.height;cv::Mat cv_mat8uc4 = cv::Mat((int)height, (int)width, CV_8UC4);CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();if (ui_image.CGImage){CGContextRef contextRef = CGBitmapContextCreate(cv_mat8uc4.data, cv_mat8uc4.cols, cv_mat8uc4.rows, 8, cv_mat8uc4.step, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrderDefault);CGContextDrawImage(contextRef, CGRectMake(0, 0, width, height), ui_image.CGImage);CGContextRelease(contextRef);}else{static CIContext* context = nil;if (!context){context = [CIContext contextWithOptions:@{ kCIContextUseSoftwareRenderer: @NO }];}CGRect bounds = CGRectMake(0, 0, width, height);[context render:ui_image.CIImage toBitmap:cv_mat8uc4.data rowBytes:cv_mat8uc4.step bounds:bounds format:kCIFormatRGBA8 colorSpace:colorSpace];}CGColorSpaceRelease(colorSpace);cv::Mat cv_mat8uc3 = cv::Mat((int)width, (int)height, CV_8UC3);cv::cvtColor(cv_mat8uc4, cv_mat8uc3, cv::COLOR_RGBA2BGR);cv_dst = cv_mat8uc3; }UIImage *MatToUIImage(cv::Mat &cv_src) {assert(cv_src.elemSize() == 1 || cv_src.elemSize() == 3);cv::Mat cv_rgb;if (cv_src.elemSize() == 1){cv::cvtColor(cv_src, cv_rgb, cv::COLOR_GRAY2RGB);} else if (cv_src.elemSize() == 3){cv::cvtColor(cv_src, cv_rgb, cv::COLOR_BGR2RGB);}NSData *data = [NSData dataWithBytes:cv_rgb.data length:(cv_rgb.elemSize() * cv_rgb.total())];CGColorSpaceRef colorSpace;if (cv_rgb.elemSize() == 1){colorSpace = CGColorSpaceCreateDeviceGray();} else{colorSpace = CGColorSpaceCreateDeviceRGB();}CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data);CGImageRef imageRef = CGImageCreate(cv_rgb.cols, cv_rgb.rows, 8, 8 * cv_rgb.elemSize(), cv_rgb.step.p[0], colorSpace, kCGImageAlphaNone|kCGBitmapByteOrderDefault, provider, NULL, false, kCGRenderingIntentDefault);UIImage *ui_image = [UIImage imageWithCGImage:imageRef];CGImageRelease(imageRef);CGDataProviderRelease(provider);CGColorSpaceRelease(colorSpace);return ui_image; }void faceDetection(cv::Mat &cv_src, cv::Mat &cv_dst,std::string &face_class) {cv::CascadeClassifier face_classifier;face_classifier.load(face_class);if (cv_src.empty()){return;}cv_dst = cv_src.clone();cv::Mat cv_gray;//灰度化cv::cvtColor(cv_src, cv_gray, cv::COLOR_BGR2GRAY);//直方圖均衡化,用于提高圖像的質量equalizeHist(cv_gray, cv_gray);//存放檢測到人臉的矩形std::vector<cv::Rect> faces;//開始檢測face_classifier.detectMultiScale(cv_gray, faces, 1.2, 3, 0, cv::Size(24, 24));//畫出檢測到的矩形的位置for (size_t t = 0; t < faces.size(); t++){rectangle(cv_dst, faces[static_cast<int>(t)], cv::Scalar(0, 0, 255), 2, 8, 0);}}

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; } @end

6.連接到真機運行如下:

注:有興趣于OpenCV學習的可以加。

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的OpenCV图像处理——iOS端人脸检测的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91在线综合| 日韩一区二区精品 | 激情涩涩| 精品麻豆av| 国产伦精品一区二区三区视频孕妇 | 亚洲色图综合网 | 91日日夜夜 | 51成人| 亚洲精品一区二区三区蜜桃 | 黄色一级免费看 | 国产福利不卡 | 五月中文字幕 | 亚洲欧美国产精品久久久久久久 | 亚洲五码av | 亚洲久操 | 高清不卡一区二区三区 | 中文在线а√在线8 | 丰满岳乱妇在线观看中字无码 | 天天操天天草 | 免费av一级 | 国产视频资源 | 免费萌白酱国产一区二区三区 | 插入综合网| 男女黄床上色视频免费的软件 | 久久久久亚洲色欲AV无码网站 | 在线观看av毛片 | 放荡闺蜜高h苏桃情事h | 中文字幕在线免费观看 | 日韩一区二区精品视频 | av老司机福利 | 国产欧美一区二区三区精华液好吗 | 91视频这里只有精品 | 香蕉网久久 | 国产情侣在线播放 | 国产成人97精品免费看片 | 国产精品欧美性爱 | 亚洲天堂手机在线 | 欧美午夜精品久久久久久蜜 | 美女野外找人搭讪啪啪 | 亚洲一区国产一区 | 粉嫩aⅴ一区二区三区四区五区 | 精品国产乱码久久 | 最新av免费在线观看 | 宅男深夜视频 | 成人黄色免费看 | 国产热99 | 成人欧美精品一区二区 | 在线免费观看麻豆 | 91资源站 | 三浦惠理子aⅴ一二三区 | 久久av综合网 | 一区二区三区波多野结衣 | 青青草在线视频免费观看 | 九色porny原创自拍 | 国产精品自拍区 | 中文在线亚洲 | 亚洲精品在线中文字幕 | 成人a级网站 | 夜夜精品一区二区无码 | 欧美啪啪一区二区 | 大咪咪av| 视频一区二区在线观看 | 日本三级吃奶头添泬无码苍井空 | 国产欧美日韩精品在线 | 欧美又粗又长 | 亚洲精品乱码久久久久久黑人 | 免费看的黄色录像 | av午夜天堂| 欧美群妇大交群 | 精品久久在线观看 | 熟妇人妻中文av无码 | 欧美日韩国产在线一区 | 麻豆久久久久久久久久 | 呦呦在线视频 | 日韩不卡免费 | 在线看成人av | 91插插插插插 | 亚洲一区第一页 | 日本国产中文字幕 | 日本欧美韩国国产精品 | 精品久久久免费 | 自拍偷拍精品视频 | 毛片视频免费观看 | 国产欧美在线 | 狠狠操2019 | 丁香六月色 | 一卡二卡精品 | 少妇高清精品毛片在线视频 | 在线观看黄网址 | www.777奇米 | 97国产精品视频人人做人人爱 | 色宗合 | 激情五月激情综合 | 日韩一区二区三区不卡视频 | 亚洲黄色免费观看 | 91色影院| 日韩久久一区 | 国产理论一区 | 久久久久久蜜桃 |