请分析图片中的所有独立文字元素，并严格按照下面的 JSON 规范返回结果。

重要要求：

1. 最终回复只能是合法 JSON。
2. 不要使用 Markdown 代码块。
3. 不要添加解释、标题、注释或分析过程。
4. 顶层必须是 JSON 数组。
5. 每个文字元素必须单独作为一个对象。
5a. 严禁按“同类型”“同字体”“同字号”“同颜色”“同 group”或同一文字区域合并文字图层；这些属性相同也不能合并。
5b. 图像中上下排列的每一排可编辑文字都必须是独立对象，分别返回独立的 text、position_px 和 bounds_px。
6. 中文文字直接输出中文；英文文字直接输出英文；其他语言保持原语言。
7. 无法确认的值必须使用 null，禁止猜测。
8. 坐标原点为图片左上角。
9. 所有坐标和尺寸单位均为 px。
10. 字号必须是数字，单位为 px。
11. 颜色必须使用 RGB 整数格式，范围为 0 到 255。
12. direction 只能使用：
    - "horizontal"
    - "vertical"
13. text_type 只能使用：
    - "point"
    - "paragraph"
    - "path"
14. align 只能使用：
    - "left"
    - "center"
    - "right"
    - "justify"
15. rotation_deg 必须是数字，单位为角度。
16. 不要把“大号”“小号”“顶部偏左”等文字描述作为结果。
17. 如果只能估计，请返回最接近的数值；如果无法合理估计，则返回 null。
18. 字体必须返回 Photoshop 可尝试使用的具体字体名称；如果无法确认，font_name 返回 null，并填写 font_fallback。
19. 不要把字体风格描述，例如“黑体”“宋体风格”“书法体”，直接当作确定字体名称。
19a. 必须先判断每个文字元素的视觉字体类别，再选择最接近的具体字体；标题、品牌字或书法字不得默认使用 PingFang SC。
19b. 中文书法/手写/粗笔刷字体优先从这些相似字体名称中选择一个：汉仪粗书体、汉仪尚巍手书、方正行楷、华文行楷、STKaiti、DFKai-SB；中文宋体优先使用思源宋体、SimSun、STSong；中文黑体优先使用思源黑体、SimHei、Microsoft YaHei。
19c. 只有在视觉上确实接近时才重复同一个 font_fallback；标题书法字与正文黑体、宋体必须区分。font_name 填写视觉上最接近的字体，font_fallback 填写 Photoshop 中较可能可用的近似字体。
20. 如果文字沿圆弧排列，direction 仍填写 horizontal 或 vertical，同时 layout 填写 "arc"，并返回圆弧参数。
21. 如果文字存在多种字体、颜色或字号，必须拆分成多个对象；不要使用 character_styles 将视觉上分开的文字合并到一个对象。
22. 不要遗漏图片中的任何可识别文字。
23. position_px 和 bounds_px 必须基于整张输入图片，而不是基于文字区域、局部裁剪区、正方形参考框或模型内部缩略图。
24. 逐个文字元素独立判断其在原图中的实际位置；不要因为多个文字属于同一 group 就把它们排列到同一矩形区域。
25. 特别检查画布中部、右侧和底部的文字。即使这些区域留白较多，也必须按它们在整张海报中的真实像素位置返回，不能将中部文字吸附到顶部。
26. 返回前用 image_width_px 和 image_height_px 自检：每个文字的 bounds_px 必须落在完整画布范围内，并且所有文字的整体分布应覆盖它们在原图中实际出现的区域。
27. 必须按视觉上的每一排文字分别创建独立对象。上下两排必须返回两个对象，上下三排必须返回三个对象，绝对不能把多排文字合并成一个对象。
28. 每个对象的 text 字段只能包含一排文字，禁止包含 "\n"、"\r" 或把多排内容拼接在一起。即使这些文字位于同一个视觉区域、属于同一 group，也必须逐排拆分。
29. 每一排都必须单独返回自己的 position_px 和 bounds_px；bounds_px.height 只覆盖该排，不得覆盖相邻文字行。按从上到下的视觉顺序返回。
30. 英文标题、说明文字和品牌文字也必须逐行识别；例如原图显示 "RADIANT" 与 "CONFIDENCE" 两行时，必须返回两个独立文字对象，而不是返回 "RADIANT\nCONFIDENCE"。
31. 只有视觉上确实不可分割的单行文字才能返回为一个对象；text_type 对单排文字优先填写 "point"，不要因为文字位于同一矩形区域就填写多行 paragraph。

图片实际尺寸为：

{
  "image_width_px": 图片宽度,
  "image_height_px": 图片高度
}

每个元素必须严格使用以下字段：

{
  "id": "text_001",
  "text": "文字内容",
  "language": "zh",
  "font_name": "具体字体名称或 null",
  "font_fallback": "替代字体名称或 null",
  "font_style": "Regular、Bold、Italic 或 null",
  "font_size_px": 48,
  "color_rgb": {
    "r": 0,
    "g": 0,
    "b": 0
  },
  "position_px": {
    "x": 100,
    "y": 200
  },
  "bounds_px": {
    "left": 100,
    "top": 160,
    "width": 500,
    "height": 70
  },
  "direction": "horizontal",
  "text_type": "point",
  "align": "left",
  "rotation_deg": 0,
  "layout": "normal",
  "group": "主标题",
  "character_styles": null
}

字段规则：

- id：从 text_001 开始递增。
- text：识别出的原始文字。
- language：使用 "zh"、"en" 或 "other"。
- font_name：推测的具体字体名称，不确定时为 null。
- font_fallback：用于 Photoshop 实际尝试应用的建议字体名称；应根据该文字的视觉类别选择近似字体，不要为了省事把所有文字都填写为 PingFang SC。
- font_style：只能填写 "Regular"、"Normal"、"Bold"、"SemiBold"、"Medium"、"Light"、"Black"、"Italic" 或 "BoldItalic"，无法判断时为 null。
- font_size_px：数字或 null。
- color_rgb：r、g、b 必须是 0 到 255 的整数；无法判断时整个字段为 null。
- position_px：文字左上角坐标。
- bounds_px：文字区域的外接矩形。
- direction：只能填写 "horizontal" 或 "vertical"。
- text_type：
  - "point"：点文字
  - "paragraph"：段落文字
  - "path"：路径或曲线文字
- align：文字对齐方式。
- rotation_deg：文字整体旋转角度。
- layout：
  - "normal"：普通排版
  - "arc"：圆弧排版
  - "自由排版"：不规则排版
- group：所属视觉区域，例如“主标题”“副标题”“印章”“右侧卖点”。
- character_styles：如果整句使用统一样式，返回 null；如果句中存在不同样式，返回数组：

图层命名依据：程序会将文字截断为中文最多 4 个字、其他语言最多 8 个字符，再拼接建议字体和 font_style；因此 font_fallback 不要填写描述性句子，不要填写“未知字体”，只填写字体名称。

[
  {
    "start": 0,
    "end": 3,
    "font_name": "具体字体名称或 null",
    "font_size_px": 48,
    "color_rgb": {
      "r": 0,
      "g": 0,
      "b": 0
    }
  }
]

如果 layout 为 "arc"，额外增加：

{
  "arc": {
    "center_x": 0,
    "center_y": 0,
    "radius_px": 0,
    "start_angle_deg": 0,
    "end_angle_deg": 180
  }
}

现在只返回 JSON 数组。
