SkillAgentSearch skills...

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/SuperInterstellarTerminal

README

星际终端 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 体验视频:(建议全屏观看)

Watch the video

  • 欢迎小伙伴推荐地点及地点图片或直接加入本项目,可以先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预测的外星生物矢量图:

pets.jpg

a. 训练素材

  • 从百度爬取“外星人”的图片,但因为外星人搜出来的图太杂乱。所以改变思路,用关键词“外星人 矢量”来进行搜索爬取。搜出来的外星人图片相对没那么杂乱。勉强可以用来训练。勉强是有1/5左右是白底,有1/5左右是PS中那种透明图的格子底图或水印的,有1/5是背景各种颜色的图,还有1/5是多个外星元素组成的图。大概数据见下图:

    pets.jpg

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及效果见下面动图:

    loss.jpg

  • 具体训练项目地址见:

    Paddle2.0-通过LSGAN让我们看看AI预测的外星人长什么样子

  • 不足:

    1. 大概在200epochs就已经差不多,再训练到1000epochs反而效果还下降了。loss方面,判别器可以达到0.02,但生成器只能到0.8。这方面还可以优化

    2. 最终会有不少彩色的杂点

    3. 生成的外星生物矢量图有些还保留训练图的方格背景之类的。

    4. 生成的外星生物可能有部分过拟合,为有些很向原来的。

d. 后处理

  • 在叠加到现实图像中做AR效果时,使用cv处理优化这部分(具体见3-d中的描述)

  • 为外星生物配上背景介绍,定义他们出现的位置,建立外星生物图鉴

生物图鉴:AI生成的外星生物

<img src="https://ai-studio-static-online.cdn.bcebos.com/2628476cfe6e4e20b20cfc01994e0065d6abce5bf1e541eb942fb2e07ebc181d" width="550px" />

C.2 识别现场环境——CityscapesModule.py

a. 模型

PaddleSeg 中基于cityscapes数据集的SOTA模型

PaddleSeg训练了一个在cityscapes数据集上SOTA的模型。却很低调,只是放在contrib中,仅有个英文的介绍。里面的介绍还主要针对训练的,如果只是想要体验SOTA的cityscapes的效果是怎样的却很麻烦。本项目中化简了相关的代码,一行代码体验cityscapes分割。效果真的对得起SOTA的!

b. 相关文件

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

  • CityscapesModule.py中把pred ×10后保存成图片,见右下图(图片像素的灰度值从0~180)。

    <img src="https://ai-studio-static-online.cdn.bcebos.com/80027212ce424aac88031b60c94d7009aabf5f85914744238722e00d300db2a1" width="600px" />

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_CLONENORMAL_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_CLONEMIXED_CLONEMONOCHROME_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> |binary.jpg | 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的形状 | corrosion.jpg| | 5 | 若腐蚀后,mask图都为0,则缩小腐蚀的kernel为原来的0.6,<br>再重复4的步骤| 步骤4完成后没能找到mask中为1的点则证明,没有足够位置完全把外星宠物<br>图像放进去,我们缩小要求,要求某区域只要有60%的外星宠物<br>的大小则继续融合进去 | | | 6 | 若4或5步骤后,mask中有值为1的点,则满足条件,可进行图像合成| | |

d.4 前后关系

  • 有外星人又则怎能少了外星飞碟呢。外星飞船要逼真需要又遮挡关系,我们可以利用cityscapesModule识别出的天空区域。

Related Skills

View on GitHub
GitHub Stars46
CategoryEducation
Updated8mo ago
Forks17

Languages

Jupyter Notebook

Security Score

72/100

Audited on Jul 23, 2025

No findings