内容
<div align="center">
# 开放式测量平台
**首个为人类和AI智能体构建的测量平台。**
打开建筑计划并进行测量 — 自己手动绘制房间,或者让AI智能体指向**相同的引擎**。每次测量都带有**比例**和**测量方式**。免费、开源,它在您的浏览器中运行 — 无需账户,无需上传,无需安装。
[](LICENSE)
[](https://opentakeoff.netlify.app)
[](#tech-stack)
[](https://github.com/sponsors/Kentucky-ai)
[**▶ 尝试在线演示**](https://opentakeoff.netlify.app) · [快速开始](#快速开始) · [功能](#功能) · [适用于AI智能体](#mcp/) · [部署](#运行它--部署它) · [拥有您的数据](#拥有您的数据--捕获层) · [在其基础上构建](#在其基础上构建) · [贡献](#贡献)
**新 - 2026年7月:** **MCP服务器** — 您的AI智能体可以驱动测量引擎(`npx opentakeoff-mcp`,在 [官方MCP注册表](mcp/)中)— 并**原生浏览计划集**:图纸、标题块文本和渲染页面作为 [MCP资源](mcp/#resources--browse-before-you-measure)(v0.2.0) · **语音测量** — 按住M并说`carpet one, waste seven`(或在命令框中输入); 语音在浏览器中识别 - 音频永远不会离开您的机器([RFC #59](https://github.com/Kentucky-ai/opentakeoff/issues/59),[docs/VOICE.md](docs/VOICE.md)) · **来源** — 每个形状记录其测量方式(其比例,一键或手动绘制,以及人员或智能体) · 一键区域跟踪**斑驳房间**和**扫描计划** · **标记集PDF导出** — [完整变更日志](CHANGELOG.md)
<br/>
<img src="docs/img/social-card.png" alt="OpenTakeoff — 在地板完成计划上进行实际测量,由人或通过MCP上的AI智能体驱动,具有每个测量的比例和来源" width="820"/>
</div>
---
OpenTakeoff是一个免费、开源的测量平台,用于从建筑计划中测量数量 — **测量平台**。它与其他平台的不同之处在于谁可以使用它:一个人 **或** 一个AI智能体,在**同一个引擎**上。您点击一个房间,它就会自动绘制;智能体调用同一个工具,并获得相同的数字。而且每个测量都记录了**它是如何制作的** — 它的比例,是手动绘制还是单击绘制,以及是由人还是智能体制作的。
这使得OpenTakeoff成为第一个AI智能体可以像估算师一样测量真实建筑物的地方 — 而且它仍然是绘图员的绝佳工具。
直到现在,**还没有开源的基于Web的测量平台** — 更不用说专门为地板行业构建的平台。OpenTakeoff就是这样一个工具:一个免费、开源的替代品,供整个行业使用。
它最初是作为一个私有地板估算应用程序的测量模块,然后被抽取出来,清理并发布。**这是真正的测量引擎,而不是演示版** — 包括**一键区域**,这是价值300美元/月的工具,受到订阅限制。
**为地板行业构建,但对任何测量都很有用。** 测量引擎是通用的 — 面积、线性、计数和扣除适用于您从计划中缩放的任何内容(石膏板、油漆、混凝土、现场施工)。它被称为**地板工具**的原因是它上面有针对地板的特定层:具有CAD阴影的图层、每个图层的废料百分比、按平方码输出的产量和**物料采购清单**,这是其他工具不提供的。
而且无需设置。打开页面,拖入计划,开始测量。您的PDF、测量结果 — 以及如果您使用语音输入,则语音 — 永远不会离开您的机器:没有服务器参与。
## 快速开始
您不需要安装任何东西来**使用**它 — 只需打开 [**在线演示**](https://opentakeoff.netlify.app),拖入计划,然后开始。
要自己运行:
```bash
cd web
npm install
npm run dev # http://localhost:5173
```
将 **`demo/sample-plan.pdf`** 拖到画布上。比例会自动检测;选择一个条件,点击 **一键区域**,然后点击房间。打开 **报告** 查看明细并导出CSV/JSON。
## 功能
### 1. 立即打开任何文件
拖入 **PDF** 计划、**图像**(扫描件或截图)或整个 **`.zip` 计划集** 直接从投标平台。压缩包在浏览器中解压,图像包装成PDF *,最多可显示4张图纸并排*。无需上传步骤,无需转换服务,无需帐户。
### 2. 真正的测量引擎 — 不是带有尺子的计数器
**一键区域** 是主要功能:点击房间内部,线条边界会围绕它, 多边形会自行跟踪,顶点会捕捉到真正的角落。它读取绘图的方式与估算师相同 — **阴影和填充不会欺骗它**:瓷砖网格、木板线和部分填充被分类为图案,而不是墙壁,因此点击完全阴影的房间仍然会跟踪房间(如果读取错误,不会使结果比严格填充更差 — 它只会在严格检查失败时升级)。 **扫描计划也适用**:当图纸是扫描件(无矢量线条)时,引擎会读取渲染的像素而不是 — 自适应阈值处理带有一个间隙桥接通道 — 然后在扫描墨水上运行相同的填充/跟踪机制;结果会被标记,以便您在创建之前验证边缘。 另外还有完整的**手动工具包** — **面积**、**矩形**、**线性**、**表面面积(墙壁)**、**计数** 和 **扣除** (用于柱子、空隙和开口)。这是从商业估算应用程序中提取的同一个引擎,而不是重新实现的玩具。
<div align="center">
<img src="docs/img/one-click-area.gif" alt="在一张真正的完工计划上进行一键区域测量:点击房间内部,整个房间会自行跟踪,从墙到墙 — 240.7 SF,输入后提交" width="820"/>
</div>
手动跟踪获得真正的绘图辅助工具: **45°/90°角度锁定**。接近方格或对角线的几度范围内,您正在绘制的线段会锁定到轴上 — 点击提交锁定点,因此墙壁完全方正(按住 **⇧** 以任意角度强制锁定)。 在画布上,**十字准线是光标**:操作系统指针隐藏,星号标记交叉点,正在进行的绘制以工具自身的钴蓝色显示(已提交的形状显示其条件颜色)。锁定静默读取 — 星号膨胀,预览加粗, 光标旁边的芯片显示锁定角度和**实时线段长度**。 没有多余的控件在您的图纸上。
### 3. 匹配真实计划集的比例
自动检测图纸上的比例注释,或从任何已知尺寸 **校准** (点击两个点,输入实际长度)。比例按**图纸**记住 — 因为计划集永远不会是统一的比例,而假设它们是的工具会得到错误的结果。
### 4. 读取图纸的条件
条件是一种完成度(LVP、地毯、瓷砖、基材...)。每个条件都带有 **线/填充颜色** 和 **CAD阴影图案** (板条、鱼骨、瓷砖、环氧树脂)以使画布看起来像真实的图纸 — 加上每个条件的 **废料百分比** 、 **×N乘数** 用于重复的相同单位、**高度** 默认用于墙壁跟踪、 **厚度** 将线性运行变成边界/特征条的平方英尺。
### 5. 支持物料 — 劳动力、底层和耗材,正确完成
每个条件:一个自由文本 **劳动类型** (胶合、浮动、钉合...)和 **底层类型** (层压板、混凝土板、OSB...),以及实际用于订单的物料 — 粘合剂、密封剂、聚氨酯、薄层砂浆、灌浆、 Cove-基材粘合剂。每个物料都有 **覆盖率** 和 **基准** (每平方英尺/线性英尺/每个),并且订单数量会自动派生 — 测量值 ÷ 覆盖率,**向上舍入** 到整个单位。 粘合剂和砂浆线有 **覆盖率预设** (抹刀凹槽、滚筒)填充扩散率,灌浆线有 **计算器** 根据瓷砖尺寸、厚度、接缝宽度和袋重导出每平方英尺/袋。 这是大多数测量工具跳过的一层。 它在此处提供。
### 6. 报告和导出
每个条件的明细 — **地板/墙壁/边界SF,LF,EA,总SF,SY** ,有/无废料 — 加上综合的 **物料采购清单** 。导出到 **CSV** 、 **JSON** 或真正的 **Excel工作簿** (汇总、按图纸、物料和形状审计选项卡 — 完整精度单元格,公式化名称保持不变文本),或打印。 废料仅在报告中应用(订单数量),永远不会在实时测量数字上应用,因此您的测量和采购清单对哪个是哪个保持诚实。
当需要离开应用程序时: **标记集PDF** 。单击创建了一个可分发的PDF,完全在浏览器中 — 每张图纸都带有燃烧的测量值(条件颜色、阴影、数量芯片、计数标记、标记) 在图例封面后面带有总计和按图纸的明细。将其发送给GC,他们永远不会安装任何东西。
当追加内容到达时: **修订** 。在每次投标修订时保存测量结果为命名修订,然后比较任意两个 — 或修订与实时测量结果 — 作为 **数量差异** 每个条件、每张图纸和采购清单,并附带比较CSV。 自动银行恢复实时测量结果,因此它永远不是单向门。
### 7. 矢量锐利的画布 + 计划集工具
缩放时,线条 **锐利如刀** :超过 ~1.15× 缩放 **倍数您的显示像素比** (因此在2×/Retina屏幕上比1×显示器上更早启动) 可视区域直接从PDF矢量在您当前的缩放级别重新渲染 — 类似Bluebeam/AutoCAD — 而不是放大固定位图,因此细小的标注和阴影永远不会模糊。 它在滚动/缩放暂停后立即启动,而不是在每个帧上启动,因此连续缩放保持在快速基准层,直到您停止移动。 它覆盖了屏幕上显示的内容,因此没有巨大的完整图纸位图需要保存。 加上 **暗色视图** (☾)将图纸本身反转成真正的负片,白色线条在黑色背景上,而不是CSS过滤器 — 阴影调整以便测量结果在夜间和白天一样清晰。 还有一个视觉 **图库** (`G`)选择和打开图纸, **重新分组** 恢复分屏布局, 每张图纸 **高分辨率** 基础渲染, **捕捉** (测试版)到图纸线条和角落, 以及一个单独的 **标记层** (修订云、标注、文本注释)永远不会计入总数。
### 8. 属于您,本地存储
每张图纸、比例、条件和标记都自动保存到您的 **浏览器** (IndexedDB + localStorage)。 默认情况下没有任何内容上传,也不需要帐户。 您自己托管静态构建版本,它仍然完全一样。
<div align="center">
<img src="docs/img/report.png" alt="OpenTakeoff 报告 — 按条件分类的明细和物料采购清单" width="780"/>
</div>
### 可选:团队云模式(Google登录 + Drive)
上述所有内容都是默认的,而且保持不变:打开页面,您是一个 **匿名** 的本地用户 — 无需帐户,无需上传,无需配置。 Google Workspace上的团队可以 **可选** 登录以解锁共享模式:项目存储在团队自己的Google **Drive** 中,项目列表与您现有的 **Glide** 应用程序深度链接,物料成本来自同步的 `pricing.json` 文件。 它是严格附加的 — 关闭它(设置为空),应用程序与本地工具完全相同。
## 工具箱
| 区域 | 您获得的内容 |
|---|---|
| **导入** | PDF、图像或 `.zip` 计划集 — 在浏览器中解压,支持多页,最多可并排显示4张图纸 |
| **比例** | 自动检测绘制的比例注释,或从已知尺寸 **校准** — 每张图纸 |
| **测量** | 一键区域(填充跟踪)、面积、矩形、线性、表面面积(墙壁)、计数、橡皮擦(扣除)、区域检查(按区域分解) — 英制或公制(m²/m,1:50样式比例) |
| **绘图辅助工具** | 45°/90°角度锁定,⇧硬锁定,实时角度+光标处线段长度读数,端点捕捉(测试版) |
| **条件** | 颜色 + CAD阴影每个完成度,废料%,×N乘数,高度,厚度→边界SF |
| **支持物料** | 每个条件:劳动类型+底层类型(自由文本),以及带有覆盖率的物料→圆形订单数量,每个物料的覆盖率预设+灌浆计算器 |
| **报告** | 每个条件的地板/墙壁/边界SF,LF,EA,SY,有/无废料 + 物料采购清单 |
| **导出** | CSV,JSON, **Excel(.xlsx)**,打印, **标记集PDF** (图纸+燃烧测量值+图例封面,在浏览器中构建) |
| **修订** | 在每次投标修订时保存测量结果,比较发生了什么变化 — 数量差异每个条件,每个图纸和采购清单;有保护的恢复 |
| **标记** | 修订云,标注,文本注释 — 单独图层,永远不会计数 |
| **视图** | 浅色或 **暗色(负片打印)** — 绘图时像素反转,持久每个浏览器 |
| **存储** | IndexedDB + localStorage — 客户端,仅,无上传 |
| **捕获(可选)** | 捆绑的 [捕获服务器](capture/README.md) 银行每个贡献的测量结果为(几何 → 标签)训练行 — 您拥有的一个语料库,可以镜像到同步的公司共享 |
| **MCP服务器** | 用于MCP客户端的引擎 — 加载计划,设置比例,一键房间,导出测量结果([`mcp/`](mcp/README.md)) |
| **来源** | 每个形状记录其测量方式 — 其比例,一键或手动绘制,以及人员或智能体创建它 |
| **部署** | 一个静态构建版本,可在Netlify,Vercel,GitHub Pages,S3或任何静态主机上部署 |
## 运行/部署
**使用它,您只需要浏览器。** 自主部署时,只需一个静态构建版本,您可以将其放在任何地方 — 没有后端,没有数据库,没有环境需要设置。
```bash
cd web
npm install
npm run build → web/dist/ (静态;可在任何地方托管)
```
[](https://app.netlify.com/start/deploy?repository=https://github.com/Kentucky-ai/opentakeoff)
存储库附带根 `netlify.toml`,因此上面的按钮实际上是一键部署。相同的 `web/dist/` 版本在 **Vercel,GitHub Pages,Cloudflare Pages,S3** — 任何静态文件服务器都可以使用。
## 拥有您的数据 — 捕获层
这是测量结果中很少被讨论的部分:您完成的每个测量结果都是一组专家决策 — **此** 区域获得 **此** 完成度,在 **此** 废料百分比,从而产生 **这些** 数量。 一旦完成,那就是投标。 银行每次都是 **标记的数据集** — 您唯一没有的数据集 — 测量模型的原始原材料。 今天,这些数据在投标完成后就会消失。 它不必这样。
OpenTakeoff 提供了可选的 **捕获层** 以便您保存:
- **贡献** 按钮在报告中生成派生负载 — 条件标签、形状角色、数量,规范几何和每个形状的来源(手动绘制 vs. 机器建议,以及人类纠正)。永远是 150 个审计行: [`web/src/lib/contribute.js`](web/src/lib/contribute.js);规范的线条合同是 [`docs/CONTRIBUTION_SPEC.md`](docs/CONTRIBUTION_SPEC.md)。
- 捆绑的 **捕获服务器**([`capture/`](capture/README.md)) — 一个stdlib的Python文件,无需pip安装 — 接收它 localhost 并银行每行训练行,哈希值以防止重复。 v2行区分机器得到的东西和跟踪模型训练的信号 - 准确的训练数据。指向一个同步文件夹 `--mirror`,语料库骑行您的现有OneDrive/SharePoint/Dropbox同步到公司存储, 原子地,准备好训练。
```bash
python3 capture/capture_server.py # 然后,在应用程序的浏览器控制台中:
# localStorage.opentakeoff_contribute_endpoint = "http://localhost:8787/contribute"
```
运行 OpenTakeoff 时,不会发生任何事情;您选择贡献的内容会累积成您拥有的资产。 这是 [Spline](https://spline.quisutdeus.io) 中捕获层的开放版本,商业 Division-9 估算系统 OpenTakeoff 从中提取,捕获运行得更深入 - 自动在自动保存和提交时进行环境捕获,没有按钮:暂存行在绘图过程中存储,认证行在提交时存储,带有爆炸的物料组件,编辑带有决策轨迹,每个作业的语料库文件都存储在 GC 的文件夹中,在公司共享上。完整的推介,行模式和训练角度在 [`capture/README.md`](capture/README.md) 中。
## OpenTakeoff背后的研究
OpenTakeoff是一个应用研究项目的一部分,由一位商业地板估算师运营,他同时也在为自己的部门构建人工智能([肯塔基人工智能](https://kentucky-ai.com))。这个界限是刻意的,与最好的开源科学软件相同:**测量引擎 — 渲染、缩放、几何、导出、MCP服务器 — 是Apache-2.0许可的,并且保持开放。 我们在自己的估算档案中训练的AI模型是专有的。** 你获得了一个没有座位许可证的真正工具;我们保留只有我们的数据才能构建的部分。
研究方面像实验室一样运行,而不是演示:
- **标记即标签训练数据(专利待批)。** 每个估算员在专业估算软件中保存的估算都将绘制区域存储为矢量几何,重新构造这些多边形可以精确地重现记录的数量。二十年的估算工作是一个精确的可验证的训练语料库 — 这是整个项目测试的假设。
- **参数高效的调整,而不是预训练。** 模型是在开放权重基础上训练的QLoRA适配器(~0.1%的参数训练),从一个经过验证的投标存档中专门定制 — 成本足够低,可以在数据需要时重新训练,规模足够小,可以交付。旗舰适配器在**51个项目的时间保留中位绝对百分比误差为12.3%**,而未调整的基础模型为62.8% — 完整的方法和诚实的免责声明在[模型卡](https://huggingface.co/Kentucky-ai/div9-flooring-estimator-gemma4-31b)上。
- **验证标签输入,验证标尺输出。** 在任何历史投标成为训练数据之前,它都会经过双文档验证门控:总金额必须在投标工作簿和单独提交的提案之间相互核实,变更订单仅在得到实际变更订单文档的证实时才会被计算,逐项算术会被重新计算并进行法医检查。无法验证的项目不会进行训练。
- **冻结保留和可验证的标尺。** 每个模型都针对它从未训练过的时间保留项目进行评分 — 未来的投标,而不是随机分割 — 使用具有测量误差的几何评分器(0.4%),因此我们知道何时出现模型误差或测量误差。
- **多种子复制。** 没有结果是从单个训练运行中得出的;推广需要种子复制和配对自助置信区间 — 并且发布跨种子传播,而不是最佳种子。
- **记录负面结果。** 实验账本记录了失败的原因和原因 — 销毁检测的解冻配方,垂直专业模型输给了通用模型的跨垂直转移 — 以及有效的内容。
- **发布前进行泄漏审计。** 标识符在训练前被替换(权重从未看到真实名称),每个公共工件都经过差异红队:针对调优模型和未调优基础模型的对抗性提取探测。
净化研究工件 — 模型卡、基准规范、论文 — 在审查通过后发布: [Hugging Face](https://huggingface.co/Kentucky-ai) · [kentucky-ai.com](https://kentucky-ai.com)。
## 自带AI(可选)
OpenTakeoff可以要求您提供的视觉模型读取计划中的内容 — 首先是从图纸中读取比例,当表格中没有明确标注时(扫描件、旋转注释、图像标题块)。点击工具栏中的 **AI** 并指向 **OpenAI风格** 的端点(默认 — 本地运行时在您的机器上运行,无需密钥)或 **Anthropic风格** 的端点,以及具有视觉能力的模型ID。
- **发送的内容,以及仅在您点击AI按钮时发送的内容:** 所选图纸区域的一张快照,以及问题 — 发送到 *您的* 端点。 绝不会发送整个计划文件、文件名、项目名称或您的估算。
- **未配置即无存在。** 未配置的构建除了按钮之外不会添加任何UI,并且不会进行AI网络调用。无论如何,都没有遥测数据。
- 模型的答案只是一个 **建议** — 它进入与文本检测到的比例相同的确认应用流程,并且在接受时显示校准的引导条,以便您进行合理性检查。
- 密钥(如果有)存储在此浏览器的localStorage中 — 使用您可以撤销的密钥。部署者:`VITE_AI_ENDPOINT` / `VITE_AI_MODEL` / `VITE_AI_PROVIDER`可以将默认值嵌入到团队构建中,但 **绝不能在公共部署上设置`VITE_AI_KEY`** — Vite将其内联到已发布的包中。
## 从AI代理使用
同一个引擎支持 [MCP](https://modelcontextprotocol.io):[`mcp/`](mcp/README.md) 是一个stdio服务器,您的MCP客户端可以驱动,距离一命令 — `npx -y opentakeoff-mcp` — 带有 `load_plan`, `read_sheet_text`, `set_scale`, `one_click`, `view_sheet`, `takeoff_summary`, `export_takeoff` 等等。 代理打开计划,读取标题块,采用比例(从不无声应用),点击房间,在渲染的叠加层上检查其工作,并导出应用自动保存的确切有效载荷 — 相同的数学,相同的来源凭单,相同的比例门控。 设置和完整的示例传输: [`docs/MCP.md`](docs/MCP.md).
## 在其基础上构建
OpenTakeoff 是 **Apache-2.0**:您可以 fork 它,修改它,发布它 — 为您自己的团队或作为您自己的产品的基础。 代码库故意设计得小且易读,以便您可以添加您想要的功能:
- **几何和测量** — [`web/src/lib/oneclick.ts`](web/src/lib/oneclick.ts),[`web/src/lib/sheets.ts`](web/src/lib/sheets.ts)(类型化和测试)
- **总价和材料数学** — [`web/src/lib/totals.js`](web/src/lib/totals.js)
- **状态和持久性** — [`web/src/lib/store.js`](web/src/lib/store.js)
- **UI** — [`web/src/pages/TakeoffCanvas.jsx`](web/src/pages/TakeoffCanvas.jsx) 和 [`web/src/components/`](web/src/components/)
在PR之前运行 `npm run typecheck && npm test && npm run build`;保持几何库纯净和测试;绝不能提交真实计划。 查看 [CONTRIBUTING.md](CONTRIBUTING.md) 和 [用户手册](docs/USER_GUIDE.md) — 完整的零到导出估算指南。
## 贡献 — 有阶梯
每个开放问题都是一个真实需求,而不是一个制造的任务,并且为您的起点提供了一个阶梯:
- **第一个PR:** 标记为 [`good first issue`](https://github.com/Kentucky-ai/opentakeoff/labels/good%20first%20issue) 的问题是小型、完全指定的,并指向确切的文件。 在评论中认领一个然后开始。
- **旗舰:** [#29 — 将计划表公开为MCP资源](https://github.com/Kentucky-ai/opentakeoff/issues/29) 是一个开放的设计和构建挑战。 欢迎多个入口; 最好的一个合并并在发行说明中获得认可,然后发布给每个拉取 [`opentakeoff-mcp`](https://www.npmjs.com/package/opentakeoff-mcp) 的客户端。
基本规则位于 [CONTRIBUTING.md](CONTRIBUTING.md)。 测试通过且CI为绿色的PR快速合并 — 最近的三个外部PR。
## 技术栈
- **前端:** React 18 + Vite,普通JSX
- **绘图:** 原始HTML5 Canvas + SVG(无图表/画布框架)
- **几何:** TypeScript(`oneclick.ts`,`sheets.ts`)
- **PDF渲染:** [pdf.js](https://github.com/mozilla/pdf.js)
- **计划集摄入:** fflate(zip)+ pdf-lib(图像→PDF),延迟加载
- **存储:** IndexedDB + localStorage — 无需后端
- **测试:** `node --test` + `tsx`
- **无付费依赖。** 查看 [THIRD-PARTY-NOTICES.md](THIRD-PARTY-NOTICES.md).
## 状态
OpenTakeoff是一个 **工作工具**,而不是预览版。 测量引擎 — One-Click Area,条件,支持材料,报告和导出 — 是从商业地板估算应用程序中提取的生产引擎。 同一个引擎响应画布上的个人或通过MCP的AI代理,并且它进行的每次测量都带有其规模和来源。 **Snap** 标记为测试版。 它用于实际的商业地板投标; 问题和拉取请求是受欢迎的。
## 制作者的说明
我为一家商业地板公司运行估算 — 并为我的部门构建AI。 OpenTakeoff是该工作的开放部分:测量引擎由人或代理驱动,免费提供给行业。 我在自己的估算档案中训练的模型属于我们自己。
我构建了我真正想要的工具:打开计划,跟踪您的房间(或让代理为您做),交付干净的报告 — 每个数字都告诉您它是如何制作的。
— Michael · Kentucky AI
## 许可
[Apache License 2.0](LICENSE) — 使用它,fork它,发布它,在其基础上构建。 赠予地板社区。 查看 [NOTICE](NOTICE) 以获取署名。
MCP 配置
以下是此 MCP Server 的配置信息,可直接复制到 Cursor 或其他 MCP 客户端中使用。
mcp.json
连接信息
猜你喜欢
暂无推荐服务器