欢迎大家来到IT世界,在知识的湖畔探索吧!
一、背景:
1、项目需要提取iPhone X的结构光数据(相机内参、深度图片),进行c++算法操作
2、本人擅长图形算法开发,但对于ios开发完全小白(高手请绕路)
二、艰难历程:
1、objective-C自学
从零学objective-c(objectivec和swift选择:ios项目基本上还是oc的,swift变化太多,api变来变去,也给我后面遇到了不少坑)
从网上找了本快速入门的书本:Objective-C基础教程(第2版)
根据里面的知识点,从c到objective c的转换,花了一周时间把整本书的内容啃了一遍(本人比较笨所以比较慢 ),发现好多知识点根本看不懂,但不影响我跳过,如“类别”、“协议”、“委托”、“内存管理”、“谓词”等,看完了之后,自认为可以去试试mac下进行开发。结果发现,xcode不会使用,只能创建项目,代码加哪里?对一个ide都不熟悉怎么能写代码,mos对应fundation+appkit,ios对应fundation+uikit
2、xcode下应用开发,框架fundation和uikit(主要找到函数入口,写代码的地方)
于是学习xcode的使用,在网上找了好几天关于xcode和ios应用开发教程,发现objectivec的ios应用开发教程几乎找不到,要么就是慕课网、极客学院那些花钱的,要两三千大洋。bi站的ios应用开发都是swift,并非oc。找不到,咋办?硬着头皮看一下swift的应用程序开发(此时还没学swift),从视频中知道,应用程序加代码都是在view的几个生命周期函数里面,如viewcontroller下的viewdidload等(搜嘎,原理和之前的Android开发差不多,也是生命周期函数,所以get到了),于是看了视频后,就能够找到准确加代码的地方!糟糕,突然想起ios开发需要开发者账号、开发证书之类,懵逼了,不懂啊,这都是啥玩意。经过询问好友(ios开发的),本地调试不需要开发者账号,说我手机之前做过认证,有证书。反正就是一脸懵逼,一句话就是说我的AppleID可以开发。包括获取摄像头是否需要权限,也问清楚确实不用!然后用看到的swift教程,去模式objective c的应用开发,结果发现程序架构完全 不一样,入口长的不一样,api文档看不懂,不知怎么用,寸步难行。挣扎至于找到了一线生机,在51自学网(没有打广告的意思)找到了教程,需要花钱,一节课3个币,想起当年,六七年前充过钱,果然还能用,于是挑了十来个比较关键的视频看了,终于找到了写代码的入口:生命周期函数!
接下来要找个开源的获取结构光数据的应用,刚开始找到ios开发文档中的AVCam:
一看源码,哇勒个去,还真多,加上不习惯oc的语法,看的有点蒙,主要是对api不熟,一大堆参数,不懂啥含义。然而又找不到其他的代码例子,或者就算找到其他的例子,是否又能真的看的懂?真的知道在哪里取数据?在哪个委托事件取?如何取?这就面临一个无法避免的问题,必须看懂api,否则原地踏步!ok,开始啃代码。由于项目时间问题,不可能啥代码都要啃,必须有个大局观,整体思路得清晰。就奔着这个目标,先弄清楚生命周期函数都有那些,加个log打印一下,ok,大体知道那几个函数是自己需要关心的。缩小了范围后,但是还依然很多委托,很多函数,不知所云,先过了 一遍,大概知道每个函数的基本功能,比如哪几个是点击按钮触发,用于更新ui,过滤一部分后,还剩下几个比较大的函数,核心代码都在里面。于是每个函数都加个断点,然后调试点击事情,挨个找对应的调用时间,结合app的功能逻辑,ok,又缩小了范围。整体有个清晰的脉络,然后开始细啃代码,一步一步跟踪代码,花了两三天,终于啃下来了。却发现,这个app里面没有深度信息相关的数据!!!这几天就这么白费了,其实也不然,真的看懂了相关逻辑,ios里面各种线程,队列满天飞,各种委托,如何定义,如何回调,还是有不少的收获,至少,我不怕他了,不恐惧了。于是,重新找其他的开源代码,几番挣扎,找到了深度信息的源码,TrueDepth,想要源码的可以私信我。拿到源码,于是先大致瞄一下是什么功能,以免又拿到无用的代码。却发现,人家用的是swift!开始了新的大坑。swift,还没学过语法,于是去3Cschool找相关的入门级别教程,发现大体和Python、php等语法差不太多,看来swift还是很人性化的,逐渐往弱语言靠拢。花了一天,过完了基础篇。开始看代码,懿!代码的复杂写法好秀,和基础篇的不是一个概念,毕竟人家是基础嘛。swift中的?和!满天飞,咋的一看真的头大,反正我现在也摸不清何时用?何时用?进坑开始!
3、数据获取、写文件、导出
数据已经找到在哪里获取了,那么新的问题是,如何把这些数据导出来,到window下进行读取写算法?对于小白的我来说,在网上也找了好多种说法,感觉都不太ios,只怪我基础太弱,看不懂里面的精髓!经过和朋友交流,总体结论是:ios的应用自带一个沙箱,所有文件都在里面保存,不允许带出,要想获取里面的数据,有以下几种方式:1、通过socket传输数据(很合情合理),2、编写下载器(我靠,这是什么玩意,我怎么可能会),3、xcode有个设备管理,有个下载,能够把应用程序内部文件搞下来(当时不理解啊,先找的都是前面的两种方式,排坑嘛,总有个像样的坑)
目标:
1、找到下载器的编写方法,找了好久,呵呵呵,找不到合适我这种小白的,看不懂。更别说写了
2、socket传输貌似可行,于是先写个1.txt,然后传输(想法完美!)
于是写swift创建文件1.txt。这个过程贼心酸!写文件的教程都是oc的,swift的基础教程没有写文件的例子,找不到啊老铁,在网上找到了好多个版本,敲完代码各种报错,说不存在这个函数,不存在这个参数,真TM的swift!了解才发现swift从1代到6代,变化太大,网上的例子都是前面五代的,13、15年一大堆,各种都是复制粘贴的,看过一模一样的大把,而我就是写不出来啊老铁!如果用c++,我一分钟搞定的事,在swift折腾的没脾气,各种提示报错,try一定要带do{}才能捕捉,报错网上搜,都不一样,当然是我菜,理解不了。迫于无奈,只有从新去看api文档,声明就写在那,你不知咋用,比如声明:init?(String)就是死活不会调用,又找不到参考代码,几番折腾,去了解ios的文件系统,终于看到了一行,用NSString就能够实现写文件操作,牛掰啊,不懂api的真心不知,竟有如此妖孽的思路,这或许就是ios委托的牛掰之处吧,于是获取沙箱路径,拼接路径,判断文件是否存在,然后写helloworld,摸了一下午可算写出来了。print(“create file success!”),不容易啊!
文件取出: xcode->window->devices and simulators->选自己的设备->选自己的App->选择设置->download container。
然后你会得到一个.xcappdata文件,邮件看内容,找到1.txt
ok,开始写相机内参、深度信息数据的代码了!加油!
三、最后感受
ios的语法真心难以适应!api文档真心看不惯!同样的操作,自己用c++可以随意写,ios就折腾的不行!swift坑真多,不知是想让更多的人用还是想赶走更多的人,反正越有挑战的技术越多人研究吧!
岗位信息,公众号回复内容:岗位
更多内容请关注公众号“图形学算法”
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/37042.html