ai_member_xiaoyan/scripts/update_image_descriptions.py

186 lines
8.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
"""Update 图片描述 field for reading_pic_qa records."""
import json, requests, time
CRED_FILE = "/root/.openclaw/credentials/xiaoyan/config.json"
APP_TOKEN = "CMHSbUUjka3TrUsaxxEc297ongf"
TABLE_ID = "tblweY65jGBiwSdt"
IMAGE_DESCRIPTIONS = {
"recvjhhtWLApoW": """1.
风格: 卡通,简单线条
场景:儿童卧室早晨,阳光从窗户照进来
穿睡衣的小男孩 - 站在窗前往外看,窗外有树和小鸟
同一个穿睡衣的小男孩 - 跪在床前地板上,从床底下伸手找到一只红色皮球,脸上表情惊喜
同一个男孩 - 从地板上弯腰捡起一只蓝白条纹袜子
穿好外出衣服的小男孩 - 坐在床边正穿一只蓝色运动鞋,另一只已穿好
背书包的小男孩 - 在房间门口停下脚步回头看向房间,面带微笑。
2.
风格: 卡通,简单线条
场景:户外游乐场攀爬区,有彩色攀爬架、滑梯、秋千
戴蓝色头盔的小男孩 - 双手系紧头盔下巴带子,站在攀爬架旁
扎马尾穿粉色运动服的女孩 - 在攀爬架高处双手解开安全绳
攀爬架旁立着黄色安全警示牌(感叹号标志),地面铺彩色防护软垫
穿红色外套的女教练 - 蹲在攀爬架旁指导男孩攀爬
戴海盗帽和黑色眼罩的男孩 - 举着玩具剑站在攀爬架平台,做夸张海盗表情。""",
"recvjhhurtvJRc": """1.
风格: 卡通,简单线条
场景:温馨餐厅内,靠窗的餐桌,阳光明媚
桌上白色盘子里 - 放着一块金黄烤鸡肉
扎双马尾的小女孩 - 坐在餐桌旁,双手捧着一本打开的菜单在看
戴白色高厨师帽的厨师 - 在开放式厨房灶台前翻动平底锅里的牛排,穿着白色围裙
同一张餐桌上 - 另一个盘子里放着一块煎好的牛排,旁边配蔬菜
戴白色高厨师帽的厨师 - 头戴白色厨师帽,面带微笑。
2.
风格: 卡通,简单线条
场景:菜市场蔬菜摊位,木制摊位上摆满各种蔬菜
白色洋葱 - 放在摊位左侧的木篮里
黄色咖喱 - 盛在摊位前的小碗里,旁边有标签
棕白色蘑菇 - 整齐摆放在摊位的竹篮中
白色大蒜 - 串成一串挂在摊位上方
红色辣椒 - 堆放在摊位右侧的红色小筐里。""",
"recvjhhv24p2Pu": """1.
风格: 卡通,简单线条
场景:儿童游戏室,地板上铺着彩色地毯,墙上有时钟和画
银灰色卡通机器人 - 站在房间中央,有大大的方脑袋,两只圆圆的眼睛,两条手臂,两条腿
同一机器人 - 脑袋特别大,占据了身体三分之一的高度
同一机器人 - 两条银色金属腿,每条腿有三个关节
同一机器人 - 两条手臂可以弯曲,末端是钳子状抓手
同一机器人 - 身体是银灰色的长方体,胸前有闪烁的小灯。
2.
风格: 卡通,简单线条
场景:教室布告栏,绿色布告板挂在墙上,旁边有老师的讲台和学生的课桌
墙上布告栏 - 贴着一篇手写的故事,标题彩色大字
布告栏上 - 贴着一张彩色大海报,上面画着动物图案
教师讲台上 - 放着一份装订好的报告,封面写着"Report"
墙上布告栏下方 - 贴着一张打印的校园新闻,标题可见"School News"
布告栏中央 - 贴着一张彩色图画,画的是太阳花。""",
"recvjhhvB36ro1": """1.
风格: 卡通,简单线条
场景:动物园/野生动物园,有草地、树木、水池
一头雄狮 - 金色鬃毛浓密蓬松,站在草地上
同一头狮子 - 站在草地中央,周围有其他小动物
一棵大树 - 树洞里探出一只棕熊的头和爪子
黄色和黑色的蝴蝶 - 停在花丛中的一朵红花上
蓝色水池里 - 一条橙色金鱼在游动,水面有波纹。
2.
风格: 卡通,简单线条
场景:自然风景区,有游泳池、湖泊、草地、远处森林
蓝色游泳池 - 池水清澈蔚蓝,池边有躺椅和遮阳伞
天空晴朗 - 几朵白云,大太阳,空中没有乌云和闪电
湖泊 - 在游泳池后方,湖面宽阔,远处有小船
大片绿色草地 - 从游泳池边延伸到湖边,草地上有几朵小野花
远景 - 大片深绿色森林,树木茂密成片。""",
"recvjhhwbepReL": """1.
风格: 卡通,简单线条
场景:美术教室,桌上和墙上展示着各种色彩鲜艳的物品
桌上放着一顶紫色帽子 - 帽子上有彩色波点装饰
桌上花瓶里 - 插着一朵粉色大花,花瓣层层叠叠
墙上贴着一幅画 - 画面色彩非常丰富,有红黄蓝绿紫多种颜色
桌边放着几把勺子 - 其中一把是木色/米色的,旁边是彩色笔筒
桌子中央 - 放着一个装饰特别的生日蛋糕,插着蜡烛,蛋糕上有彩色糖粒。
2.
风格: 卡通,简单线条
场景:果汁店/厨房操作台,桌上摆满各种水果
桌上 - 放着一个黄色柠檬,旁边有切开的半个柠檬
黄色芒果 - 放在水果篮里,表皮光滑
紫色葡萄 - 一串放在白色盘子里
同一个柠檬 - 旁边贴着""的标签/符号
玻璃杯里 - 装着紫色葡萄汁,不是橙色橙汁,旁边有榨汁机。""",
"recvjhhwIKni7F": """1.
风格: 卡通,简单线条
场景:公司办公室前台区域,玻璃大门,接待台
墙上挂着公司名称牌 - 上面印着公司logo和名称
办公桌上 - 放着一张访客登记卡片
女性前台接待员 - 坐在接待台后,穿着职业装,戴着耳麦,微笑面对访客
小小的单间办公室 - 里面有一张办公桌和电脑,门半开
办公室里的会议室 - 椭圆长桌周围坐满了人,有人在白板前讲解。
2.
风格: 卡通,简单线条
场景:现代家庭/公寓内部,多个房间
干净整洁的卫生间 - 白色瓷砖墙面,洗手台和镜子
墙上 - 靠着一个大书柜,上面整齐排列着各种颜色的书
白色马桶 - 在卫生间角落里,旁边有卫生纸架
书桌上 - 放着一盏亮着的台灯,灯光照在桌面上
书桌上 - 放着一台打开的笔记本电脑,屏幕亮着,鼠标在旁,不是在床上。""",
"recvjhhxe6QPYd": """1.
风格: 卡通,简单线条
场景:考古挖掘现场/自然博物馆,沙土地面,有围栏
一块大石头 - 埋在沙土里半露在外面,上面有纹理
巨大的恐龙骨架化石 - 立在场地中央,骨骼巨大清晰可见
蔚蓝的天空 - 有几朵白云,阳光明媚,不是阴天灰色
一块巨大的岩石 - 竖立在挖掘坑旁边,比人还高
沙土地面 - 到处是石头和化石碎片,没有鲜花和绿色植物。
2.
风格: 卡通,简单线条
场景:科学实验室/探险研究基地,墙上贴满图表
实验桌上 - 放着扳手、螺丝刀等工具
穿白色实验服的科学家 - 戴着护目镜,站在实验台前做实验
透明玻璃罐里 - 浸泡着一个大脑模型,放在架子上
墙上贴着潜水海报 - 海报里有人在海里潜水,实验室里的男孩指着海报看,男孩本人不在海里
实验室内 - 地上放着探险设备(背包、绳索、指南针等),没有电视,实验室门上有"Adventure Lab"标志。""",
}
with open(CRED_FILE) as f:
cred = json.load(f)
app_id = cred["apps"][0]["appId"]
app_secret = cred["apps"][0]["appSecret"]
token_resp = requests.post(
"https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal",
json={"app_id": app_id, "app_secret": app_secret},
)
token = token_resp.json()["tenant_access_token"]
results = {}
for record_id, desc in IMAGE_DESCRIPTIONS.items():
print(f"Updating {record_id}...")
resp = requests.put(
f"https://open.feishu.cn/open-apis/bitable/v1/apps/{APP_TOKEN}/tables/{TABLE_ID}/records/{record_id}",
headers={"Authorization": f"Bearer {token}", "Content-Type": "application/json"},
json={"fields": {"图片描述": desc}},
)
code = resp.json().get("code")
print(f" code={code}")
results[record_id] = code
time.sleep(0.5)
# Verify
print("\n=== Verification ===")
for record_id in IMAGE_DESCRIPTIONS:
resp = requests.get(
f"https://open.feishu.cn/open-apis/bitable/v1/apps/{APP_TOKEN}/tables/{TABLE_ID}/records/{record_id}",
headers={"Authorization": f"Bearer {token}"},
)
img_desc = resp.json()["data"]["record"]["fields"].get("图片描述", "")
print(f" {record_id}: 图片描述={len(img_desc)} chars {'' if len(img_desc) > 100 else '❌ EMPTY'}")
print("\nDone.")