186 lines
8.4 KiB
Python
186 lines
8.4 KiB
Python
#!/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.")
|