ChatGPT の画像読み取りの事例：DIY設計図

# はじめに
本記事ではChatGPTの設計図の画像読み込み事例を共有します。趣味のDIYのモノづくりで設計図を描いていますので、これをChatGPTに設計図を読み込ませ、読み込ませた結果を基に材料計算を行い、お買い物リストを作成するという内容となります。

これまでChatGPTの活用イメージが湧かず使いこなせていませんでしたが、簡単な活用例を示し、今後の展開への期待を込めて共有します。

# 背景
私はものづくり趣味でDIYに取り組んでいますが、設計図作成、材料計算、調達などの準備作業に多くの時間を取られていました。休日の限られた時間を効率的に使うため、これらの間接作業をChatGPTに代替してもらえないかと考え、ChatGPTを試してみました。

# やりたいこと
- DIYの設計図から必要な材料のお買い物リストを作成する
- 材料の仕様や本数を自動計算し、リストを見て買うだけの状態にする

# 環境
- ChatGPT4o

# 1. 図面を用意する
まずChatGPTがどのように図面を認識するのかを確認します。
以下は倉庫の板扉を作るための設計図です。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938959/821675bb-1fc9-7799-62c0-747b704b7f52.jpeg" width=100%>

# 2. 図面の認識を確認する
この図面をChatGPTにアップロードし「これは何か？」と質問してみました。
設計図と認識してくれるでしょうか。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938959/9aaa707b-4073-29be-78fc-de0fb5693d98.jpeg" width=50%><br>
結果、ChatGPTは設計図と認識して、次のように回答しました。

- 木製のドアの設計図
- 全体のサイズや個別仕様の数字を提示

素人のつたない図ですが、記載を読み取り設計図の認識を持ってくれているようです。

# 3. 材料の認識を確認する
次に材料をリストアップするために図面から個別項目を読み取ってもらいました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938959/4d6c6806-aba1-fd4b-fe47-15c156d47aab.jpeg" width=50%>

読み取った内容は以下の通りです。
- 木材の本数を認識
- 木材の長さを認識
- ヒンジ
- 製作に必要と予想されるビスやネジを提示

下２点は設計図に描いていないポイントなのですが今回はスルーします。側面図に金具（ヒンジ）は描いていないですし、図面にはビスやネジを描いていません。

# 4. 購入すべき木材の材料計算
一般的なホームセンターで入手可能なサイズは最大で12F（約3657mm）のことが多いので、1×4木材の12F材を購入する前提で購入本数を計算するよう指示しました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938959/68a80eb9-d526-881d-92a3-b434965de4cc.jpeg" width=50%>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938959/9dcf8d28-3d58-9e6a-3b2b-efbc2b9a389b.jpeg" width=50%>

この段階で問題が発生しました。ChatGPTでは購入本数を11本と回答しているのですが、実際に材料を切り出して使う場合、11本では足りなくなります。

もし実際にこの本数で購入した場合、12Fから必要な1875mmを切り出し後、切り出した後の材は約1782mmとなるので、11本しか切り出すことができず。残りの7本については、切り出した後の材（約1782mm)を93mmの材と繋げて1875mmを作ることになります。これは現実的な方法ではありません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938959/4daab01d-72fc-adab-0132-19dc56cd9f69.png)


# 5. 指示の修正～買い物リスト追加
木材を繋げることなく必要な長さを切り出す前提で、指示を修正しました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938959/99247a39-1f55-17c5-424e-187614d2e5b1.jpeg" width=50%>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938959/d8acc1cf-9622-c5c6-4f54-1bc7537744a0.jpeg" width=50%>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938959/20bc85f9-a703-e37b-f8d5-4115a7cbedb8.jpeg" width=50%>

結果、先ほどの11本ではなく18本と購入する必要があるという回答になりました。
この必要本数を買い物リストに追加するよう指示して完了となります。

# 6. 小括

- 確認できたこと
    - 設計図を概ね正しく認識できる
    - 補助線やコメントから仕様を理解している
    - 段階を踏んで買い物リストが作成できる
    - 必要な材料を正確に計算しリストアップ可能
- 気を付けること
    - 想定していない前提で計算されることを防ぐため、前提を明確にすることが必要

# 7. 追加検証
今回の図面には、横材を1x4木材x8本と記載しています。しかし正面図に横材は4本しか見えていません。

私の意図としては、側面図も記載したことで、正面図は裏面図を兼ねることを言いたかったのですが、ChatGPTは認識してくれていたのでしょうか？

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938959/821675bb-1fc9-7799-62c0-747b704b7f52.jpeg" width=100%>

### 木材の重なりを正しく認識しているか
正面図は裏面図を兼ねる意図が伝わっているのかについて、木材の厚みを聞いてみます。伝えたい構造は、横材2本が縦材1本をサンドイッチしている構造ですので、19mmx3本で57mmと回答してくれれば、想定通りとなります。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938959/ffcc8a35-4dfa-8037-13be-c70ade69a0eb.jpeg" width=50%>

しかし回答を見ると縦材と横材が重なることは認識しているようですが、最大の厚みを38mmとしているので、側面図を考慮していない様子であることがわかります。

### 前提の追加説明
側面図の意図をわかってもらうため、側面図を考慮するよう追加質問をしてみます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938959/46e62234-526d-d3e8-10aa-c1c5644adb35.jpeg" width=50%>

結果は38mmのままでした。側面図を考慮してほしいとする指示文からは、正面図は裏面図を兼ねる意図を認識していないようです。正面図/裏面図と図面に記載することで考慮してくれるかもしれません。試しに正面図が裏面も兼ねることを前提として与えてみます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938959/da9a273e-bd52-5fb5-ae4a-910436de9916.jpeg" width=50%>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938959/d49c52e9-c1f8-e84c-1da0-9ade66b5a370.jpeg" width=50%>

結果は厚さ58mmと欲しい回答になりました。

しかし、その一方で気になることもさらに出てきました。回答を見ると縦材と横材のフレーム部分＋反対側の縦材という認識のようです。なぜ裏面図から縦材を読み取ったのか、どういったフレーム構造を認識しているのかが、今回はこれ以上触れず、今後の検証としたいと思います

# まとめ
- 図面は概ね正しく認識できる
- 段階的に指示を出すことで、図面から買い物リストを作成できる
- 結論を出すまでの計算過程や必要な前提認識が、自分とChatGPTとで合っているのか気を付ける必要がある

# 今後
- 効率的な材料取りのため、図面の方を変えるよう提案してくれるのか検証したい。例えば、長い方の材を1875mm→1825mm程度に変更すれば、購入する本数が減りますよといった提案をしたり、図面を直してくれるような学習をさせることは可能だろうかと思った
- 方眼紙１マス38mmとみなす独自の記載ルールを与えたとき、材木仕様の記載なしで図面からから1x4材, 2x4材を認識してくれるか検証してみたい
- 読み取った図面の情報から木材カットサービスの入力フォームに対して、自動連携や発注ができるか検証してみたい

# 感想
ChatGPTは書かれている数字、文字について、図面や記号が指示している先と関連付けておよそ正しく認識してくれます。しかし、計算方法や側面図から裏面図を読み取らせるなど、人間が何気なく省略しまう事に起因する想定外の結果も出てしまいました。

この省略による結果のブレについて、２つの方向性、

- 融通が利くようChatGPTを特定の作業用に学習させる
- ChatGPTに合わせて人間の指示を変える

といった方向性で考えたとき、人間が汎用的にChatGPTを活用するため、後者を基本リテラシーとしながら、前者を育てていく進め方になるのだろうと感じました。

様々な作業を１日も早くAIで代替してもらい、私たちの生活が余暇にあふれ、精神的、物質的に豊かにしてもらうためにも、自分たちの仕事をAIに説明できるようにして、育てていく、そんな心持ちでも日々の業務に取り組んでいこうと思いました。