返回 Skill 列表
extension
分类: 数据与分析无需 API Key

俄罗斯 SVO 价格

俄罗斯航线图片价格提取规则。从 JPG/PNG 图片中 OCR 提取 SVO1/SVO2/SVO/LED/SVX/AMS 等目的港空运价格,支持 CA/CZ/HU/MU/SU/JD/U6 等航司,输出 24 列标准 Excel。

person作者: user_17da570ahubcommunity

俄罗斯航线图片价格提取 Skill

从价格表图片(JPG/PNG)中提取俄罗斯及部分欧洲航线空运价格,输出 24 列标准 Excel。

⚠️ 铁律:仅提取用户最新提交文件,禁止复制历史数据

  • 禁止查看/引用/复制任何历史脚本中的 price/data 数组
  • 禁止从历史输出文件直接读取数据
  • 禁止硬编码历史文件路径作为源文件
  • 每次提取必须从用户当前提交文件全新读取
  • 有就是有,没有就是没有:不得用历史数据填补缺失值

⚠️ 跨平台 OCR 铁律

必须使用 ~/.workbuddy/skills/ocr_utils.py 统一 OCR 模块,禁止内联 from rapidocr_onnxruntime import RapidOCR

一、核心参数

| 参数 | 值 | |------|-----| | 起始港 | 动态(PEK/PVG/CAN/SZX/TAO,按图片内容识别) | | 目的港 | SVO/LED/SVX/AMS(按图片内容识别) | | 价格编号 | russia_img_{批次日期}_001(如 russia_img_0713_001) | | 来源 | IMG | | 引擎 | OCR(ocr_utils.scan_image) | | 输入格式 | JPG/PNG 图片 |

二、港口映射规则

| 图片原始文本 | 输出港口代码 | 说明 | |-------------|-------------|------| | 北京 / PKX / 大兴 | PEK | 北京统一输出 PEK,覆盖 PKX | | 上海(未声明港口) | PVG | 默认浦东 | | 广州(未声明港口) | CAN | 默认白云 | | 青岛 / TAO | TAO | | | 深圳 / SZX | SZX | | | 莫斯科 SVO1(OCR: SV01) | SVO1 | SVO1/SVO2 是两个不同港口,不可合并 | | 莫斯科 SVO2(OCR: SV02) | SVO2 | | | 莫斯科 SVO(OCR: SVO,无数字)| SVO | 仅当 OCR 不带数字时使用 | | 圣彼得堡 LED | LED | | | 叶卡捷琳堡 SVX | SVX | | | 阿姆斯特丹 AMS | AMS | |

三、字段规则

货型转换

| 原始 | 输出 | |------|------| | 平 / 散件 / 平货 / 普货 | 1:1 | | 1<XXX(OCR 误识别) | 1:XXX | | 1:XXX | 1:XXX | | >XXX | >XXX | | <XXX | <XXX |

散托类型判断

  • 备注含 托盘+N → 散托类型 = 散货,增量 = N(填入第24列)
  • 无增量 → 默认 散货/托盘
  • 航司明确标注散件 → 散货

日期提取

| 原始格式 | 输出 | |---------|------| | 2026/7/17 | 2026-07-17 00:00:00 | | 7.13-7.19 | 2026-07-13 00:00:00(取起始日期) | | 2026/7/12(18) | 2026-07-12 00:00:00 | | 图片标题含更新日期 | 以各航司块标注的生效日期为准 |

频次归一化

| 原始 | 输出 | |------|------| | Daily | Daily | | 1234567 | Daily | | 12467 | D12467 | | D347 | D347 | | 1357 | D1357 |

四、列 X 坐标范围(通用)

M:     255-315
N:     340-400
Q45:   415-490  (或 20KG以下: 415-495,映射到45KG)
Q100:  505-570
Q300:  590-655
Q500:  675-740
Q1000: 760-825

注意:不同航司块列结构可能不同:

  • CA 块:M/N/20KG以下/Q100/Q300/Q1000(无 Q45/Q500)
    • ⚠️ CA PEK-SVO2 的「20KG以下」列价格忽略,该块 45KG 列留空(仅当前技能规则)
  • MU 块:Q100/Q300/Q500/Q1000(无 M/N/Q45)
  • 其他:标准 M/N/Q45/Q100/Q300/Q500/Q1000

五、提取流程

1. 确认输入图片路径
2. scan_image(IMG) 获取 OCR items
3. 按航司块逐块提取:
   a. 识别航司、起始港、目的港、生效日期、频次
   b. 按 y 坐标定位每行比重
   c. 比重升序排序 → 链式区间推导(每档 end=下一档 start,末档=9999)
   d. 按 x 坐标范围提取各重量段价格
   e. 解析备注中的散托增量
4. 24列 DataFrame → columns_24.COL_24
5. 校验 → 上传 WPS

六、链式区间推导

比重按以下顺序排序后推导区间:

  1. 1:1(最前)
  2. 1:XXX(按 XXX 升序)
  3. >XXX(按 XXX 升序)

每档 end = 下一档 start,末档 end = 9999

坑1>N 型比重的 end 不是固定 9999,而是下一个 1:N 档的 N 值(如有)。

七、MU 三程联程特殊处理

MU 航线(如 PKX/SZX/CAN-PVG-AMS)需拆分为多条记录:

  • 每个起始港单独一条记录
  • 转运点填 PVG
  • MU 块可能无 M/N/Q45 列

八、24列输出

使用 /Users/hantao/WorkBuddy/oone/columns_24.py 的 COL_24 常量。

九、常见坑

| # | 坑 | 解决方案 | |---|-----|---------| | 1 | 1<130 OCR 误识别 | 统一转为 1:130 | | 2 | >N 型比重 end 错误 | end 取下一个 1:N 档的 N,非 9999 | | 3 | CA PEK-SVO2 块「20KG以下」列 | 忽略,45KG 留空(仅当前 Skill 规则,非通用) | | 4 | MU 块无 M/N/Q45 | 留空,不填 0 | | 5 | MU 三程联程 | 拆分为多条记录,填转运点 | | 6 | 北京 PKX | 统一输出 PEK | | 7 | 散托增量从备注提取 | 匹配 托盘+N,散托类型强制为散货 | | 8 | SVO1/SVO2 是两个不同港口 | 保留数字不合并,OCR 中 SV01→SVO1、SV02→SVO2 |

十、脚本模板

参考:/Users/hantao/WorkBuddy/oone/0713/extract_new_img_0713.py

关键函数:

  • scan_image(IMG) → OCR items
  • find_price(items, y_center, x_range) → 在指定坐标找价格
  • normalize_ratio(text) → 货型标准化
  • ratio_to_range(ratio, next_ratio) → 比重转区间
  • build_block(items, origin, dest, carrier, eff_date, freq, rows, col_def, ...) → 构建航司块
  • upload_excel_and_notify(OUT, name) → 上传 WPS