iOS程序猿之读取手机通讯录

IOS 最新通讯录和<Contacts/Contacts.h>框架 iOS 9 中,苹果介绍了新的 Contacts framework。允许用户使用 Objective-C 的 API 和设备的通讯录进行交互,同样适用于 Swift 语言。比起之前通过 AddressBook framework 来读取联系人信息来说,这是一个巨大的进步。因为 AddressBook framework 没有 Objective-C 的 API,非常难用,用 Swift 写的 阅读详情

读取手机通讯录

如今很多app都有读取手机联系人的需要,最近项目也遇到了类似的需求,这里整理下

从iOS开始,苹果废弃了以前复杂的AddressBookFramework,使用非常简单易用的Contacts Framework!

这里贴上两篇关于AddressBookFramework的博客,有兴趣的可以看看:

http://my.oschina.net/u/2340880/blog/407347

http://my.oschina.net/u/2340880/blog/407973

在Contacts Framework中,我们用到最多的就是从手机通讯录读取联系人,当然Contacts也可以向手机通讯录创建新的联系人,后面会提到!

读取联系人

引入框架:

#import <Contacts/Contacts.h>
#import <ContactsUI/ContactsUI.h>

核心代码:

- (void)viewDidLoad {
    [super viewDidLoad];
    CNContactPickerViewController * con = [[CNContactPickerViewController alloc]init];
    con.delegate = self;
    [self presentViewController:con animated:YES completion:nil];
}

// 选择某一个联系人
- (void)contactPicker:(CNContactPickerViewController *)picker didSelectContact:(CNContact *)contact
{
    CNPhoneNumber *phoneNumber = contact.phoneNumbers[0].value; // 电话号码
    
    NSString *emailStr = contact.emailAddresses[0].value; // 邮箱
    
    NSString *company = contact.organizationName; // 公司
    
    
    NSLog(@"姓名:%@%@\n电话:%@\n邮箱:%@\n公司:%@",contact.familyName, contact.givenName, phoneNumber.stringValue, emailStr, company);
}

搜索联系人

引入框架:

#import <Contacts/Contacts.h>

核心代码:

在开发中,提取联系人的使用率要远远高于创建联系人,ContactFramework提取联系人的方式,类似于数据库的检索方式,通过配置条件,提取出我们需要的数据,例如:

    CNContactStore * stroe = [[CNContactStore alloc]init];
    //检索条件,检索所有名字中有zhang的联系人
    NSPredicate * predicate = [CNContact predicateForContactsMatchingName:@"zhang"];
    //提取数据
    NSArray * contacts = [stroe unifiedContactsMatchingPredicate:predicate keysToFetch:@[CNContactGivenNameKey] error:nil];

keysToFetch是设置提取联系人的哪些数据,如上则只提取出检索联系人的名字。

同样,也可以通过请求的方式来对联系人进行遍历:

    CNContactStore * stroe = [[CNContactStore alloc]init];
    CNContactFetchRequest * request = [[CNContactFetchRequest alloc]initWithKeysToFetch:@[CNContactPhoneticFamilyNameKey]];
    [stroe enumerateContactsWithFetchRequest:request error:nil usingBlock:^(CNContact * _Nonnull contact, BOOL * _Nonnull stop) {
        NSLog(@"%@",contact);
    }];


对于Contacts Framework框架的详细介绍:

1、联系人对象:CNContact

这个对象是用来配置联系人信息的,有可变的CNMutaleContact和CNContact,区别用来读取和创建联系人。CNContact对象中有许多属性,对应联系人的一些信息。

首先,创建CNMutableContact对象:

 CNMutableContact * contact = [[CNMutableContact alloc]init];

设置联系人头像:

contact.imageData = UIImagePNGRepresentation([UIImage imageNamed:@"Icon-114.png"]);

设置联系人姓名:

    //设置名字
    contact.givenName = @"jaki";
    //设置姓氏
    contact.familyName = @"zhang";

设置联系人邮箱:

     CNLabeledValue *homeEmail = [CNLabeledValue labeledValueWithLabel:CNLabelHome value:@"316045346@qq.com"];
     CNLabeledValue *workEmail =[CNLabeledValue labeledValueWithLabel:CNLabelWork value:@"316045346@qq.com"];
     contact.emailAddresses = @[homeEmail,workEmail];

这里需要注意,emailAddresses属性是一个数组,数组中是才CNLabeledValue对象,CNLabeledValue对象主要用于创建一些联系人属性的键值对应,通过这些对应,系统会帮我们进行数据的格式化,例如CNLabelHome,就会将号码格式成家庭邮箱的格式,相应的其他键如下:

//家庭
CONTACTS_EXTERN NSString * const CNLabelHome                             NS_AVAILABLE(10_11, 9_0);
//工作
CONTACTS_EXTERN NSString * const CNLabelWork                             NS_AVAILABLE(10_11, 9_0);
//其他
CONTACTS_EXTERN NSString * const CNLabelOther                            NS_AVAILABLE(10_11, 9_0);

// 邮箱地址
CONTACTS_EXTERN NSString * const CNLabelEmailiCloud                      NS_AVAILABLE(10_11, 9_0);

// url地址
CONTACTS_EXTERN NSString * const CNLabelURLAddressHomePage               NS_AVAILABLE(10_11, 9_0);

// 日期
CONTACTS_EXTERN NSString * const CNLabelDateAnniversary                  NS_AVAILABLE(10_11, 9_0);

设置联系人电话:

contact.phoneNumbers = @[[CNLabeledValue labeledValueWithLabel:CNLabelPhoneNumberiPhone value:[CNPhoneNumber phoneNumberWithStringValue:@"12344312321"]]];

联系人电话的配置方式和邮箱类似,键值如下:

CONTACTS_EXTERN NSString * const CNLabelPhoneNumberiPhone                NS_AVAILABLE(10_11, 9_0);
CONTACTS_EXTERN NSString * const CNLabelPhoneNumberMobile                NS_AVAILABLE(10_11, 9_0);
CONTACTS_EXTERN NSString * const CNLabelPhoneNumberMain                  NS_AVAILABLE(10_11, 9_0);
CONTACTS_EXTERN NSString * const CNLabelPhoneNumberHomeFax               NS_AVAILABLE(10_11, 9_0);
CONTACTS_EXTERN NSString * const CNLabelPhoneNumberWorkFax               NS_AVAILABLE(10_11, 9_0);
CONTACTS_EXTERN NSString * const CNLabelPhoneNumberOtherFax              NS_AVAILABLE(10_11, 9_0);
CONTACTS_EXTERN NSString * const CNLabelPhoneNumberPager                 NS_AVAILABLE(10_11, 9_0);

这里的CNPhoneNumber对象也是iOS9中的一个新的类,专门用来创建电话号码,之中方法如下:

@interface CNPhoneNumber : NSObject <NSCopying, NSSecureCoding>

//通过类方法创建
+ (instancetype)phoneNumberWithStringValue:(NSString *)stringValue;
//通过初始化方法创建
- (instancetype)initWithStringValue:(NSString *)string;

@property (readonly, copy, NS_NONATOMIC_IOSONLY) NSString *stringValue;

@end

设置联系人地址:

  CNMutablePostalAddress * homeAdress = [[CNMutablePostalAddress alloc]init];
    homeAdress.street = @"贝克街";
    homeAdress.city = @"伦敦";
    homeAdress.state = @"英国";
    homeAdress.postalCode = @"221B";
    contact.postalAddresses = @[[CNLabeledValue labeledValueWithLabel:CNLabelHome value:homeAdress]];

设置生日:

NSDateComponents * birthday = [[NSDateComponents  alloc]init];
    birthday.day=7;
    birthday.month=5;
    birthday.year=1992;
    contact.birthday=birthday;

2、创建添加联系人请求:CNSaveRequest

CNSaveRequest是用于存储联系人的请求类,通过这个类,我们可以创建批量添加、修改或者删除联系人的请求,例如添加上面我们创建的联系人对象:

   //初始化方法
    CNSaveRequest * saveRequest = [[CNSaveRequest alloc]init];
    //添加联系人
    [saveRequest addContact:contact toContainerWithIdentifier:nil];

这个类中还有许多方便我们操作的方法:

@interface CNSaveRequest : NSObject
//添加一个联系人
- (void)addContact:(CNMutableContact *)contact toContainerWithIdentifier:(nullable NSString *)identifier;

//更新一个联系人
- (void)updateContact:(CNMutableContact *)contact;
//删除一个联系人
- (void)deleteContact:(CNMutableContact *)contact;
//添加一组联系人
- (void)addGroup:(CNMutableGroup *)group toContainerWithIdentifier:(nullable NSString *)identifier;
//更新一组联系人
- (void)updateGroup:(CNMutableGroup *)group;
//删除一组联系人
- (void)deleteGroup:(CNMutableGroup *)group;
//向组中添加子组
- (void)addSubgroup:(CNGroup *)subgroup toGroup:(CNGroup *)group NS_AVAILABLE(10_11, NA);
//在组中删除子组
- (void)removeSubgroup:(CNGroup *)subgroup fromGroup:(CNGroup *)group NS_AVAILABLE(10_11, NA);
//向组中添加成员
- (void)addMember:(CNContact *)contact toGroup:(CNGroup *)group;
//向组中移除成员
- (void)removeMember:(CNContact *)contact fromGroup:(CNGroup *)group;

@end

3、进行联系人的写入操作:CNContactStore

CNContactStore是一个用于存取联系人的上下文桥梁,现在,把我们创建的添加联系人的请求写入:

    CNContactStore * store = [[CNContactStore alloc]init];
    [store executeSaveRequest:saveRequest error:nil];

在模拟器上运行程序,打开联系人,效果如下:

联系人界面:

技术分享

联系人详情:

技术分享



4、获取格式化的联系人信息

iOS9中,ContactFramework也为开发者提供了非常方便的格式化信息的方法,还拿我们上面创建的联系人对象举例:

1、获取格式化的联系人姓名
    NSString * foematter =[CNContactFormatter stringFromContact:contact style:CNContactFormatterStyleFullName];
    NSLog(@"%@",foematter);

这个运行后会打印出jaki zhang,其中style风格枚举如下:

typedef NS_ENUM(NSInteger, CNContactFormatterStyle)
{
    //获取全名
    CNContactFormatterStyleFullName,
   //获取拼音全名
    CNContactFormatterStylePhoneticFullName,
} NS_ENUM_AVAILABLE(10_11, 9_0);
2、获取格式化的联系人地址
    NSString * foematter =[CNPostalAddressFormatter stringFromPostalAddress:homeAdress style:CNPostalAddressFormatterStyleMailingAddress];
    NSLog(@"%@",foematter);

打印如下:

技术分享

5、ContactFramework UI相关

iOS9中,系统也为我们封装好了一套联系人的UI界面,用起来也十分方便,主要新增的controller有两个:

CNContactPickerViewController:展示联系人列表的controller

CNContactViewController:展示联系人详细信息的controller

示例如下:

弹出联系人列表:

    CNContactPickerViewController * con = [[CNContactPickerViewController alloc]init];
    [self presentViewController:con animated:YES completion:nil];

效果如下:

技术分享

联系人逻辑的相关处理主要在CNContactPickerDelegate中完成:

//视图取消时 调用的方法
- (void)contactPickerDidCancel:(CNContactPickerViewController *)picker;
//选中与取消选中时调用的方法
- (void)contactPicker:(CNContactPickerViewController *)picker didSelectContact:(CNContact *)contact;
- (void)contactPicker:(CNContactPickerViewController *)picker didSelectContactProperty:(CNContactProperty *)contactProperty;
- (void)contactPicker:(CNContactPickerViewController *)picker didSelectContacts:(NSArray<CNContact*> *)contacts;
- (void)contactPicker:(CNContactPickerViewController *)picker didSelectContactProperties:(NSArray<CNContactProperty*> *)contactProperties;

CNContactViewController则是用来显示具体联系人的详细信息的,比如:

    CNContactViewController * con = [CNContactViewController viewControllerForContact:contact];
    [self presentViewController:con animated:YES completion:nil];

相关代理回调函数如下:

//将要展示联系人信息与已经展示联系人信息的回调
- (BOOL)contactViewController:(CNContactViewController *)viewController shouldPerformDefaultActionForContactProperty:(CNContactProperty *)property;
- (void)contactViewController:(CNContactViewController *)viewController didCompleteWithContact:(nullable CNContact *)contact;



iOS通讯录获取与展示实战指南 在移动应用开发中,访问和使用用户手机通讯录是一项常见需求,尤其是在社交、沟通和生产力类应用中。对于iOS应用开发者来说,借助Apple提供的Contacts框架,可以方便地实现对通讯录数据的访问。在深入了解如何获取和使用iOS通讯录数据之前,我们需要先了解iOS通讯录访问的权限授权机制,以及如何在遵守隐私政策的前提下进行合理开发。在开发iOS应用时,我们经常需要访问用户的通讯录信息,以便提供更加个性化和相关的服务。 阅读详情

相关推荐

ContactsFramework的Demo(Swift,通讯录)

Swift访问通讯录的简单例子,简单介绍了ContactsFramework和ContactsUI Framework

iOS9全新的联系人相关框架——Contacts Framework

一、引言         在以前iOS开发中,涉及联系人相关的编程,代码都非常繁琐,并且框架的设计也不是Objective-C风格的,这使开发者用起来非常的难受。在iOS9中,apple终于解决了这个问题,全新的Contacts Framework将完全替代AddressBookFramework,AddressBookFramework也将成为历史被弃用。至于AddressBookFr

Hchq_99的专栏 2031

联想ThinkPad声卡驱动安装避坑指南:从E470到X1 Carbon的通用解法

本文详细介绍了ThinkPad声卡驱动安装的全流程,从硬件识别到驱动获取、安装技巧及深度排错。涵盖E470到X1 Carbon等不同机型的通用解法,帮助用户解决音频驱动问题,提升使用体验。重点讲解了声音驱动的精准识别和安装策略,确保系统稳定运行。

weixin_29207439的博客 708

IOS开发中使用CNContact\CNMutableContact 对通讯录增删改查

IOS开发中使用CNContact\CNMutableContact对通讯录增删改查 首先当然是把CNcontact包含在工程中: 1 @import Contacts; 1、下面是增加联系人的程序段: 1 CNMutableContact * contact = [[CNMutableContact alloc]init]; 2 cont...

aibiao0099的博客 1937

Telegram 担保交易系统搭建指南:安全可靠的交易流程实现

本文介绍了基于Telegram Bot API搭建担保交易系统的完整方案。该系统通过第三方资金托管机制解决买卖双方信任问题,支持"付款后发货"和"收货后放款"的交易流程。文章详细阐述了系统架构设计,包括Telegram Bot交互层、后端业务逻辑层、数据库层和支付接口层。核心实现步骤涵盖:1)订单创建模块处理交易信息;2)支付处理模块集成Stripe Escrow实现资金托管;3)确认收货模块完成资金划转。系统采用PostgreSQL存储交易数据,并通过FastAPI

jingpide9527的博客 1949

qt实现程序密钥注册功能,MD5加密+AES加密,并实现一台电脑系统一个密钥

qt实现了一个给自己软件加密的功能。 原理是: 需要被注册的软件第一次运行的时候,在系统的注册表里面注册一个键值,如下: 这个值作为生成密钥的用户识别号,然后生成密钥文件key.db,把这个key.db文件放到软件执行目录下,即可完成软件的注册并正常使用软件。 软件第一次打开的界面及密钥生成工具软件界面如下: 将密钥生成工具软件生成的key.db放到软件执行目录下之后,软件即可正常使用,如下图: 代码使用了MD5加密 外加 AES加密, 解密和加密的核心代码如下: QSt.

weixin_43935474的博客 4128

iOS 9.0以后 通讯录详解

一、通讯录框架 1、ContactsUI.framework 框架。 拥有 AddressBookUI.framework 框架的所有功能,使用起来更加的面向对象。(iOS 9 之前的使用的) 2、Contacts.framework 框架。 拥有 AddressBook.framework 框架的所有功能,不再是 C 语言的 API,使用起来非常简单。((iOS 9 之前的使用的)) 二、CNContactUI 一、CNContactPickerViewContro...

cym_bj 2102

别白忙活!EAAI投稿避坑指南:5条红线碰就拒,工程应用重点划重点

EAAI投稿避坑指南:5条红线与工程应用要点 投稿《Engineering Applications of Artificial Intelligence》(EAAI)需特别注意5条红线,否则直接拒稿:1)避免提出新隐喻元启发式算法,应聚焦具体工程应用;2)摘要须明确区分AI贡献与工程应用;3)标题和摘要禁止使用未定义缩写;4)必须采用单栏格式;5)关键词不能包含缩写。此外,论文需突出AI方法在工程实践中的创新与落地价值,建议补充实际工程数据、部署成本分析和与传统方法的对比。投稿前务必逐项核查这5条要求,以

ZhangJiqun&191cm&85kg 3207

iOS获取手机通讯录(两种框架详解)

今天浏览简书,看了好多获取通讯录的,都是使用AddressBook.framework框架,没有使用Contacts.framework框架的,虽然这两种框架都可以获得手机里的通讯录信息,可是,官方API上说AddressBook.framework在iOS9被弃用了,弃用了,弃用了(重要是的事说三遍),又可是,不知道为什么目前使用AddressBook.framework在iOS9系统上依然可以

程序猿开发日志【学习永无止境】 1万+

【Inpho精品教程】Inpho简介、安装教程(附Inpho8安装包下载)

本文介绍Trimble旗下Inpho UASMaster航空摄影测量软件,涵盖其核心功能模块(如Match-AT、OrthoMaster、Summit Evolution等)及安装教程。文章详细说明了从安装到汉化破解的全过程,并提供Inpho 8.0.1安装包下载链接与提取码,适用于无人机摄影测量专业用户。

智慧空间实验室 1万+

10、边缘智能学习技术解析

本文深入解析了边缘智能学习技术的四大核心方法:联邦学习、DNN拆分、迁移学习和八卦学习。文章从人类大脑的学习机制出发,引出边缘级智能的重要性,并详细阐述各类技术的架构、优势、挑战及适用场景。通过对比分析,展示了不同技术在隐私性、效率、可扩展性等方面的特性,并探讨了未来融合多种技术、软硬件协同优化及应用领域拓展的发展趋势,为边缘智能在物联网与人工智能领域的应用提供了系统性参考。

ppp33的博客 117

iOS获取手机通讯录

一、address框架 1、有UI - (void)touchesBegan:(NSSetUITouch *> *)touches withEvent:(UIEvent *)event { ABPeoplePickerNavigationController * peoplePickerNav = [ABPeoplePickerNavigationController new];

bug小码的博客 679

枚举 ACS 电机状态位 完全解析

本文解析了ACS运动控制器SDK中的MotorStates枚举,该枚举对应控制器状态标志位?MFLAGS。主要介绍了6个核心状态:ACSC_ALL(-1)表示所有轴,ACSC_NONE(0)为空闲状态,ACSC_MST_ENABLE(1)为轴使能,ACSC_MST_INPOS(16)表示到位,ACSC_MST_MOVE(32)为运动中,ACSC_MST_ACC(64)为加速中。文章还补充了完整的枚举定义,包含报警、回零等状态,并提供了在晶圆AOI4轴运动中的典型应用场景,如判断轴状态、运动条件等。最后强调只

StevenChen的博客 246

与苹果斗争,可以不优雅,但要有用

苹果一直顽固地控制着iPhone的用户体验,通过封闭的操作系统和中心化的分发机制,还有技术上著名的“沙盒机制”。这个机制下一个App只能读取为它自己创建的文件夹,要访问其他App的内容都需要经过授权。这很好地保护了用户隐私,确保了iOS系统的安全,不过也有弊端:不少App都需要访问别的内容才能起作用。最知名的是输入法,到iOS 8之后才开放给第三方,中文用户苦苦等了7年。还有许多在Android上...

weixin_40192258的博客 110

代码复现5——VLMaps

报错“AttributeError: module 'clip' has no attribute 'load'”,运行下述命令解决。运行后接着报错:“ModuleNotFoundError: No module named 'pytorch_lightning'”运行后命令后会弹出一个RGB窗口,可以用键盘上的“W”“A”“D”键控制移动视角的变化,“空格”键开始记录,“q”键停止。并更改相关代码文件,vlmaps/vlmaps/lseg/modules/models/lseg_vit.py。

qq_44100524的博客 603

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

iOS获取通讯录的方法

iOS中通讯录的用法。CNContactStore类是iOS中的一个框架,用于访问和管理设备上的通讯录数据。它提供了一种统一的方式来获取、添加、更新和删除联系人和群组,以及监听通讯录数据的变化。在iOS开发中,CNContactStore类具有重要性,因为它允许应用程序与设备上的通讯录进行交互,从而实现诸如获取联系人信息、同步联系人数据、发送通讯录相关的通知等功能。通过CNContactStore类,开发人员可以轻松地构建与通讯录相关的功能,提高应用程序的用户体验和功能性。

我叫柱子哥 4659

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

iOS 获取通讯录的4种方式详解

目录(?)[+] 使用场景 一些App通过手机号码来推荐好友,如 微博、支付宝 首先客户端会获取通讯录中的所有手机号然后将这些手机号提交到App服务器中,服务器会查找每个手机号对应的App账号如QQ号码返回到客户端,然后客户端根据服务器返回的账号列表来推荐好友。 获取联系人方式 方案一:AddressBookUI.framework框架  提供了联系人列表界

xiaohe901216的专栏 3万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

iOS开发进阶-Contacts/ContactUI学习和使用

Contacts FrameWork是苹果推出的新联系人框架。应用于iOS 9.0之后,9.0之后将会全面取代Address Book 。用过Address Book 的开发者都应该能理解苹果为何要弃用它了。一方面对于开发者实在不是很友好,语法怪怪的。另一方面,作者猜测可能是线程安全方面做得不够好,所以苹果打算有所改进。本文将阐述Contacts和ContactsUI的基本原理和基本用法。

JoySeeDog 1万+

ios 简书 获取通讯录信息_iOS读取通讯录

iOS读取通讯录中的各种信息//读取所有联系人-(void)ReadAllPeoples{//取得本地通信录名柄ABAddressBookRef tmpAddressBook = nil;if ([[UIDevice currentDevice].systemVersion floatValue]>=6.0) {tmpAddressBook=ABAddressBookCreateWithOp...

weixin_39694838的博客 209

iOS开发------获取系统联系人(Contacts篇)

Contacts.framework是Apple在 iOS9.0 替代AddressBook.framework的框架,至于AddressBook是做什么的框架,楼主默认看到博文的开发者是知道的 O(∩_∩)O。如果想了解AddressBook的使用欢迎查看一下楼主之前关于AddressBook的博文,本篇不做过多的缀余: iOS开发——获取系统联系人(AddressBook篇) iOS开发—

RITL_Y 8764

Contacts(实战)

Contacts实战介绍

路漫漫其修远兮,吾将上下而求索! 1139

iOS9 联系人 ContactFramework

摘要 iOS9新的联系人相关框架更加易用美观。 iOS9 联系人 ContactFramework 感觉整理的很好,没有把效果图复制过来 转:http://my.oschina.net/u/2340880/blog/511995?p={{totalPage}}一、引言 在以前iOS开发中,涉及联系人相关的编程,代码都非常繁琐,并且框架的设计也不是Objective-C风格的,这使开发者用

u013196181的博客 2305

iOS---iOS9中获取通讯录的方法:Contacts. framework简单使用

1.首先创建CNContactStore对象,主要用来获取和保存通讯录: //创建CNContactStore对象,用与获取和保存通讯录信息 CNContactStore *contactStore = [[CNContactStore alloc] init]; 2.用户授权: if ([CNContactStore authorizationStatusForEntityType

xiaolei122333的博客 3966

iOS9通讯录框架Contacts的简单使用

iOS9通讯录框架Contacts的简单使用 第一步,导入Contacts框架,import Contacts ,这个是不带UI的框架,可以直接获取联系人 // 检查状态 let status: CNAuthorizationStatus = CNContactStore.authorizationStatusForEntityType(CNEntityType.Contact

WJ的博客 4469

Contacts.framework iOS9新的类,用来替代AddressBook

苹果官方文档,用的是Swift https://developer.apple.com/library/ios/documentation/Contacts/Reference/Contacts_Framework/index.html#//apple_ref/doc/uid/TP40015328 这里记录一下自己的使用情况,仅作记录,还有很多不清楚的地方。 CNContact...

174

iOS 通讯录开发的所有姿势

通讯录简介 通讯录使用场景: 电商类的 App,设置收货人电话号码。 即时通讯类 App,添加手机联系人好友。 通讯录获取方案: 一、iOS 9 以前的通讯录框架 AddressBookUI.framework框架 提供了联系人列表界面、联系人详情界面、添加联系人界面等。 一般用于选择联系人。 AddressBook.framework框架 纯 C 语言的 API,仅仅是获得联系人数据。 没有提供 UI 界面展示,需要自己搭建联系人展示界面。 里面的数据类..

u013712343的博客 2612
上一篇: iOS程序猿之图片压缩
下一篇: iOS程序猿之毛玻璃效果
iOS_wq
博客等级 码龄11年 10粉丝 24原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值