SuperInterstellarTerminal
【X世纪星际终端】A Wechat Social and AR Game: 基于微信聊天,结合增强现实技术AR+LBS(基于图像位置)的轻社交星际漂流瓶游戏。向外太空发送漂流信息,看看AI预测的外星人是长什么样的,寻找身边的外星人,逗逗外星生物,看看外星植物及外星建筑。Send the message to the outer space, find the aliens in the earth. Let`s see what they look like from LSGAN`s prediction. Also, Have a look at the aliens' pets and the vegetation from the outer space
Install / Use
/learn @kevinfu1717/SuperInterstellarTerminalREADME
星际终端 Super Interstellar Terminal (A Wechat Social Game with AR and LBS)
- 基于微信聊天的 结合增强现实技术(AR)+LBS(暂时基于图像) 的星际漂流瓶 的轻社交游戏。重新认识你身边的世界,或许我们早已与外星生命共同生活着。
A. 项目介绍
A.1 项目模块:
项目由下面的模块组成,每个模块都可以单独使用,也可组合使用,如:直接按需就调用图像生成外星人、外星生物、外星植物、外星建筑
| 简要 | 具体描述 | 项目中的代码及模型 | | -------- | -------- | -------- | | 1.基于LSGAN的外星生物生成,利用爬虫与GAN生成我们想要的东西的过程 | 请跳转到本页中的C.1 | Train.zip | | 2.快速调用PaddleSeg的cityscapes模型,进行18类常见物体的分割 |请跳转到本页中的C.2 | CityscapesModule.py +PetModel文件夹| | 3.OpenCV的seamlessClone实现图像融合,呈现各种AR效果,遮挡关系等 |请跳转到本页中的C.3 | alienPetModule.py| | 4.外星人换脸,外星人脸与地球人脸融合效果的优化 |请跳转到本页中的C.4 | alienHeadModule.py| | 5.YUV颜色空间实现颜色图案迁移,基于CV技术生成外星植物|请跳转到本页中的C.5 | vegetateModule.py| | 6.PaddleHub的msgnet实现图像迁移,基于深度学习生成类流沙或沙画效果 |请跳转到本页中的C.6 | sandModule.py + msgnet文件夹| | 7.Wechaty漂流瓶游戏,微信漂流瓶及通过开发者模式控制整个流程 |请跳转到本页中的D | bot文件夹|
<img src="https://ai-studio-static-online.cdn.bcebos.com/d7b2a14b8b194088809eec62817b8edb4e0190220dc8417f834ff63098454625" width="1000px" />A.2 太空漂流信息
你可能收到来自一个未知星域发过来的漂流瓶,你也可以把你想抒发的情感发向星际中
-
嗨,别来无恙啊,此刻的你是否有些孤独,别怕,此时此刻,在浩瀚宇宙中,总有与你相似的灵魂,你们或许来自不同的星球,有着不同的文明,但你们仍然可以通过太空漂流瓶去表达内心的情感,快来开启你的太空漂流瓶之旅吧......
-
用户可以在加本官方微信好友后,向本官方微信发出包含文本与图片的漂流瓶。也可以主动接收漂流瓶。
-
甚至,在一个你意想不到的时刻会收到想象之外的漂流瓶信息。发送与接收漂流瓶都可以提升等级噢!
A.3 增强现实技术(AR)+位置服务(LBS)的游戏
接收漂流瓶任务,或主动出击,寻找身边潜藏的外星人、外星生物(宠物)、外星植物、外星建筑
-
基于微信聊天中的图片及文本聊天。通过文本接受到任务或主动触发。
-
可能是让用户帮忙寻找它丢失的某个外星宠物(外星生物),或者帮它找到急需用于治疗的外星植物,也可能是让你帮忙找到正在被通缉的外星人囚犯。
A.4 体验视频:(建议全屏观看)
-
欢迎小伙伴推荐地点及地点图片或直接加入本项目,可以先star或Fork跟踪更新进度
github地址:https://github.com/kevinfu1717/SuperInterstellarTerminal
-
扫码加机器人即可体验,添加申请请填“星际终端” <img src="https://ai-studio-static-online.cdn.bcebos.com/ee935680818e44c9b171da707801de391250fdafc41a47e7af38053c596281f7" width="150px" />
B. 故事背景
-
地球并不只是人类的天下,其实有数万名外星人及其外星低等生物生活在我们当中,他们有的因为母星被毁有的因为星际战乱而选择到地球避难。
-
银河星际移民局则管理并协调着他们在地球的生活。借助超高级科技,他们隐藏原来的外观,装扮成是普通地球人,我们根本分辨不出来,说不定,站在你旁边的就是一位外星友人。
-
同时,他们也带来了外星的低等生物及外星植物,通过超科技把他们隐藏起来,装扮成地球物种或我们完全看不到。
C. 项目中的技术功能介绍
-
主要模块结构及功能:
. ├── app.py # 把图像处理部分作为一个服务端,可供post调用生成图片 ├── ImgGenerateModule.py # 整合所有图像生成的总模块 ├── bot文件夹 # 机器人控制相关及漂流瓶逻辑 ├── TrainAlienFiles文件夹 # 生成外星宠物的图片 ├── alienHeadModule 及相关文件 # 外星人头换脸 ├── alienPetModule 及相关文件 # 生成外星宠物 ├── CityscapesModule 及相关文件 # 识别图片中物体并对他们进行定位 ├── vegetaModule 及相关文件 # 生成外星植物 └── sandModule 及相关文件 # 生成外星建筑
C.1 AI寻找你身边的外星生物
建立外星人图鉴,让我们看一下AI预测的外星人形象是怎样的
先看一下AI预测的外星生物矢量图:
a. 训练素材
-
从百度爬取“外星人”的图片,但因为外星人搜出来的图太杂乱。所以改变思路,用关键词“外星人 矢量”来进行搜索爬取。搜出来的外星人图片相对没那么杂乱。勉强可以用来训练。勉强是有1/5左右是白底,有1/5左右是PS中那种透明图的格子底图或水印的,有1/5是背景各种颜色的图,还有1/5是多个外星元素组成的图。大概数据见下图:
b. 数据处理与增广
- 尝试过用midars模型或CV来提取单个外星生物,但效果都不是很好。所以,最终只使用水平翻转,增加了一倍的数量。尽管可以爬取来增加这个数量,但越到后面,爬取的图片质量越差。所以还是通过水平翻转来处理。
c. 模型
-
训练文件: 见项目中 Train压缩包下
TrainAlienPet.ipynb -
模型文件: 见项目中 Train压缩包下
generator0725.params -
搜索了一下GAN的模型,结合可训练性与生成效果,选择了LSGAN。基于项目aistudio上“独楼望天涯”大佬的项目 https://aistudio.baidu.com/aistudio/projectdetail/1936908进行修改。
-
在其基础上,每个epoch执行更多的Generation,以及修改了超参数( 偶尔判别器loss高时,会有些完全不像的图)。
-
训练过程:Epoch 0 ~ Epoch 999 的LOSS及效果见下面动图:
-
具体训练项目地址见:
-
不足:
-
大概在200epochs就已经差不多,再训练到1000epochs反而效果还下降了。loss方面,判别器可以达到0.02,但生成器只能到0.8。这方面还可以优化
-
最终会有不少彩色的杂点
-
生成的外星生物矢量图有些还保留训练图的方格背景之类的。
-
生成的外星生物可能有部分过拟合,为有些很向原来的。
-
d. 后处理
-
在叠加到现实图像中做AR效果时,使用cv处理优化这部分(具体见3-d中的描述)
-
为外星生物配上背景介绍,定义他们出现的位置,建立外星生物图鉴
<img src="https://ai-studio-static-online.cdn.bcebos.com/2628476cfe6e4e20b20cfc01994e0065d6abce5bf1e541eb942fb2e07ebc181d" width="550px" />生物图鉴:AI生成的外星生物
C.2 识别现场环境——CityscapesModule.py
a. 模型
PaddleSeg 中基于cityscapes数据集的SOTA模型
PaddleSeg训练了一个在cityscapes数据集上SOTA的模型。却很低调,只是放在contrib中,仅有个英文的介绍。里面的介绍还主要针对训练的,如果只是想要体验SOTA的cityscapes的效果是怎样的却很麻烦。本项目中化简了相关的代码,一行代码体验cityscapes分割。效果真的对得起SOTA的!
b. 相关文件
-
必要文件目录结构:
. ├── CityscapesModule.py ├── testpic ├── PaddleSeg └── PetModel ├── modelCityscape.pdparams ├── pretrainedCityscape.pdparams └──mscale_ocr_cityscapes_autolabel_mapillary_ms_val.ymlpretrainedCityscape.pdparams下载地址:https://bj.bcebos.com/paddleseg/dygraph/cityscapes/ocrnet_hrnetw48_mapillary/pretrained.pdparamsmodelCityscape.pdparams下载地址:https://bj.bcebos.com/paddleseg/dygraph/cityscapes/mscale_ocr_hrnetw48_cityscapes_autolabel_mapillary/model.pdparamsmscale_ocr_cityscapes_autolabel_mapillary_ms_val.yml为PaddleSeg模型的yml文件 -
使用本模块,需修改'mscale_ocr_cityscapes_autolabel_mapillary_ms_val.yml'中model的pretrained路径到真实的模型路径,然后修改
CityscapesModule.py中的 im_path 改为你想要的图片即可
c. 功能/作用
让AI能感知环境里有拿几样物品,同时可以定位到其在图片中的具体位置。 具体识别的物品如下:
( PS:注意真实返回的ID是从0开始的,所以是trainId-1,如sky实际返回的id是10 not 11):
<img src="https://ai-studio-static-online.cdn.bcebos.com/cff349c273434fbd8b09b3df68afdea72b720add38a246ecab3be84c9c3f8f69" width="750px" />d. 使用
-
运行
CityscapesModule.py脚本,设置待处理图片的路径,将返回大小于原图片大小一样的二维数组pred,其取值是从0~18。 -
可以拿这个二维数组作为mask,例如用
np.where(mask == index, 1, 0)来截取自己感兴趣的区域,index取值为上表中实际返回ID,也即trainID -1。 -
<img src="https://ai-studio-static-online.cdn.bcebos.com/80027212ce424aac88031b60c94d7009aabf5f85914744238722e00d300db2a1" width="600px" />CityscapesModule.py中把pred ×10后保存成图片,见右下图(图片像素的灰度值从0~180)。
C.3 寻找隐藏在环境中的外星生物(外星宠物)——alienPetModule.py
a. 准备
-
配合LSGAN生成的外星生物的形象,为起配置喜好,所在环境等,写入到
ConfigPet.py中。 -
ConfigPet.py中每个dict就是一种外星生物,该外星生物的id就是那个dict的key。 -
ConfigPet.py中的areaIndex对应的就是cityScapes返回的物体ID,例如,areaIndex=10,则代表此生物是出现在天空中。 -
必要文件目录结构:
. ├── alienPetModule.py ├── ConfigPet.py ├── testpic └── PetPic
b. 作用
实现对应位置的叠加AR效果。如:天空中出现飞在天上的外星生物,树丛中会出现喜欢在树上的草食性外星生物。
c. 步骤
| 序号 | 步骤 | 操作|
| -------- | -------- | -------- |
| A | 准备 | 基于LSGAN生成的外星生物矢量图。配置其参数,如:名字、大小、常出现的位置,习性描述、是否需要遮罩等 |
| A | 选择 | 先判断alienIndex是0(随机生成),还是-1(不生成),或者是>0(生成id等于alienIndex的外星生物)。 |
| B | 定位 | 基于分割模型得到的mask区域,按照外星生物可存在的位置判断是否出现外星生物,及其出现位置。具体见关键技术点说明. |
| C | 合成 | 根据外星生物的特性使用cv2.seamleClone,参数选用MIXED_CLONE或NORMAL_CLONE。具体见关键技术点说明. |
d. 关键技术点
d.1 cv2.seamlessClone三种图像合成效果
# 会把src图的边缘进行模糊化,同时整个src图的色彩融合到dst中->需要src图较清晰,dst背景较简单,可以接受src图周边边缘模糊的场景
cv2.seamlessClone(src, dst, src_mask, center, cv2.NORMAL_CLONE)
# 基于透明度的融合,src图中白色的区域会显得透明度高,看起来叠加的颜色比较透->适合dst背景较复杂,但对src图清晰度要求不高,src图背景是白色的场景
cv2.seamlessClone(src, dst, src_mask, center, cv2.MIXED_CLONE)
# 会把src图变成灰度图合成到dst中->暂时看不到什么好用途
cv2.seamlessClone(src, dst, src_mask, center, cv2.MONOCHROME_TRANSFER)
借用别人的图,懒得生成了,左中右分别是:NORMAL_CLONE,MIXED_CLONE,MONOCHROME_TRANSFER:
简单背景:
<img src="https://ai-studio-static-online.cdn.bcebos.com/26f3028a7e404c2ca1ac9832ade2bde3a321b49cb0794d408e21ac3211f802b2" width="800px" />复杂背景:
<img src="https://ai-studio-static-online.cdn.bcebos.com/37fecba19fcf4e578a4ea896bac4b4624e652bad0b7649cdb6b0bb17f5d2cd0d" width="800px" />效果好坏于背景图dst及前景图src都有关系
d.2 结合mask的优化版seamlesClone图像合成效果——代码见alienPetModule.py中的maskOfWhiteBG() ,roiAreaCheck()
步骤 | 步骤 | 说明 | 备注 |
-------- | -------- | -------- |-------- |
1 | 把src的外星生物图转成HSV格式,<br>通过V通道,V大于200得到二值化的mask| HSV的V分量可以当作是亮度,在本次LSGAN生成的外星人中<br>基本都是白色底的,可以抠处白色底 | |
2 |二值化的图进行开运算|<div style="width: 150pt">去除LSGAN中生成的一些彩色噪声点,得到外星生物的mask,宁愿漏也不要去多了。<br>因为合成时有个渐变,自然就把杂点淡化了 </div> | |
3 |把2中的二值化图进行边缘裁切,<br>使mask图的四个边都有白色区域接触| 这可能是seamlessClone的一个bug,若白色区域不接触图像边缘,<br>其合成时的位置是按白色区域的中心点位置,不是mask图像的中心点位置,切记!!! | |
4 | 根据裁切后的mask,重新计算中心点<br>左边center=(x,y)| seamlessClone的center参数是src的中心点在dst图中的位置 | |
d.3 结合cityScapes分割的AR定位——代码见alienPetModule.py中的erode2LeftTop(),leftTop2Center()
| 序号 | 步骤 | 说明 | 备注 |
| -------- | ----- | -------- |-------- |
| 1 | 利用cityScapes返回的pred图中,获取画面中某个物品的mask| 利用np.where(pred==areaIndex, 1, 0)生成二值化mask | <img width=300/>|
| 2 | 根据用户图片dst的大小,及外星宠物的scaleRatio参数,调整外星<br>宠物图片的大小| 大小设置为dst图像长边scaleRatio,再有一个(0.8~1)倍的随机 | |
| 3 | 对二值化mask图4个边缘的值都设置0| 相当于mask图边缘多了一个黑色的框,方便待会腐蚀时,可以<br>从边缘也腐蚀。否则,贴着边缘值为1的点待会都不会倍腐蚀 | |
| 4 | 以调整后的外星宠物图像的边长d,对二值化mask图像进行opencv的<br>腐蚀操作。腐蚀后,值为1的点则为可选的外星<br>宠物图像进行seamlessClone的center点| 腐蚀相当于我们的卷积,当该点腐蚀后仍为1,则证明其腐蚀前周围值<br>为1的点能组成一个d×d的形状 | |
| 5 | 若腐蚀后,mask图都为0,则缩小腐蚀的kernel为原来的0.6,<br>再重复4的步骤| 步骤4完成后没能找到mask中为1的点则证明,没有足够位置完全把外星宠物<br>图像放进去,我们缩小要求,要求某区域只要有60%的外星宠物<br>的大小则继续融合进去 | |
| 6 | 若4或5步骤后,mask中有值为1的点,则满足条件,可进行图像合成| | |
d.4 前后关系
-
有外星人又则怎能少了外星飞碟呢。外星飞船要逼真需要又遮挡关系,我们可以利用
cityscapesModule识别出的天空区域。 -
一
Related Skills
YC-Killer
2.7kA library of enterprise-grade AI agents designed to democratize artificial intelligence and provide free, open-source alternatives to overvalued Y Combinator startups. If you are excited about democratizing AI access & AI agents, please star ⭐️ this repository and use the link in the readme to join our open source AI research team.
best-practices-researcher
The most comprehensive Claude Code skills registry | Web Search: https://skills-registry-web.vercel.app
groundhog
398Groundhog's primary purpose is to teach people how Cursor and all these other coding agents work under the hood. If you understand how these coding assistants work from first principles, then you can drive these tools harder (or perhaps make your own!).
isf-agent
a repo for an agent that helps researchers apply for isf funding

