[日常碎碎念] 2022.10.01

前言

国庆节快乐,祝祖国母亲繁荣昌盛!难得的7天假期,爽啦!其实这周开始大家就已经开始摸🐟了,身边只要需求不紧急的同事就已经在规划7天去哪里玩了,甚至Leader都准备run了。工作氛围还是健康的,就是天天都要接触新的内容,加班实在是有点痛苦。从学习如何在混淆代码中修复Bug,到内存泄漏定位,再到多团队沟通协作,一直都在学习的路上,希望这几个月的加班没有白费吧。

回顾

更新Apple装备

在月中的文章里面,我曾经锐评过Apple的秋季发布会。当时还立下Flag说自己怎么都不会去更新iPhone,谁更新谁就是大怨种。殊不知大怨种竟是我自己😂。最后还是利用年年焕新的机会换到了iPhone 14 Pro 暗紫色 128G。其实当初自己没有想买的冲动,只是因为周五需要早起抢购9月30日回家的高铁票🚄,买完车票后,恰好心痒痒。于是上Apple Store上碰碰运气,看看能不能约上,约不上就不换新机了。(自从接触了Coding后,我其实很少娱乐的需求,大多数时间下手机的需求都是拍照,微信,听音乐)

没想到的是年年焕新的优先级比较高,竟然一下子就约到了周日的换机资格。本着也不是不能换的想法,周末就屁颠屁颠的跑去了深圳益田广场的Apple Store去取货了,也就有了前几天发的到手展示了。

说实话,今年的暗紫色真的是深得我心,太有Sony Xperia的feel,骚且沉稳,拿出去特别低调,符合我的需求。至于说Dynamic island,虽然不至于💩上雕花,但只能说是锦上添花,动效确实很Nice,刷地铁卡的时候,卡片从屏幕中弹出⏏️,随后滑动到岛上,最后显示余额的设计确实很棒。但感觉不太能吸引人入手,感觉不是什么革命性的提升,聊胜于无。(期待Apple开放API,我想在岛上播放Bad Apple试试看)

Airpods Pro 2 – 1899元

另外我还入手了Airpods Pro 2。用了一周的时间,分享一下我的使用感受:

1.降噪效果惊人

在地铁的嘈杂环境中,这么个小东西的降噪效果居然好到只剩下了通过骨头传递的机械噪音,大部分的环境噪音都已经被隔绝;在家里面打开吸尘器也能够轻松过滤掉高频噪音,各项表现好到不可思议,着实震撼到了我。同时耳压也是前所未有的低,相较于QC35闷头的感觉有了大幅度的减弱,戴几天就适应了。

2.耳机柄可以调节音量

这个功能其实入手前,我曾经还说挺无聊的,明明就是一个掏出耳机就能做到的操作,做到耳机上不是脱裤子放屁吗? 用了一周下来,这功能其实还挺实用的。比如在写这篇博文的时候,我可以专注于在文字的创作上,而不需要分心去调节音量。用户仅仅需要用手在耳机柄上轻轻划一下就能控制音量,滑动识别的准确率非常高,随便掰一下就能控制大小,没想到这么实用。

3.支持Watch充电线和MagSafe充电线

这个功能对于已经入手了Apple Watch的用户超级友好,出门的时候仅仅需要带一条Apple Watch充电线即可,完成手表和耳机壳的充电。耳机盒同时也是具有磁铁定位,可以保证不放歪。

4.耳机壳扬声器和Airtag

这一代的耳机壳有了扬声器,充电的时候还会有ding~一声的提示音,在找耳机壳的时候也可以连接到耳机壳上来外放声音帮助定位。虽然我没丢过耳机壳,但是我曾经试过耳机壳在自己眼皮子底下隐形了(被书盖住看不到🙈),搭配Airtag功能这下应该能够大幅度避免这种情况的发生。

力荐《赛博朋克:边缘行者》

Cyberpunk: Edgerunners

扳机社与CDPR合作的超强制作,豆瓣的描述是这样子的:的一名街头流浪儿在一个科技和形体改造泛滥的夜之城中挣扎求生,一无所有的他成为一名“边缘行者“来维持生计。

通过描述夜之城的一个支线小故事来讲述底层与荒阪公司之间的激烈反抗,超级无敌好看,画风超强,剧情跌宕起伏,缺点就是太短了只有10集,但是真的太TM牛逼了,力荐!!!2022年我心目中的第一动画非《赛博朋克:边缘行者》莫属。

SteamDeck

朋友之前从美国官网预定的SteamDeck开始发货了,历经了20多天的快递,终于到手了。趁着10.1假期赶紧跑朋友家体验了一番。

朋友买的是512GB的顶配版,大约花了5700多到手,主要是税费比较贵,机器本体价格还算OK。

机器上手的第一感觉是重,作为一台掌机而言SteamDeck实在说不上是轻,第二则是来自Xbox的同款操作设计😂,按键太nm软了,毫无反馈而言,4个背键又硬的不行,太拉了吧。触控板貌似还没有游戏适配,暂时不知道除了做鼠标触控板之外还有什么作用。系统是基于Dolphin的SteamOS,不过好多Bug时不时还会闪退,系统稳定性有待提高。不过既然是掌机最重要的还是游戏啦,SteamOS会很贴心的标注出哪些游戏进行了完整的适配,哪些游戏是兼容,哪些又是完全不能玩。单纯看朋友的游戏库,3A大作基本都是兼容的,像是大表哥2和GTA5更是做了完全适配。相信在V社的号召下,会有更多的厂商愿意来适配的。

由于是朋友的机器,所以仅仅体验到了两个游戏,GTA5和大表哥2。机器的屏幕仅有720P全程基本是维持在40-50帧上下,少数场景下可以达到60,不过对于一个随身掌机咱们追求的更应该是能玩而不是好看,不是么?实际游戏体验其实还可以,途中尝试在大表哥里完成了一个任务,任务全程没有特别明显的掉帧。背键实用性较强,潜行的时候可以不用使用XYBA来控制蹲下起来,只要轻轻按一下背键即可,操作行云流水。要是以后可以改良一下这个按键的软硬度和触感就更好了。(我很喜欢Switch的按键回馈,清脆利落)

最后请了朋友一杯星冰乐,在星巴克畅玩了2小时,实在是太爽了。跟朋友分享游戏的快乐与魅力真的是迷人,好期待下一次合作游戏。

结语

起时没啥好说的了,就祝愿大家国庆玩的开心,多赚钱,平安喜乐吧。

[日常碎碎念] 2022.09.11

前言

中秋节悄然抵近,时间就来到了9月中旬了,原来还计划在8月写一篇日常碎碎念的,但迫于各种工作安排,疫情防控措施,导致没有得到实施。(归根结底就是我好懒啊,周末就想打游戏,连电脑都不想动了。)不过8月确实没啥好写的,除了一个封闭培训,其他时间就是被无尽的OKR填的满满当当的,来TME的时候天天都说自己一定要早下班,争当反卷联盟的积极分子,没想到迫于工作压力,反而成了组里最卷的了。感觉工作起来真的是力不从心,好多东西都没接触过,基本都要占用自己的一些周末时间去消化才能有点成果,真的好累😔。我都有一点不确定我来上班这个选择是不是正确的了。

回顾

探寻贝果🥯

在深圳的时候,总是看到有人在大众点评上安利的一家在蛇口专门做贝果的烘焙房,于是乎趁着周末去品尝了一下。

我点的这个是蔓越莓+原味奶油,口感是非常有韧劲的,类似于松软版的碱水面包,带有一点蔓越莓酱的味道,看剖面很明显能看出是自己做的面团,并不是加了科技发的很蓬松,烤完之后也非常的酥脆,当作正餐就很不错,下午茶就太饱了。

价格不贵12元一个,奶油可要可不要,感觉回家拿面包机烤一下,抹点咸味黄油也挺不错的。就是店家卖20块一杯的美式太TM难喝了,就跟凉茶掺水一样,除了焦苦味啥味道都没有了,非常不推荐,感觉自己就是纯纯的大怨种。

封闭培训

虽然行业不景气,但公司还是给今年的新人都办了统一的封闭培训。不过封培过程问题不断😂,先是因为疫情原因被推迟了两次,后面下定决心开搞之后,又因为社区要求,被迫撤退,真的是太难忘了。组里又缺人手+需求满天飞+OKR,导致封培天天加班到2点,感觉还不如回公司上班,回公司加班我最多也就是23点就能走了,真的是太痛苦了😖。我又是那种社恐人,真的是太难受了,不想去做陌生人社交。只想上班写码赚钱,下班放松的生活,不想要去跟太多陌生人打交道。

中秋快乐🎑

中秋节公司发了云腿月饼,意料之外的好吃,不过样子和口感更加偏向于酥饼而不是月饼了。

味道有点类似于鸡仔饼的味道,酥脆加上甜甜咸咸的火腿馅料,意味的好吃。

Apple秋季发布会

熬夜跟朋友看完了发布会,感觉今年的iPhone 14索然无味,对于去年入手了13 Pro的我来说,灵动岛的升级真的不足以成为我使用“年年焕新”计划的理由,加之今年的AC+从原来一年只能修两次,统一变成了修无数次,感觉就更加没有动力去升级了。

倒是AirPods Pro 2的升级挺对我的胃口,之前相继入手了AirPods,QC35,Sony XM系列,Freebuds 2耳机,虽然都能用,但是我还是希望有一副降噪,入耳,支持苹果生态联动的耳机。想着买新不买旧的原则,一直没有入手AirPods Pro 1,今年的发布会终于让我如愿以偿,周五一发售我就预订了。今年的升级点也挺戳我心的,通过耳机就能调整音量,控制降噪,唤起Siri这三个手势,基本就意味着不用掏手机了,感觉骑车的时候会很方便。

至于说自适应降噪,空间音频这些功能我倒是不太关注,前者Sony早就做到了,相信苹果也会做的不赖,后者的体验说实话真的很一般,Apple Music听起来就怪怪的,等年底的《人生切割术2》上线TV的时候我再试试看,用来看电视剧和电影的体验会不会更好吧,就现阶段而言,借朋友的AirPods 3体验了一下,漂移和延迟的现象还是会有的,体验一般般,不值得抱有高期望。

结语

这一期真的是我单纯的叨逼叨了,没啥有意义的价值输出,8月9月真的是好忙。没想到居然真的有人在用wTodo,还被人催更了,但我却没时间来搞,感觉有点对不起支持我的用户了。希望9月底把OKR的第一部份搞完了能够恢复平静吧,就现阶段而言真的挺累的,今天抽空上来把这篇博文发出去之后,我还要开电脑继续工作一下,真的让人有点不爽😕。

我讨厌社交🔫

有些时候真的只是被迫成为一个社牛而已,更多时候我还是想要自己一个人或者找自己熟悉的好友一起游戏,不想跟陌生人社交,特别讨厌这种感觉,明明能够一个人安安静静地工作为啥非要去找其他人合作,真tm的傻逼。

如何在Apple Watch上添加Loading动画?

背景

去年11月的时候,买了人生第一支Apple Watch,因为内心涌动的软工魂,我又开始琢磨开发一个属于自己的iOS App。之后顺理成章的推出了自己首个WatchApp,《wTodo》一个用于在Apple Watch上管理微软待办事项的工具应用。

无原生组件怎么办?

由于App需要经常性联网,因此不免需要引入Loading态来告知用户当前的运行状态。不巧的是watchOS中提供的组件是阉割后的版本(主要是为用户的续航考虑,如果直接套用手机端那一套组件,watch的续航会受不了的),导致watch端并没有原生的组件能够实现Loading动画,这也让我苦恼了很久。后面下班摸鱼的时候,偶然在stackoverflow上看到了解决办法。

帧动画

如标题所述,在watchOS上只能通过“帧动画”来曲线救国,实现Loading动画。在这里给大家推荐一个来自Stackoverflow高赞中推荐的动画库。

https://github.com/mikeswanson/JBWatchActivityIndicator

该动画库提供了两种帧动画样式,第一种是类原生的Loading帧动画,如果个人比较偏爱原生动画的话,可以使用这个,直接点开“common image”就可以找到不同尺寸,不同帧率的帧动画了;第二种则是通过作者提供的工具,自定义动画的样式,如果想要自定义则需要clone项目到本地,然后通过Xcode打开项目运行到Simulator中即可,调整完参数后,点击生成即可获得符合自己要求的帧动画素材。

如何使用?

这里用类原生动画举例子:

1.从Common Image中选择自己需要的尺寸和帧率

这里我选择Normal Size 15帧的帧动画图片

2. 将帧序列图片拖到WatchKit App的Assets.xcassets文件夹中

3.在StoryBoard中引入Image组件

4.绑定Image组件到Controller上

5.设置Image组件参数

使用startAnimationWithImages后就会开始播放帧序列动画了,因此可以用来看作是动画开始函数。

6.停止播放帧序列动画

总结

至此只要在需要使用Loading动画的地方配置对应的Image组件即可给页面加上Loading态了。实现方法非常简单易用,就是国内文档太少了,只能去社区里找略麻烦了一点。如果希望自己去寻找更多内容的话,可以使用“loading indicator”去搜索,感觉会比Loading Animation说的更准确一些。

PS:

不知不觉就到8月底了,8月的碎碎念我还没来得及写,上周优化了wTodo加入了LoadingIndicator,这周就把加载动画的技术文章尝试沉淀下来了。如果下周有时间的话,我再花时间把碎碎念给肝出来吧。工作日加班真的消耗完我写代码的精力了,到了周末感觉都不想再碰电脑了,只想出门逛一下散散心。(真的不是我咕咕咕啦!)

[日常碎碎念] 2022.07.24

前言

6月7月眨眼就过去了,说实话6月其实我还经历了挺多事情的,从月初的参与第一次公司团建到大学四年生活的终点🏁。过去的六个月的每一篇月记中我都会提及时间过的真的好快,快到我感觉大学与工作之间已经没有了任何的界限,仿佛是边打工边上学一样。这种身份的转变让我真的有点难以接受,有一种难以言说的怪异的感觉。这篇文章本来计划是在7月初的时候发出来的,不过先是碰上了周董的活动,整个公司都在疯狂加班,后来又遇上空调结冰漏水折腾了一周,直到昨天才将空调修好,导致到今天才能挤出时间来将这篇碎碎念写出来。

回顾

大学毕业🎓

舍友合照

转眼间就读完4年大学了,时间过的真的太快了。依稀还记得2018年入学的那一天,跟舍友在京东便利店碰面的场面,陌生、紧张、好奇,一切都刻蚀在记忆中。感觉大学记忆只有2018年的大一第一学期和2021年的大三第二学期,前者是进入自己的本科生涯,带来的喜悦感;后者则是废寝忘食奋斗一个月终于拿到阿里腾讯的Offer的充实感。大一的时候始终是无法理解大四学长所说的“好好珍惜大学时光”这句话的意义的。只有自己身处大四学长的位置,才能深刻的明白其含义和重量。不过也不用这么伤感,下一站前往自己的Dream Company,做自己的Dream Job,难道不值得庆祝高兴吗🎉。

文远知行 无人Bus 🚌

一直都知道文远知行和小马AI在南沙进行无人车的试运行试验。但苦于南沙离市区实在是太远了,专程去体验一次貌似不太值当,趁着这次市政府允许文远知行在市区实验的机会,我当然是不能错过的啦。趁着回校毕业的间隙,去广州塔下体验了一次文远知行的无人巴士。

巴士外观

巴士主体呈灰色,车身的AB柱上分别安装了四个机械激光雷达用于车身四周的态势感知,车头还有两个激光雷达用于进行远距离的提前感知,四周的大尺寸玻璃上张贴着文远知行与广州公交的贴纸。(PS: 浪费了绝佳的视野啊喂)。

车辆内部

进入车辆内部,虽然体验的时候还是6月底,广州还不没进入真正的夏天,但让人意外的是,车辆提供的冷气非常充足,超级冷,很爽,从主观上就给体验加分了。车内除了空调还配置了空气净化器,在疫情这个大背景下还是让人感到十分安心的。

车辆安装了跨越整个车身的天花板照明系统,在昏暗的桥底和隧道中,足以将车内照亮。车内主要有三排座椅,一共可以坐8个人,每个人都有安全带。不过我那天去的时候,第一排的位置由于配置了安全员,所以乘客只能坐在后排,万幸的是当天来体验的人不多,车内乘客算上我总共就三个人,体验还是不错的。

实时态势感知

车顶左右两侧和前向分别安装了三块大屏幕,左右两侧的屏幕主要是用来展示当前车辆的运行线路和座位使用状态(是否有人,是否已经挤上安全带),前向的屏幕主要是展示当前车辆的态势感知状态。态势感知分为左右两大部分,左侧屏幕主要是车头实时录像+运行方向展示的AR图像,右侧屏幕主要是激光雷达的ROI图,展示了车辆当前的定位,档位,剩余电量,车道线,车辆运行方向,路径上的车辆信息以及红绿灯感知。对于人行道上的人和植物都会展示成激光雷达扫描出来的点云图,有《全境封锁》Echo图内味了。

车辆行驶中的视野非常的好

在运行过程中车内配置了一名安全员,随时准备接管车辆,保证了车辆的行驶安全,同时在上车前还会检查大家的绿码,总体来说还是比较安全,值得来体验一下的。

小米滑板车改造

不知不觉就已经在深圳工作了半年了,期间真的深受深圳公交系统其害。我都搞不懂,深圳这么一个在国家改革前沿的城市,为啥公交系统能够做的这么稀烂,想去的地方,统统都得绕路,明明骑车去只要10分钟,搭地铁起码要30分钟,真的是离谱他妈给离谱开门,离谱到家了。于是,我下定决心,一定要入手一台电驴。原计划是看上了九号的A35+的,不过由于深圳地区要加价到2999元,我一时间下不去手,就放弃了。或许你会说,明明雅迪,009之流有2000甚至1600之类的车型呀,甚至性能更好,续航更好,干嘛要被九号割韭菜呢?我其实就是图九号好看和智能属性去的,不然也不会甘愿被割了😂。一次偶然,我在上班的时候看到楼下停了很多小米的电动滑板车,由于停车方便的缘故,突然就给我种草了。于是上闲鱼800元收了一台历史历程已经有1000KM的战损版滑板,不过前主人也很厚道,车辆换了实心胎,送了我一把锁和前挂包,算是拿到手就能立刻用起来了。

战损版小米滑板车

由于一直对电驴的改装很着迷,因此我经常会在淘宝上搜相关的配件信息。滑板车拿到手后,我也迫不及待上网搜了一下,于是被我发现了这个。

数字码表

我惊奇的发现,我这台滑板车居然可以升级仪表板,使其增加速度显示功能,着实是令人激动,二话不说就剁手了。到货后,顶着烈日当空,在楼下的停车场倒腾了一个小时,终于将仪表板换上了。虽然中间遇到了一些小技术问题,但在老板的细心指导下还是快速的解决。不得不说玩车真的是有无限的魅力,即使它是一台滑板车,折腾的时光还是让人快乐的。

装上盖板前的样子

晚上我又拉出去溜了一下车,25km/h的时速真的是好爽啊!!吹着阵阵凉风,回家吹着空调喝着碧泉乌苏实在是一件美事。

懒人Cocktail:碧泉乌苏

这个是我在抖音上学到的,虽然很多人都会说少看抖音,但说实话辩证的看待,还是能学到一些有用好用的知识的。最近就学到一个懒人鸡尾酒🍹,只需要简单的三样就可以做出来,不过人家视频的标题就是露营也可以做的鸡尾酒。

材料

  1. 冰块
  2. 碧泉柠檬茶
  3. 乌苏啤酒

可选的用一个冰杯来装饮品,能够让口感更好,我这里就用了我之前买的玻璃杯来装。制作方法超级简单。

  1. 从冰箱取出冰杯
  2. 往被子里装半杯冰块
  3. 倒入装满半个杯子的乌苏
  4. 倒入柠檬茶直到装满整个杯子
  5. 搅拌一下
  6. 开喝

入口首先是碧泉柠檬茶的柠檬茶味道,酸酸甜甜一点点茶涩,然后就是淡淡的乌苏啤酒的味道,喝一杯直接上头,在炎热的夏天来一杯,实在是太爽了。

茅台雪糕

橱窗里摆满了茅台雪糕

周末的时候去了万象天地闲逛,偶然发现居然有的卖网红茅台雪糕,因此本着不蹭白不蹭的原则,赶紧去买了个尝尝鲜。虽然说价格明码标价但确实好贵,2倍于哈根达斯的价格,真不愧是新时代雪糕刺客🥷。

明码标价,童叟无欺

包装精致,茅台标志的出现,让整盒雪糕的身价从6元飞涨11倍道66元,实在是送人佳品,出差旅行必备良品。

说回雪糕本身,雪糕口感非常丝滑,带有茅台香气,没有酒精感,其实还是很好吃的一款雪糕🍦。要不是66元的售价,我还是会愿意复购的。

空调坏了😅

空调鳍片结冰

在7月初的时候,空调总是会在晚上飞溅出冰块来,一开始我还以为是开太冷导致的冷凝水,随着时间推移,最近天气热起来了,空调不仅仅开始飞出冰块,还开始漏水了,搞得我几个晚上都没有睡好觉,由于闷热潮湿,直接把我给干EMO了。最近赶忙联系房东解决问题,赶紧让房东把空调换了,才有我今天可以舒服的坐在电脑前码字,把这边延期已久的博文写完的可能性。

Homekit支持模式和温度显示了

结语

其实我也不想咕咕咕的,加班真的是好累,感觉忙完这几年,我还是要伺机重启留学计划,出去见见世面的,真的是不想要这样子的生活。

[Discode] 生成 & 识别Discode

简介

书接上文,在上一章节中,我详细的分析了市场上已经落地应用的部分商用方案,也针对自己的实际需求进行了思考,设计了适合需求的编码规范和编码形式。在本章节中,我将会分享一下Discode的生成和识别过程和技术细节。

目录

  1. 生成Discode
  2. 识别Discode
  3. Github仓库
  4. 编后语
  5. 版权声明

生成Discode

如何生成图形编码?

在前面的设计原型中,Discode中包含四个定位点的设计。按照设计Discode的定位点类似于微信小程序码的定位点,基础元素是由一个圆环和一个圆点组成的图案。

定位点

之后会将其等距离的放置在图形编码的四个角上,用于图形的定位,如下图所示。

确定好定位点之后,我们就需要生成我们的图形编码了。图形编码包含两个部分:

一、用什么规则来代表数据?

参考条形码的设计,我决定通过点与线来分别代表0和1。之所以会有这样子的想法,是我认为在之后的学习研究识别过程中,点与线的识别应该会有更多现成的代码可以参考学习,不用自己再花大量时间来研究。

基于这种想法,通过简单的编程在canvas上生成了上图的DEMO图形,拥有五个定位点与按照一定规则环状点线的编码区所组成的Discode。(之所以在图形的中心也包含一个定位点,主要是当时想用来确认圆心是否能够被计算正确,所以增加的辅助图形,在技术验证后就被品牌Icon代替。)

二、存储数据量要设计多大?

在之前的原型设计中,我曾经分析过小程序拥有多种容量的设计,比如36线、72线、144线等设计。通过增加线密度来增加图形的数据承载量。因此我也对此进行了一些简单的实验。

上图是每隔五度绘制一位数据的72线版本的Discode,可以很容易的看到,在内圈的1-3层,由于图形之间的间隙过小,很容易产生图形与图形间粘连在一块的问题,特别是第二圈右下角的多线段连在一块很难辨别的问题。

题外话

那为啥微信小程序可以支持72线?

通过观察微信小程序的设计规范可以发现,之所以元信息区并不是从最内圈开始的原因:就是为了解决72线可能会导致图形绘制过于密集,导致编码图形难以被识别和处理。而选择了往外移了几圈,才开始进行实质性的编码。

微信小程序码的编码设计

对比实际编码出来的图形,我们可以发现,为了美观考虑,小程序码在元信息区往圆心方向的编码区其实只有36线,即10度才记录一个编码,只有在元信息区才开始使用72线,即5度进行一个编码。

那问题就迎刃而解了,要么就是将实际数据编码区往外移,要么就是减少单圈编码密度。最终我还是选择了减少单圈编码密度作为我的解决方法,之所以选择这个方法就是图省事,简单快速的解决问题,不然将编码区外移又需要耗费一部分的时间来重新设计编码规范,我着实是不想这么干。

增大到10度一编码后,图形的视觉效果就好多了,另外也部分程度上的解决了图形粘黏的问题。解决了编码问题后,我们只要将定位点、编码区组装起来就是我们设计出来的Discode了。

其实到这一步Discode就已经生成完成了,只要在中间预留的空白处填上我们希望填充的Logo即可。

识别Discode

识别Discode主要有以下的几个步骤:

  1. 使用Hough Circle获取定位点的圆心坐标

通过Hough Circle Transform获得四个定位点的相对于图片的位置信息。

  1. 通过四个定位点计算编码区圆心位置

接下来连接对角点,形成两条线段(红线与蓝线),计算交点位置。

如上图顺序对应0-3的四个坐标代入公式计算得出圆心坐标。

  1. 设置ROI(Region of interest)识别指定区域

Discode的编码起点如下图所示:

Discode从上图的矩形框中开始生成第一位编码,然后在相同半径内沿着逆时针方向(红箭头),生成接下来的编码,当一圈编码完成后就自增半径,开始第二圈的编码直到编码五圈为止。

而识别其实就是逆向这个过程,如上图设置图像的ROI到图像的编码开始点,然后逆时针一个一个识别,一圈一圈识别,直到识别完成。

  1. 使用Canny edge detection获得识别区的轮廓

在上一步中,我们设置了图像的ROI,接下来我们要做的就是计算这个ROI内的图形到底代表的是0还是1。

识别的核心原理:计算ROI区域内的图形的面积。

之所以我们可以这么做,是因为我们已知ROI的面积信息,我们也知道长线段占用的面积理应大于短线段的常理,基于这两个信息,我们只要计算ROI内图形面积,并通过经验设定一个阈值来判定是长线段还是短线段。知道线段类型后,转换成0和1就水到渠成了。

这里我们引入了Canney边缘检测,通过边缘检测获得ROI内图形的轮廓数据。

  1. 通过contourArea函数计算轮廓面积

获得轮廓数据后,我们就可以计算出ROI中的闭合图形个数以及总面积信息,之所以有时候个数会大于1,是因为有时候ROI会重复识别到上一个图形的边缘,导致到污染了识别区。不过由于这种现象仅仅发生于长线段的交接处才会发生,且数据影响不大,因此我也没有做进一步的处理。如果要继续优化,可以继续精细化ROI区域,使得覆盖率提高。或者调整生成图形算法,加大线段之间的间隙,避免互相粘黏。

  1. 判定图形代表0或1

通过多次的实验可得,短线段的占用的面积必定小于10,大于10的必定是长线段。因此在这里使用10作为阈值,用于判定ROI内的图像是代表0或1。

  1. 分割 & 转换

将每个图像代表的二进制数值存入数组当中并将其按照6bit为一位通过编码字典,重新转换成可阅读的字符串。

  1. 输出结果

由于有时候编码的字符不一定会用完全部可用编码位,因此还会在有效编码后面加入一些随机数据作为填充,使得图形更加美观。

Github仓库

https://github.com/7gugu/Discode

仓库中包含了完整的生成和识别图形代码,可以自行运行学习一下。实测通过FireFox 100是可以正常运行的。

编后语

至此整个Discode系列就全部更新完成了。原来在这个部分我思考了很久,写了几个版本的内容,先是是过拆分成两个章节来慢慢讲解,也试过回溯历史结合QRCode来阐述为啥我要这么做,但效果都不尽如意,过于的繁琐冗余,最后还是秉着少即是多的原则,缩减成一章来讲解。五月中的时候恰好碰上了组内的技术分享,有幸向其他同事分享了我的这个想法,也得到很多宝贵的建议。之后由于毕业设计和工作上的琐事,使得进度很慢,对此向期待这篇技术分享的朋友说声抱歉。接下去我应该会专注于wasm和三维建模上,希望以后可以投入游戏产业,继续实现个人梦想。

版权声明

知识共享许可协议

本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。

[日常碎碎念-特别篇] 五年前给自己做的语音时间胶囊

这个录音的声音真的好陌生,不知不觉就过去5年了,5年前我还在高中摸🐟摆烂,怎么也想不到五年后的自己居然能够如愿进厂打工,也算是没有愧对五年前对自己的期望了。(不过我还是没去找女朋友,继续寻找吧,应该能找到的,希望。)科技在疫情的大背景下其实也没啥太大的发展,可能探月探火这种航天技术的发展也是相对巨大的吧。

最近自己都在忙工作和论文,Discode的文章虽然还在写,但进度还是很慢。周末仅有的两天假期,我还是更愿意花一天时间到处走走,而不是宅在家里写代码,或许哪一天我逛累了就会回归初心继续coding吧,不过谁知道呢?能够安心、平淡的摸鱼其实也不错,能够免于裁员,能够混口饭吃就是幸福感了吧。想家了,虽然交通很方便,回家所需的时间跟大学回家的时间也是相同,但毕竟是背井离乡,还是想念的。朋友都在家乡找饭吃,感觉出来打工也没啥朋友,好孤独呀。此时此刻的我,喝着啤酒,吃着牛肉干,在这发着水文,一时间不知道应该写啥,就先到这里吧。明天也要继续加油了,平安喜乐。