Skip to content

Latest commit

 

History

History
355 lines (278 loc) · 9.16 KB

File metadata and controls

355 lines (278 loc) · 9.16 KB
Error in user YAML: (<unknown>): found a tab character that violate indentation while scanning a plain scalar at line 3 column 3
---
- oeasy Python 0135
- 这是 oeasy 系统化 Python 教程,从基础一步步讲,扎实、完整、不跳步。愿意花时间学,就能真正学会。
- 本教程同步发布在: 
	- 个人网站: `https://oeasy.org` 
	- 蓝桥云课: `https://www.lanqiao.cn/courses/3584` 
	- GitHub: `https://github.com/overmind1980/oeasy-python-tutorial` 
	- Gitee: `https://gitee.com/overmind1980/oeasypython` 
---

实验标题

回忆

  • 上次学习了字典
  • 字典是用来查的
    • 根据一个 key
    • 可以查到相应的 value
  • 字典项就是 key-value 键值对
  • 字典的本质就是键值对的集合
    • set of key-value pair
  • 字典可以有什么应用场景吗?🤔

图片描述

制作文生图关键词

我要做这样一个程序,这个程序有3个列表,第一个列表是西游记中的人物列表,然后第二个列表呢是西游记中的场景列表,第三个列表呢是这个场景中这个人物的动作或者表情,比如说坐在椅子上,或者站在在石头上之类的东西。那么这三个列表呢?每个里面随机产生1个列表项,然后把它们组成一句话,最后还有个列表是镜头景景别的列表,然后把这四个加在一起生成一个文生图的提示词。

图片描述

分析代码

import random

# 西游记人物列表
characters = ["孙悟空", "唐僧", "猪八戒", "沙僧", "观音菩萨", "玉皇大帝", "白骨精", "牛魔王"]
# 西游记场景列表
scenes = ["花果山", "五行山下", "高老庄", "流沙河", "盘丝洞", "火焰山", "女儿国", "雷音寺"]
# 动作或表情列表
actions = ["挥舞手中武器", "双手合十诵经", "大口吃馒头", "挑着行李", "面露慈悲", "正襟危坐", "露出狡黠的笑容", "怒气冲冲"]
# 镜头景别列表
shot_types = [
    "特写镜头(portrait(脸 + 肩 + 偶尔再加胸))",
    "全景(panorama)",
    "风景镜头(远景)(landscape)",
    "全景镜头(广角镜头)(wide_shot)",
    "中景镜头(medium_shot)",
    "中景镜头(mid_shot)",
    "全身像(full_shot)",
    "半身像(bust)",
    "上半身(upper_body)",
    "下半身(lower_body)",
    "上半身+上半大腿(牛仔镜头)(cowboy_shot)",
    "侧面肖像画(portrait的侧脸)(profile)"
]

character = random.choice(characters)
scene = random.choice(scenes)
action = random.choice(actions)
shot_type = random.choice(shot_types)
# 生成提示语
prompt = f"{shot_type},{character}在{scene} {action}"

# 生成并打印提示语
print(prompt)
  • 结果

图片描述

  • 可以做个 更实用的 文生图关键词 工具 吗?

文生图

忘掉之前的上下文,我要制作一个文生图的提示词生成器:生成器里有若干选项,人物背景、景别、光线顺逆、镜头俯仰、绘画风格。
把这些若干关键词通过键盘输入到终端中,选择选项得到最终提示词.
我需要命令行的python文件。

图片描述

  • 目前这个是纯纯的手工输入
    • 想要 可以有些选项

选项

图片描述

# 人物选项
person_options = {
    1: "年轻男性",
    2: "年轻女性",
    3: "儿童",
    4: "老人"
}

# 背景选项
background_options = {
    1: "森林",
    2: "城市街道",
    3: "海边",
    4: "古老城堡"
}

# 景别选项
shot_type_options = {
    1: "特写",
    2: "近景",
    3: "中景",
    4: "全景",
    5: "远景"
}

# 光线选项
light_direction_options = {
    1: "顺光",
    2: "逆光",
    3: "侧光"
}

# 镜头角度选项
camera_angle_options = {
    1: "俯视",
    2: "仰视",
    3: "平视"
}

def choose_option(options, title):
    """封装选择函数,解决编码报错,简化代码"""
    print(f"\n请选择{title}:")
    for key, value in options.items():
        print(f"{key}. {value}")
    
    # 兼容实验楼环境编码问题,捕获异常
    try:
        choice = input("输入数字选择,或输入具体描述: ")
    except UnicodeDecodeError:
        choice = input("请重新输入(纯英文/数字也可): ")
    
    if choice.isdigit():
        num = int(choice)
        return options.get(num, choice)
    return choice

# 开始选择
person = choose_option(person_options, "人物")
background = choose_option(background_options, "背景")
shot_type = choose_option(shot_type_options, "景别")
light_direction = choose_option(light_direction_options, "光线顺逆情况")
camera_angle = choose_option(camera_angle_options, "镜头俯仰角度")

# 获取绘画风格
try:
    art_style = input("\n请输入绘画风格(例如:写实、卡通、油画风等):")
except UnicodeDecodeError:
    art_style = input("请重新输入风格: ")

# 生成最终提示词
prompt = f"{person},背景为{background},采用{shot_type}景别,{light_direction},{camera_angle}视角,{art_style}绘画风格。"

# 输出
print("\n✅ 生成的提示词为:")
print(prompt)
  • 选项 需要 增加一项
    • 不填写

修改

图片描述

# 人物选项
person_options = {
    1: "年轻男性",
    2: "年轻女性",
    3: "儿童",
    4: "老人",
    5: "不填"
}

# 背景选项
background_options = {
    1: "森林",
    2: "城市街道",
    3: "海边",
    4: "古老城堡",
    5: "不填"
}

# 景别选项
shot_type_options = {
    1: "特写",
    2: "近景",
    3: "中景",
    4: "全景",
    5: "远景",
    6: "不填"
}

# 光线选项
light_direction_options = {
    1: "顺光",
    2: "逆光",
    3: "侧光",
    4: "不填"
}

# 镜头角度选项
camera_angle_options = {
    1: "俯视",
    2: "仰视",
    3: "平视",
    4: "不填"
}

def choose_option(options, title):
    """封装选择函数,解决编码报错,简化代码"""
    print(f"\n请选择{title}:")
    for key, value in options.items():
        print(f"{key}. {value}")
    
    # 兼容实验楼环境编码问题,捕获异常
    try:
        choice = input("输入数字选择,或输入具体描述: ")
    except UnicodeDecodeError:
        choice = input("请重新输入(纯英文/数字也可): ")
    
    if choice.isdigit():
        num = int(choice)
        return options.get(num, choice)
    return choice

# 开始选择
person = choose_option(person_options, "人物")
background = choose_option(background_options, "背景")
shot_type = choose_option(shot_type_options, "景别")
light_direction = choose_option(light_direction_options, "光线顺逆情况")
camera_angle = choose_option(camera_angle_options, "镜头俯仰角度")

# 获取绘画风格
try:
    art_style = input("\n请输入绘画风格(例如:写实、卡通、油画风等):")
except UnicodeDecodeError:
    art_style = input("请重新输入风格: ")

# ====================== 核心修改:自动过滤「不填」项 ======================
parts = []

if person != "不填":
    parts.append(person)
if background != "不填":
    parts.append(f"背景为{background}")
if shot_type != "不填":
    parts.append(f"采用{shot_type}景别")
if light_direction != "不填":
    parts.append(light_direction)
if camera_angle != "不填":
    parts.append(f"{camera_angle}视角")
if art_style.strip():
    parts.append(f"{art_style}绘画风格")

# 拼接最终提示词
prompt = ",".join(parts) + "。"
# ========================================================================

# 输出
print("\n✅ 生成的提示词为:")
print(prompt)

用名词描述概念

寸头男
  • 用名词 描述 一个特征

图片描述

  • 理发之前 可以先问问理发师
    • 对于 寸头的理解

寸头的分类

图片描述

  • 还可以深入细节

###细节

  • 毛寸 和 圆寸

图片描述

精确到卡尺

  • 可以用量化的方式更精确

图片描述

  • 当然可以更加细腻地描述 发型
    • 概念存在于 共识之中

概念之间的缝隙

  • 发型 提示词
    1. 下面 6mm卡尺的 圆寸
    2. 上面 稍微打薄 一点
    3. 但不是 毛寸
  • 不容易被人揪到头发

图片描述

  • 可以从图片出发
    • 反推提示词

实际上的文生图

  • 要求ai根据图片
    • 生成 结构化的提示词
    • 写到 json格式中
请帮我写出这个图片的文生图提示词,要求是结构化的提示词。放到json文件中。

图片描述

  • 这个json的本质 是一个字典
    • 结构化的 提示词
    • 能更好滴 被ai理解

总结

  • 这次了解了 文生图 提示词 程序
    • 通过编号 获得相应的 提示词
    • 再将 提示词 组合起来

图片描述

  • 字典 和 列表 有什么关系吗?🤔
  • 下次再说 👋

  • 本文来自 oeasy Python 系统教程。
  • 想完整、扎实学 Python,
  • 搜索 oeasy 即可。