CAD 図面は Python で読める!AI と組み合わせて積算をラクにする方法
「CADの図面から長さや面積を拾う作業、もっとラクにならないかな?」——積算や設計まわりの業務をしていると、そんなふうに思うこと、ありますよね。実は、CADの図面データはPythonというプログラミング言語でけっこう簡単に読み取れるんです。この記事では、CAD図面をPythonで読み取る仕組みと、AIと組み合わせたときの可能性をカジュアルに紹介します。
そもそもCADのデータって何が入ってるの?
CADの図面は、見た目は「絵」ですが、中身は線や円、文字といった部品(要素)のデータの集まりです。それぞれの線には「始点と終点の座標」「どのレイヤー(層)に属しているか」「何色か」といった情報がくっついています。
つまり、プログラムでこの情報を読み出せば、「このレイヤーの線を全部足したら何mになるか」といった計算を自動でできるわけです。
PythonでCADを読むための道具
DXFファイルなら「ezdxf」
CADのデータ形式にはいくつか種類がありますが、Pythonで扱いやすいのがDXF形式です。DXFは多くのCADソフトで保存・書き出しができる形式で、「ezdxf」という無料のライブラリを使うと中身を読み取れます。
DWGファイルはひと手間かかる
よく使われるDWG形式は仕様が公開されていないため、Pythonで直接読むのは少しハードルが高めです。CADソフトや無料の変換ツールでいったんDXFに変換してから読む、という流れが一般的です。
PDFの図面も実は読める
CADから書き出したPDFの多くは、線の情報をそのまま持っています。「PyMuPDF」というライブラリを使うと、PDFの中の線や図形の座標を取り出せます。CADデータが手元になくても、PDFから数量を拾える可能性があるんです。
実際のコードはこんな感じ
たとえば、DXF図面の直線をレイヤーごとに集計するなら、こんな短いコードで済みます。
import ezdxf
from collections import defaultdict
doc = ezdxf.readfile("plan.dxf")
msp = doc.modelspace()
totals = defaultdict(float)
for line in msp.query("LINE"):
length = line.dxf.start.distance(line.dxf.end)
totals[line.dxf.layer] += length
for layer, total in totals.items():
print(f"{layer}: {total:.0f}")
これだけで「レイヤーごとの線の長さの合計」が出せます。図面の単位(mmなど)に合わせて換算すれば、そのまま数量の拾い出しに使えますね。
Pythonだけだと難しいところ
とはいえ、Pythonで読めるのは「線の座標」や「レイヤー名」といった機械的な情報だけです。困るのは、こんなケースです。
- レイヤー分けがきちんとされていない図面
- 同じ種類の部材なのに、図面によって描き方がバラバラ
- どの線が何の部材なのかを、凡例や注記を読まないと判断できない
こういった「図面の意味を読み取る」部分は、プログラムだけで対応しようとするとルールがどんどん複雑になってしまいます。
そこでAIの出番
ここで役立つのが生成AIです。Pythonが線や座標を正確に読み取り、AIが「この線は何の部材か」を判断するという分担にすると、お互いの得意を活かせます。
- Python:座標の取得、長さ・面積の計算など「正確さ」が必要な部分
- AI:凡例や注記の解釈、部材の分類など「判断」が必要な部分
計算はPythonに任せるので、AIが数字を間違えるリスクも減らせます。最後に人が結果をチェックすれば、精度と効率のバランスがとれた積算フローになりますよ。
まとめ
CAD図面はPythonで読み取れて、DXFならezdxf、PDFならPyMuPDFといった無料の道具で数量の拾い出しを自動化できます。さらにAIと組み合わせれば、図面の「意味」まで踏み込んだ処理も見えてきます。「うちの図面でもPythonやAIで読めるかな?」と気になったら、hello-opensky までお気軽にご相談ください。
