Giter Site home page Giter Site logo

kevinfu1717 / superinterstellarterminal Goto Github PK

View Code? Open in Web Editor NEW
43.0 2.0 16.0 9.45 MB

【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

Python 49.37% Jupyter Notebook 50.63%
lsgan paddlepaddle paddlehub paddleseg opencv ar cityscapes-dataset msgnet wechaty wechat

superinterstellarterminal's Introduction

星际终端 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文件夹

A.2 太空漂流信息

你可能收到来自一个未知星域发过来的漂流瓶,你也可以把你想抒发的情感发向星际中

  • 嗨,别来无恙啊,此刻的你是否有些孤独,别怕,此时此刻,在浩瀚宇宙中,总有与你相似的灵魂,你们或许来自不同的星球,有着不同的文明,但你们仍然可以通过太空漂流瓶去表达内心的情感,快来开启你的太空漂流瓶之旅吧......

  • 用户可以在加本官方微信好友后,向本官方微信发出包含文本与图片的漂流瓶。也可以主动接收漂流瓶。

  • 甚至,在一个你意想不到的时刻会收到想象之外的漂流瓶信息。发送与接收漂流瓶都可以提升等级噢!

A.3 增强现实技术(AR)+位置服务(LBS)的游戏

接收漂流瓶任务,或主动出击,寻找身边潜藏的外星人、外星生物(宠物)、外星植物、外星建筑

  • 基于微信聊天中的图片及文本聊天。通过文本接受到任务或主动触发。

  • 可能是让用户帮忙寻找它丢失的某个外星宠物(外星生物),或者帮它找到急需用于治疗的外星植物,也可能是让你帮忙找到正在被通缉的外星人囚犯。

A.4 体验视频:(建议全屏观看)

Watch the video

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生成的外星生物

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):

d. 使用

  • 运行CityscapesModule.py脚本,设置待处理图片的路径,将返回大小于原图片大小一样的二维数组pred,其取值是从0~18。

  • 可以拿这个二维数组作为mask,例如用np.where(mask == index, 1, 0)来截取自己感兴趣的区域,index取值为上表中实际返回ID ,也即 trainID -1

  • 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_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

简单背景:

复杂背景:

效果好坏于背景图dst及前景图src都有关系

d.2 结合mask的优化版seamlesClone图像合成效果——代码见alienPetModule.py中的maskOfWhiteBG() ,roiAreaCheck()

步骤 步骤 说明 备注
1 把src的外星生物图转成HSV格式,
通过V通道,V大于200得到二值化的mask
HSV的V分量可以当作是亮度,在本次LSGAN生成的外星人中
基本都是白色底的,可以抠处白色底
2 二值化的图进行开运算
去除LSGAN中生成的一些彩色噪声点,得到外星生物的mask,宁愿漏也不要去多了。
因为合成时有个渐变,自然就把杂点淡化了
binary.jpg
3 把2中的二值化图进行边缘裁切,
使mask图的四个边都有白色区域接触
这可能是seamlessClone的一个bug,若白色区域不接触图像边缘,
其合成时的位置是按白色区域的中心点位置,不是mask图像的中心点位置,切记!!!
4 根据裁切后的mask,重新计算中心点
左边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
2 根据用户图片dst的大小,及外星宠物的scaleRatio参数,调整外星
宠物图片的大小
大小设置为dst图像长边scaleRatio,再有一个(0.8~1)倍的随机
3 对二值化mask图4个边缘的值都设置0 相当于mask图边缘多了一个黑色的框,方便待会腐蚀时,可以
从边缘也腐蚀。否则,贴着边缘值为1的点待会都不会倍腐蚀
4 以调整后的外星宠物图像的边长d,对二值化mask图像进行opencv的
腐蚀操作。腐蚀后,值为1的点则为可选的外星
宠物图像进行seamlessClone的center点
腐蚀相当于我们的卷积,当该点腐蚀后仍为1,则证明其腐蚀前周围值
为1的点能组成一个d×d的形状
corrosion.jpg
5 若腐蚀后,mask图都为0,则缩小腐蚀的kernel为原来的0.6,
再重复4的步骤
步骤4完成后没能找到mask中为1的点则证明,没有足够位置完全把外星宠物
图像放进去,我们缩小要求,要求某区域只要有60%的外星宠物
的大小则继续融合进去
6 若4或5步骤后,mask中有值为1的点,则满足条件,可进行图像合成

d.4 前后关系

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

  • 一句代码实现遮挡:

    【伪代码】 np.where(mask=天空的index, 已叠加飞船的图,原图)

C.4 外星人显形——alienHeadModule.py

a. 准备

  • Paddlehub landmark模型

landmark的68个人脸关键点模型具体介绍请见官方介绍:https://gitee.com/PaddlePaddle/PaddleHub/tree/release/v2.1/modules/image/keypoint_detection/face_landmark_localization

  • 必要文件目录结构:

    .
    ├── alienHeadModule.py  
    ├── ConfigHead.py
    ├── landmarkModule.py
    ├── labelmeReader.py
    ├── CVTools.py
    ├── testpic
    └── HeadPic
    

b. 作用

实现外星人换脸

c. 步骤

序号 步骤 操作
A 准备 1 找到一张外星人正面的照片与侧面的照片,扣出其形象保存图片。
2 我们需要手动用labelme的keypoint为其标上68个关键点,大概就好,不用太精确。landmark数据按labelme格式保存到json中。
3 配置外星人的人脸参数到ConfigHead.py中。

序号 步骤 操作
B 对齐 1 对用户发来的图片,利用PaddleHub的landmark模型获取图片中的人脸特征点。
2 正脸使用正脸的外星人照片的,侧脸用侧脸的预处理照片。若角度太偏则不进行处理。然后,使用landmark中脸颊的特征点求中点进行人脸图像位置上的对齐。并根据用户图片的人脸对外星人人脸进行大小调整
C 融合粘贴 1. 截取外星人人脸,生成一个上到下的渐透明的遮罩图。用cv2.seamlessCloned的NORMAL_CLONE复制到原人脸位置,但因为seamlessClone没法调参数的,外星人形象融在背景里面,不太明显不清晰。
2. 截取外星人人脸及颈部及上半身,生成一个上到下的渐透明的遮罩图。用cv2.addWeight把外星人脸与1中所述的人脸进行透明度融合

d. 关键技术点

d.1 问题分析

直接把外星人脸贴到用户图上边缘会很硬,如上图中的左图。

d.2 单方向渐变遮罩

使用从上到下的遮罩,可以有效渐变过度到身体。上到下的渐变mask生成见CVTools.py中的gradientMask()。只用上到下的渐变,是因为外星人头会比正常人头大,本身过渡要求不高,所以上,左,右方向的融合过渡,依靠seamlessClone则可较好处理。剩下 下 这个方向是连接颈部或身体的需要渐变遮罩过渡。(见下图)

d.3 双重图片叠加融合

  • 只是使用seamlessClone融合,会因为seamlessClone算法影响,把贴上去的外星人图颜色变得较多,算法只为让其融合到附近环境。原图是这样的:

  • cv2.seamlessClone没有参数调节,使得整个外星人头的颜色都变了。见下图左。 双重图片叠加融合,效果见下图右。

  • 双重图片叠加融合步骤:(具体代码为项目中:alienHeadModule.py)

    序号 步骤 操作
    1 生成head的渐变mask 使用d2所述的方法生成头部的渐变遮罩)
    2 hard paste head 使用直接粘贴替换的方式,把外星人的head粘贴到用户的图的适当位置
    3 生成Body的渐变mask 把外星人头及颈部或身体上半部 对齐head的位置,使用d2所述的方法生成mask
    4 seamlessClone Body 使用3所述的mask图,把外星人身体上半部seamlessClone到用户的图中,需要保证粘贴后头的位置是跟步骤2一样的
    5 合成 使用cv2.addWeight实现透明度叠加步骤2与步骤4的图。 cv2.addWeighted(src1, alpha, src2, beta, gamma),根据不同外星人的皮肤深浅调节alpha,beta。最终效果见上图中

C.5 寻找生长在地球的外星植物——vegetateModule.py

a. 准备

  • 找一些外星植物的图片,实现非深度学习的基于图像技术的颜色纹理迁移。也可以是一些想要的风格的图,如下图中的任意一种

  • 必要文件目录结构:

    .
    ├── vegetateModule.py  
    ├── ConfigVegetae.py
    ├── testpic
    └── VegPic
    

b. 作用

把环境中的植物变换成外星风格的植物

c. 步骤

序号 步骤 操作
A 准备 基于这些外星植物,在ConfigVegetae.py中配置其参数,如:名字、常出现的位置,习性描述等
A 选择 先判断vegetateIndex是0(随机生成),还是-1(不生成),或者是>0(生成id等于vegetateIndex是0的外星植物)。
B 定位 基于分割模型得到的mask区域,按照外星生物可存在的位置判断是否出现该外星植物,及其出现位置。
C 合成 根据外星植物的特性使用yuv颜色通道合成。具体见关键技术点说明.

d. 关键技术点

d.1 YUV颜色区间

  • 比较熟悉CV的同志们可以忽略此节

  • 我们使用CV的方法进行处理时,通常不会再RGB颜色空间处理,而是转到HLS/HSV 也有 YUV颜色空间进行处理。这样作的好处是 其中的H 通道在一定程度上可以表示其颜色。通过这样来选择特定的颜色,S代表饱和度,V代表亮度。而YUV中 Y是亮度,U,V分别是 蓝 红 通道。

  • YUV具体介绍可见:https://zhuanlan.zhihu.com/p/95952096

d.2 YUV颜色融合

  • 我们也可以通过Y通道融合亮度,保留外星的U,V通道,即保留其颜色。当两个图片融合时,通过调节融合的Y通道的权重,控制合成出来的颜色亮度。

    # 把图片style,content转到yuv空间
    yuv = cv2.cvtColor(np.float32(style), cv2.COLOR_BGR2YUV)
    y, u, v = cv2.split(yuv)
    yuv2 = cv2.cvtColor(np.float32(content), cv2.COLOR_BGR2YUV)
    h, j, k = cv2.split(yuv2)
    
    # 根据ratio这个比例来合成 style 与 content两张图
    hy = np.array((h * ratio + y * (1 - ratio)), 'uint8')
    # hy = np.clip(hy, 0, 255)
    
    # 两张图进行合成
    content = np.dstack((hy, u, v))
    content = cv2.cvtColor(np.float32(content), cv2.COLOR_YUV2BGR)

C.6 寻找被外星人隐藏起来的外星建筑——sandModule.py

a. 准备

  • 使用Msgnet迁移训练的沙画模型,实现基于深度学习的风格迁移。 大家可以对比一下5中的外星植物的效果,那是基于CV技术的迁移

  • 必要文件目录结构:

    .
    ├── sandModule.py  
    ├── ConfigVegetae.py
    ├── testpic
    └── msgnet
        ├── style_paddle.pdopt
        └── style_paddle.pdparams 
      

msgnet需下载模型文件并解压到msgnet文件夹下,参考上述文件结构:下载地址

b. 作用

把环境中的建筑变成像流沙组合起来的建筑

c. 步骤

序号 步骤 操作
1 定位 基于分割模型得到的mask区域,定位areaIndex==2,即building的区域。
2 图像迁移 把建筑转成灰度图,然后用msgnet迁移成流沙的风格.

C.7 使用ImgGenerateModule 建立Alien Server或直接调用

a. 直接调用函数

ImgGenerateModule可以单独使用或app.py也可单独建立flask的图像生成服务供其他用途使用

  • 初始化函数定义各个模型文件夹及图片素材的位置

    imgGenerator = ImgGenerator(
        debug=False,
        ymlPathSeg='PetModel/mscale_ocr_cityscapes_autolabel_mapillary_ms_val.yml',    #cityscapes分割模型的yml
        modelPathSeg='PetModel/modelCityscape.pdparams',    #cityscapes分割模型文件
        modelPathSand='msgnet',    #沙画模型文件夹
        picPathHead='HeadPic/',    #外星人头素材
        picPathPet='PetPic/',    #外星生物素材
        picPathVeg='VegPic'    #外星植物及外星建筑素材
    )
  • 调用函数生成

    输入是图片路径:

      rc, img, des = imgGenerator.run(
        dstPath,
        alienHeadIndex=0,
        vegetateIndex=0,
        environmentIndex=0,
        alienPetIndex=0
    )

    输入直接是图片:

      rc, img, des = imgGenerator.runImg(
        img,
        alienHeadIndex=0,
        vegetateIndex=0,
        environmentIndex=0,
        alienPetIndex=0
    )
  • 参数说明

    参数名 必选 类型 说明
    img/dstPath string 待处理图片或待处理图片的地址
    alienHeadIndex int 是否进行换外星人头,-1为不处理,0为随机,>0为指定index为该值的外星人
    vegetateIndex int 是否添加外星植物,-1为不处理,0为随机,>0为指定index为该值的外星植物
    environmentIndex int 是否生成外星建筑外墙,-1为不处理,>0为生成
    alienPetIndex int 是否进行添加外星生物,-1为不处理,0为随机,>0为指定index为该值的外星生物
  • 返回说明

    参数名 类型 说明
    result_code dict { 返回结果代号 :返回结果描述},result_code参数具体见代码中说明,200为正常生成
    img numpy array 生成的图片或原图片(没有适合的位置生成时返回原图片)
    dis dict 包含生成外星人/生成外星植物/生成外星建筑/生成外星宠物的参数的字典. 没有进行处理则为空字典

b. 建server,访问图像生成接口 (本项目中使用的方式)

不确定什么原因,以前Wechaty都可以在AI Studio的脚本任务跑,现在好像不可以了,从AI Studio脚本任务无法访问外网的端口了,可以ping通外网。所以,需要另外找自己的主机作深度学习这部分的图片推理生成,因此直接把上述功能再弄到flask中,弄了个接口。

  • 接口代码见:项目中的app.py脚本

  • 接口文档说明见showdoc:https://www.showdoc.com.cn/1525661816374166/7370335053618085

  • 并发问题:flask接口默认允许并发,即可能很短时间内或同一时间调用里面的函数的,但鉴于我们的运算都是GPU的,不支持并发调用。所以,使用了gevent来设置阻塞的服务。即会一个处理完再调用处理下一个,中间还没处理的会等待。

C.8 识别图像的拍摄位置

a. 前提条件(需同时满足下面条件)

  • 用户是在微信中,用原图发送照片给我们

  • 照片拍照时,其拍照设置中打开了保存地理位置信息

b. 背景情况介绍

c. 获取经纬度——exifModule.py

  • python中有pip库可以直接获取照片的exif信息, 具体代码可见项目工程中的exifModule.py

  • 本脚本中提取了最关键的经度与纬度信息,还有拍照日期可供调用

d. 获取具体位置——geoModule.py

  • 具体代码可见项目工程中的geoModule.py

    • 步骤:把获得的经纬度信息去请求开放的地图api,获取具体地址.这个方法的名称为:逆地址编码

    • 横向比较了: 百度,腾讯,高德地图,发现高德给出的个人免费调用量有 3W/日,其他两家只有几k。最终选用了高德的api

  • 高德api获取地址步骤(非常简单):

    序号 高德流程 备注
    1 注册 需要支付宝扫码实名
    2 新建应用 按默认点确定即可
    3 复制那个应用的key进行调用 调用代码见geoModule.py,请使用自己的gaode_key测试
  • 详细图文描述可见:https://zhuanlan.zhihu.com/p/371682461

D. 上手及部署指南

D.1 配置要求

图像部分,因为用了PaddleSeg需要一台6G显存以上的主机,4G显存的没测试过,可以尝试调小 ImgGeneratorModule 中的 inputSize, 在DL处理前先缩小图片。

D.2 部署方案

建议选择方案一

  • 方案一:一台显存6G,内存16G电脑(部署整个项目)

  • 方案二:一台普通云端服务器(1核2G之类的)+ 一台有外网IP的显存6G,内存16G电脑(部署图像部分:ImgGenerateModule)

  • 方案三:一台有GPU的云端服务器

D.3 模型下载

需下载以下模型:

D.4 部署过程

  1. 申请Wechaty Token Powered by Wechaty Wechaty in Python

    具体请访问Wechaty官网: https://wechaty.js.org/

  2. 快速上手

    请参考@Lovely-Pig的文章: 教你用AI Studio+Wechaty+阿里云白嫖一个智能微信机器人

  3. 云服务器

  4. 云数据库

    • 本项目用到了阿里云的云数据库RDS MySQL版,链接: 云数据库RDS MySQL版

    • 购买实例后登录控制台,创建一个数据库,名为super-interstellar-terminal

    • 创建一个普通账号,授权数据库填写super-interstellar-terminal,权限为读写(DDL+DML),记住用户名密码

    • 在左侧数据库连接处找到外网地址,小本本记下来

    • 设置白名单,将云服务器实例的公网IP加入白名单

    • 有任何不明白的请访问: 云数据库RDS官方文档

  5. 云存储

    • 本项目用到了阿里云的对象存储OSS,链接: 对象存储OSS

    • 开通后登录控制台,创建一个Bucket,名为super-interstellar-terminal

    • 登录RAM控制台,创建一个用户,访问方式选择编程访问,记住AccessKey IDAccessKey Secret

    • 有任何不明白的请访问: 云存储OSS官方文档

  6. 开启数据库server

    # 以任何一种你喜欢❤的方式远程登陆到阿里云的云服务器
    
    # 克隆本代码仓库
    $ cd ~/
    $ git clone https://github.com/kevinfu1717/SuperInterstellarTerminal.git
    
    # 安装MySQL客户端
    $ sudo apt install mysql-client-core-8.0
    
    # 开启数据库server
    $ cd ~/SuperInterstellarTerminal/bot/
    $ python3 -m pip install -r requirements.txt
    $ nohup python3 server/database.py >/dev/null 2>&1 &
  7. 开启图像处理server

    # 远程登陆到一台很牛逼的服务器(不是阿里云的云服务器)
    
    # 克隆本代码仓库
    $ cd ~/
    $ git clone https://github.com/kevinfu1717/SuperInterstellarTerminal.git
    
    # 开启图像处理server
    $ cd ~/SuperInterstellarTerminal/
    $ python3 -m pip install -r requirements.txt
    $ nohup python3 app.py >/dev/null 2>&1 &
    
  8. 设置环境变量

    OSS_ENDPOINT的设置可参考: 访问域名(Endpoint)

    $ export WECHATY_PUPPET="wechaty-puppet-service"
    $ export WECHATY_PUPPET_SERVICE_TOKEN="<your wechaty token>"    # wechaty的token
    $ export DB_USER="<your database user name>"    # 云数据库账号的用户名
    $ export DB_PASSWORD="<your database password>"    # 云数据库账号的密码
    $ export DB_DATABASE="<your database name>"    # 云数据库的数据库名,填写为super-interstellar-terminal
    $ export DB_SERVER_HOST="<your database server host>"    # 开启数据库server的服务器地址,一般是云服务器的公网IP
    $ export ACCESS_KEY_ID="<your AccessKey ID>"    # RAM用户的AccessKey ID
    $ export ACCESS_KEY_SECRET="<your AccessKey Secret>"    # RAM用户的AccessKey Secret
    $ export OSS_BUCKET_NAME="<your oss bucket name>"    # 云存储的Bucket,填写为super-interstellar-terminal
    $ export OSS_ENDPOINT="<your oss endpoint>"    # 云存储的访问域名
    $ export IMG_SERVER_HOST="<your img server host>"    # 开启图像处理server的服务器地址
    $ export DEVELOPERS="<your developer cipher>"    # 给予开发者特权的暗号
  9. 运行bot

    $ cd ~/super-interstellar-terminal/bot/
    $ python3 -m pip install -r requirements.txt
    $ nohup python3 bot.py &

E. 总结

E.1 展望

a. 让心在宇宙漂流

此项目结合了轻社交的星际漂流瓶,让大家可以抒发一下想对着太空说的话。也可以惊喜地看到别人写的漂流瓶。

b. 来个更逼真的LBS+AR游戏

后续希望可以从用户拍的图片获取到地点或经纬度,或者用户发送定位来,从而实现更准确的LBS定位。叠加上AI图像能力,说不定能比PokemonGo更棒噢!

起码普通伊布是不应该在水面出现的噢 @任天堂

yibu.jpg

看到这个项目,要不要也一起合作来把AI融到游戏里啊 @任天堂 (JUST JOKING. DON'T TAKE IT SERIOUSELY.)

c. 来更多脑洞一起创作玩法与剧本吧!

希望更多有兴趣的脑洞,一起想想我们可以怎么玩,让我们玩得更high一点吧!

E.2 期盼

希望更多小伙伴能贡献一下自己的脑洞,基于此项目,觉得还可以优化的游戏方式或游戏剧本。希望留言或评论。感谢!

希望小伙伴们觉得此项目不错的点个赞(Star)和Fork。能从头看到这里的很不容易了。非常感谢!!

E.3 Reference/参考内容

E.4 致谢

  • 感谢比赛的相关人员
  • 感谢百度爸爸的算力及技术支持
  • 感谢Wechaty与Mixlabs
  • 感谢Reference中列到的所有作者
  • 感谢其中用到的所有开源项目的作者及维护者
  • 感谢Teammate@Lovely-Pig,感谢过程中所有提供鼓励与帮助的百度人员
  • 致敬为拓展人类的宇宙梦而奋斗的所有技术工作者 Respect!!!

superinterstellarterminal's People

Contributors

kevinfu1717 avatar lovely-pig avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

superinterstellarterminal's Issues

部署请教

老哥可否加个微信bai7426,想请教下世纪终端的问题

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.