AIを駆使して2D図面画像を2DCAD(ベクター)化する
はじめに
株式会社ファースト・オートメーションCTOの田中(しろくま)です!
今回は以下のような2D図面画像の分析の難しさと生成AIの発展によってそれが少しずつ解けるようになってきているという話をしたいと思います。

解きたい問題
我々が製造業と関わる中で、なかなか最新のAIを持ってしても解くのが難しいと思っている問題が2D図面の画像解析です。
2D図面の画像を正確に解析できるようになることで、以下のような応用ができるようになります。
- 2次元的に投影された図から3次元的なモデルの復元
- 図面に描かれた物体の加工手順の生成
- 寸法の抜けや図面のミスなどのチェック
- 過去設計した類似形状、類似部品の検索
製造業では3DCADも多く使われていますが、過去の図面なども含め図面の画像もかなり使われているのが現状です。
今回の課題設定
図面を解析するといっても上記のように様々ですが、今回の課題設定としてトライしたいのは、
画像上に描かれた2次元の機械図面(RGBデータ) を
2DのCADデータ(線や図形、寸法などを認識したベクターデータ)
に変換することです。
これができることで、上記のような課題への対応も可能になると考えています。
図面の何が難しいのか?
図面画像を解析する上で難しい点はいろいろありますが、最も難しい部分は書き方のルールが決まっているようで曖昧な部分が多いことです。
例えば、図面は3Dの形状を投影した図であるため、通常は三方向から投影したものを描く必要があります。しかし、円筒のような軸対象の物体や一部の投影図が他の投影図から推測できる場合は一面や二面のみで描かれます。
つまり図面を最初に見たときに、投影図の個数と投影のされ方から3D形状を推測しなければいけません。

また、寸法線や補助線、外形線などはJIS規格で異なる線(太さや点線、一点鎖線などによる違い)で描くことが決まっているものの、それらを機械的に見分けるのは難しく、そもそも会社独自のルールやJIS規格を厳密に守らずに描いてしまっている場合もあり、どの線が実際の外形を示したものか理解するのも難しいです。

仮に線そのものを寸法線や外形線に分類できたとしても、その線で描かれている形状(直線、円、円弧、矢印、文字など)を見分けるのもまた難しい問題で、図面は色や模様のような特徴が少ないため、一般的な物体認識手法ではうまく検出できないことが多いです。
関連技術
そもそもニッチな問題というのもあり、直接同じ問題を解いている技術はほぼ無いのですが、関連する技術を取り上げたいと思います。
Image2CAD
2020年くらいに作られたリポジトリで、機械学習的な手法ではなく、ヒューリスティックな形状に関する特徴量を用いたフィッティングにより、矢印、文字、直線、円といった形状の抽出を行っています。



添付されている結果の画像を見るとかなりうまく推定できているのですが、試している図面にあまりバラエティがなく、比較的同じような図面に対してうまくいくようにチューニングされているようでした。
StarVector
今年の始めのころに、画像をベクターデータに変換するAIモデルでStarVectorというものが発表されました。
画像内の円や矩形のようなものも適切に <circle> や <rect> に当てはめて変換してくれます。
こちらは通常の画像ではうまく変換ができるのですが、図面のような白黒の線のみ場合、特徴量が少ないのかうまく行きませんでした。
例えば以下のような図面だとうまくSVG化できません。
入力画像

SVG化

生成AIで見えてきた解決の糸口
昨今の生成AIの発展により、図面画像の解析にいよいよ糸口が見えてきました。
投影図認識
まず最初に図面画像を解析する上で必要となるのが、各投影図の認識です。
基本的には物体検出モデルで各投影図の領域を抽出する形になるのですが、そのような検出クラスを持ったモデルやデータセットがなかなかありませんでした。
最新のGoogle Geminiのモデル(2.5-proなど)では物体検出を任意のラベルに対して行うことができます。
これにより、正面図、側面図といったラベルを指定することで、各投影図の認識が可能になりました。

線の意味認識
次に各線がどのような意味を持っているかを認識し、意味を持った線毎に分類します。
特に重要なのは以下の3種類の線です。
- 寸法線(外形から出ている引き出し線も含む)
- 補助線(中心線や隠れ線)
- 外形線
さらに図面においては形状情報も重要であり、直線か円、曲線などの情報も大事になります。
今回は少し簡易的に、以下の4つの線に分けることにしました。
- 寸法線
- 補助線
- 外形線の中の線分
- 外形線の中の円もしくは円弧
これらの意味を理解し、かつ画像処理を行いやすいようにするために、Nanobanana Proの画像編集を用います。
画像編集は他にもGPT-imageやSeedream、Reveなども有名ですが、一貫性と意味理解という観点でNanobanana Proが圧倒的に良かったです。
以下がNanobanana Proを使った場合の線の色分け認識結果です。
赤が寸法線、黒が補助線、青が外形の線分、緑が外形の円弧になります。

若干余計な線が入ったりしてますが、円弧もちゃんと認識できており、概ね良い感じになってます。
各線から図形を抽出
上記で抽出した線や円はまだ画像の状態なので、これをSVGのようなベクターデータに置き換えます。
これもAIを用いてベクターデータ化できなくはないのですが、若干微妙な感じ(以下はgemini-3-pro-previewによる結果)だったので、ここはトラディショナルな画像認識によって行っていきます。

基本的には線の認識と円の認識を行います。
線の認識
線の認識は以下のように線のみが抽出された画像に対して、skeletonizeを行い、細線化された線のピクセルを辿りながら線を成形していきます。
上記で出来上がった線のままだと線が細切れになるので、Douglas Peuckerというアルゴリズムで平滑化も行います。
Skeletonizeイメージ

円の認識
円の認識はRANSACによる円のフィッティングにより行いました。
以下のように色分けによってほぼ円のみが写った画像になっているので、推定パラメタにフィットした点の数を多めに調整してロバストに推定するようにしました。

RANSACのイメージ

AIを駆使した図面解析ワークフローの結果
上記の流れに沿って、図面画像(PNG)をベクターデータ(SVG)に変換してみます。
実際の2DCADデータはDXFという形式などがよく使われますが、内部的にベクターデータという観点で見ればほぼ同様のデータになります。
図面全部をベクター化するのはなかなか大変だったので、今回は外形のみ、円はフィッティングするが円弧のフィッティングは無しで、上記の画像を用いて以下のようなベクターデータが得られました。

まだまだ完璧とは言えませんが、左側の投影図に関してはまあまあ綺麗にベクター化できたのではないでしょうか。
今回使用したコードはこちらに置いてます。
まとめ
最近のAI技術を駆使して、2D図面画像の解析を行ってみました。
ここの要素ではかなり精度高く図面を読み込むことができるようになっており、ベクター化でなくても他のタスクでは使えるようになってきています。
いずれはベクター化やより複雑なタスクもポン出しで解決できるようなAIが誕生するとは思いますが、今の所、各AIの特徴を抑えながら組み合わせで解決していく能力も一定必要だなと思ってます。
最後までお読みいただきありがとうございました。
最後に宣伝ですが、株式会社ファースト・オートメーションは一緒に働いて下さる仲間を絶賛募集中です!
- CADや機械図面の分析に興味がある
- 生成AIの社会実装に貢献したい
- 製造業をより良くしたい
といったことに少しでも興味がある方、ぜひ下記応募リンクからご連絡下さい!
Discussion