聊聊近况和最近做的踩坑项目
好久好久好久没写博客了,上次写博客已经是一年前的事情了,聊聊什么情况吧。
所以先说说近况
大家好我是awakefantasy,去年发完那一篇之后我整个人就处于放假状态中了,结果当然是狠狠玩了一个寒假,一回来被自己整笑了。怎么又是啥也没干啊。当然你要说什么也没干也不对,毕竟会打麻将了,同时也把《天津罪》,《人狼村之谜》,《奥伯拉丁的回归》,《重返蓝鲸岛》这些作品的剧情完完整整的过了一遍。(这不还是什么都没干吗喂!!)
所以说呢,3月回来北京,看了下校园论坛里面大伙已经争先恐后的开始找实习了,也算是有点焦虑吧,就开始自己想办法做一些项目了。
当然我这人是不喜欢为了找工作而做项目的,那种对着别人已经做出来的东西再抄一遍,然后写在简历上,我实在觉得没用太大的意义,也就只能提升自己的技术水平了。我要做的东西一定要有真实需求,起码得可能有人用吧。
然后说说最近做的东西
我很感谢我的室友,机缘巧合之下看到他用codex,听他做了介绍之后,我仿佛踏进了新的世界,有了这个利器之后,我的想法可以以一个恐怖的速度变成产品,很快最初的设想我就开始投身实践了,那就是基于视觉识别的日麻助手。
很不幸,之前对话被我整没了(其实能恢复,但是因为也不做这个项目了就懒得再去恢复了),我没有办法还原这个项目的实践过程。简单说一下这个项目的实践思路:牌桌识别,包括手牌+牌河+各家副露识别→麻将引擎决策→实时提供切牌推荐,当然我主要考虑的使用场景是雀魂的牌谱中,所以截图也基本上由牌谱获取。如下这张图是我标的识别区域。
之前从来没做过图像识别的任务,愣头青就这样冲进了一个完全未知的领域。由于经验严重不足,可以说是每做一步都出了很多毛病。当然也得出了很多经验吧,这个就之后再说。
首先是数据标注,这活我只能说干一次就踏实了,再也不想干了,我让codex给我写了个标注工具,但是依然每局都要标上几十个麻将牌,在我标了几百个麻将牌之后我突然意识到了一个问题。
那就是我没有考虑这个牌桌是三维的^_^,导致每家的牌都长得不一样,比如下图,是我标的部分3索。
标完之后还是我训练之后才发现的这个问题。查出来给我气笑了。
没办法,那就把整个牌桌做投影变换,重新标注呗。下图是投影变换之后的图,当然不是这一局的,但是你能看见起码牌没有形变和奇奇怪怪的朝向了
所以我又标注了一版,如下:
说实话,标注的时候,我还不觉得有什么问题,标注完一看我惊了,丫的怎么一个个要么是竹竿要么是胖子,怎么回事呢?
当时直接拿现象问gpt5.4,无果,没办法,随开始盘查实现逻辑。当然,逻辑也是让ai一段段给我忠实翻译的。
直到发现。。。我投影变换的比例不对,我期望用的是正方形的投影变换,ai用的是长方形的投影变换。
给我气晕了,修改逻辑,变正常了,再标注一版。标注后的文件不见了,拿另一个代替:
很明显,起码牌没有莫名其妙的形变了对不对?没有为形变的退场而哀悼,下一个赶到战场的是——牌面阴影!
这正是把我项目压垮的最后一步,做到这一步时我已经反反复复的标注了n次牌了,注意到这个的时候我晕了过去,我克服了立直横牌的处理,克服了极为稀缺的红宝牌牌桌的样本,却没有克服这个神奇的阴影。你可以注意到,这里面有很多牌的牌面,和它阴影部分的颜色几乎一模一样。当时我的脑海里面只剩下了毁灭吧世界。我尝试了调整二值图的参数,尝试了单独调整颜色,总之是没成功。(其实并不是不能解决,但是实在没动力去做了,因为仔细一想也没必要做这个牌张识别)
此时我发现了已经有自动启动网页端打牌的项目了MahjongCopilot,我直接投降,不做了不做了。下图是做这个项目中产生的各种各样的实验的中间产物。
这个项目最后牌河识别精度大概是95%左右,但是我觉得实在是不具有太大实用性,所以就没做了。一张牌的识别错误会导致一堆问题,这一块就放下了。
所以说经验和教训呢
这个项目给我的教训和经验是很多的,下面逐条展开吧。
1,vibecoding的时候,一定要对实现目标,实现架构,实现方法,具有清晰的认识,ai不是许愿机,不是丢进去一个目标就能出来结果。模糊不清的描述,省略过程的描述,都可能造成很大的麻烦,比如我这里投影变换的问题,实现的时候我没有审查,实现之后标注完了才注意到牌张比例不对,这个时候就已经浪费了很多的时间了。
对应的,解决方法就是在每个功能实现的时候,自己要清楚实现方法,目标,架构,在描述清楚的情况下让ai作业,避免“帮我实现一个xxx功能”这种描述,在自己清楚实现细节的情况下尽可能描述细节,不清楚细节的情况下多与ai讨论实现思路和策略,对自己这一轮做出来的东西有清楚的认识。
比如:
我:“我想实现一个xxx功能,你有什么计划吗?”
GPT:“架构如下:。。。。”
我:“架构中xxx功能具体怎么实现?”
GPT:“。。。。”
我:“明白了,那xxx功能的这个实现中,可能会出现怎么样的问题?”
GPT:“。。。。”
多次讨论清楚细节之后再放权让它根据前面讨论的内容实现,实现之后立马测试。
总之就是你自己要清楚你的这个项目是怎么实现的,全部放权给ai只会越做越乱。
2,在自己新做一个项目的时候,要避免闷头就开始做,在开始落实到第一行代码之前,要去看看相似功能的产品是怎么做的,他们是怎么实现的。
比如我这个麻将项目,在别人已经有做好的项目的情况下再去重复造轮子,浪费时间。
那怎么做呢,在一个点子出现的同时,把问题交给ai,让它查查有没有什么相似的实现,以及可能有关联的项目,现在的主流ai的网络搜索能力都很强了,很快就能把网上的相关信息都看一遍再总结给你,我们再点进去看一下别人怎么做的就好了。
3,时刻关注技术的进步,时刻更新自己的工作流,时刻优化自己工作的方式,这个没什么好说的,多看看别人怎么用ai就行。
后记
这应该是近况(一)我应该还会写几篇近况,毕竟可不止做了这一个东西。真要说技术提升了多少,那我还真不知道,但你要说技术没提升,那也只能说不可能。(啊对的对的,啊不对不对既视感)
总之祝读到这的你们天天开心,我继续vibecoding去了。