好记性,不如 烂笔头,不如趁热记录下,给未来的自己。

前言

书接上文《千古绝句的意境,用AI来传承 | 经过 AIGC 作画,生成古诗名词的场景》,咱们看到了AIGC作图和中华文化瑰宝古诗词结合所爆发出来的构思。其实环绕这个点,有许多有意思的点可以拓宽:

  • 比方举办 AIGC 古诗作画大赛,让我们自己去发明那些千古名句的横空出世时的场景,投票选出自己心目中最合意境的图片;
  • 比方搜集那些高票当选的图片,写一个游戏,让我们依据图片来答题猜测最符合图片意境的古诗词

等等,什么?依据图片猜古诗词?好像挺不错的:工作多年的打工人,即将中/高考的学生,教书育人的教师,为孩子学习操碎了心的家长,都可以在这个游戏里找到自己~

灵光乍现,说干就干

计划敲定

首先对这个游戏定了几个特性:

  1. 不用装置,不用注册,不用登录;
  2. PC/移动端,随时随地,有网就能玩;
  3. 有交际特点,便于共享;
  4. 快速完成,快速上线;

依据以上特性,技能选型的范围就很简略收窄了,

  1. 传统的 native 移动端APP开发:需求装置,只能移动端使用,iOS/Andorid 版别别离开发,工作量大,需求批阅,无法快速完成,快速上线;
  2. H5开发:尽管不需求装置,也支持PC和移动端拜访,可是前后端分离,需求别离写前/后端,需求硬件资源和网络资源布置,工作量大,无法快速完成,快速上线;
  3. 微信小程序:交际特点强,简略裂变,可是需求各种批阅,无法快速上线;

常见的计划,都或多或少有不满足的当地,那怎样办呢?这儿,其实可以用 Gradio 结构,用 python 语言来完成前后端一体的APP,快速开发,然后布置在可以保管 Gradio 使用的平台上。

Gradio 使用保管平台国内外还挺多的,比方国外最有名的是 huggingface (俨然是AI大模型年代的Github了),可是因为某些原因,在国内拜访hf的体会并不是特别棒。。。国内也有相似的,这儿我用的是 OpenXLab-使用中心,界面很清新。

规划界面

脑子里有主意,可是具体编码的时候,怎样布局,怎样交互,其实都比较含糊。所以需求用东西去捋一捋思路。这儿推荐给我们一个在线画图东西 Excalidraw(为啥选这个?简略好用,出图漂亮,不中规中矩,平时也都用这个画架构图)。

编码完成

技能选型:根据 python3.10 + gradio4.12 + redis。用 python 调用 gradio sdk,用 gradio 完成页面布局和事务逻辑完成,物料存放在 redis 里。存储方面,也考虑过其他组件,如mysql,sqlite等,可是考虑到快速完成的本钱和物料更新的便捷性,这儿还是用了 redis + hash存储。

那么接下来便是学习 Gradio 怎样开发,借助其文档,一步步完成产品司理(自己)提的需求(有一说一,为什么官方文档这么难读,知道的知识点写得很具体,想看的技能细节一笔带过orz…)。

def add_student_info():
    #do biz 
with gr.Blocks() as iface:
    # layout
    gr.HTML("description here")
    with gr.Tab("挑战者报名"):
        with gr.Row():
            ...
        start_kaoshi_button = gr.Button("报名!")
    with gr.Tab("开端挑战"):
        with gr.Row():
            ...
    with gr.Tab("全国排名-TOP100") as global_rank_tab:
        ...
    ```
    start_kaoshi_button.click(
        fn=add_student_info,
        inputs=[obj1],
        outputs=[obj2]
    )

以上是结构代码。如果本文的阅读数超越 10k 或许点赞数超越 100,我将在评论区供给源代码地址:》

最终呈现

欢迎在线体会

被创意突然袭击,所以我连夜做了一个游戏  -《完蛋!我被高考古诗词拿捏了》

被创意突然袭击,所以我连夜做了一个游戏  -《完蛋!我被高考古诗词拿捏了》

心得

写这篇文章的同时,脑海里也同时在复盘这个项目,有几个心得,与我们共享

技能方面

  1. Gradio 这个结构的使用场景不会被限制在 AI 范畴,在其他工程范畴也有很大的使用空间;
  2. Gradio 结构的核心思想 = 函数 + 输入 + 输出(我的浅陋了解。。)
  3. 复杂的 Gradio 页面开发,用高度封装的 Interface 组件完成会比较困难,这儿需求用到更底层的 Block 组件,可以更加灵活的拼装页面。

非技能方面

  1. 找0:一个好的主意=成功了一半=决议了这件事的上限(纵观国内,执行力强的举目皆是,创作立异的寥寥无几)
  2. 快速0到1:有主意就立刻行动,快速rush一个mvp版别出来,降低试错周期(不做思想上巨人,要做行动上的强者)
  3. 持续1到100:快速出的东西,一定有为了速度而妥协的当地(比方代码鲁棒性,比方功能完整性),所以需求再去精雕细琢完善一下,才干更挨近上限。

以上。