🦾

ロボットアームで油絵を描き、俺は画家になる!!!

2024/03/20に公開

TL;DR

  • geminiから生成したスタイル変換画像を元に、ロボットアームで絵を描かせたよ
  • 現在(03/18)、東京ai技術大合戦(ハッカソン)にて、ファイナルまで進出したよ

https://youtu.be/B4mbg4YEaI8?si=LKxNvd1jeNFs1orf
https://github.com/Bucchiman/Ro8arm_picture

0. はじめに

はじめまして、8ucchimanと申します。
ロボットやデバイスを使って、物理的に何かものを作ることが大好きなエンジニアです。
先日、東京AI技術大合戦(ハッカソン)に参加し、2週間の期間(02/23~03/08)でAIにまつわるプロダクト作成を行いました。
私は、長年やりたかったrobot armに油絵を描かせるプロジェクトをついに始めました。
https://www.aisai.tokyo/hanckthon-page

1. 背景

近年では、生成AIが猛威を振るっていますね。chatgptgemini、最近では、openaiのsoraが話題になりましたね。ハッカソンの期間中に新たに、claude aiが登場しました。エンジニアとしては、いつ我々の職が奪われるか戦々恐々としている今日この頃です。
一方で、私としては、何か物足りなさを感じます。PCの画面上で画像や動画が生成されるだけでは、儚く、虚しい思いをします。私としては、実物として手元に作品があって人生の豊かさを感じるのではと思います。しかし、私は、画家ではありません。
そこで今回は、生成AIから生成されたスタイル変換画像をもとに、RoBot arm(Ro8arm)で実際に、油絵を描いてみました。

2. 手法

2.1. 前準備

今回は、2週間の開発期間を考慮し、全自動化することはせず、Ro8armと8ucchimanの共同制作となります。
絵を描く際に、下図のような工程があります。その内、Ro8armは、赤色の部分のキャンバスに絵の具を塗るところのみを行いました。その他の緑色の機能は、私、8ucchimanが行いました。
control

また、geminiから生成した画像ですが、ゴッホ風のスタイル変換の富士山を対象として絵を描きました。

対象の画像(geminiから生成)

下の図のように、robot armの先についている筆とキャンバスの接するところのサーボモータの角度を調べて、リスト化しています。

4軸のサーボモータの角度を調整して描写範囲を調べている様子


描写範囲と富士山の輪郭を重ねた画像

2.2. 描き方

以下の3点について説明します。

  • 領域分割
  • 各領域を塗る順番
  • 重ね塗り

2.2.1. 領域分割

富士山のサンプル画像をもとに絵を描く際、多くの人はまず、富士山と空に分けて、絵を描くでしょう。
さらに、富士山は、だいたい麓、雪の箇所(冠雪)、山頂あたりの影の部分に分けられるだろうと予想がつくはずです。
今回は、麓の色を山全体のベースの色として、その上に冠雪の色、山頂の影の部分の色を重ね塗りしています。
また、山と空の境界線として赤色が塗られていることもわかるでしょう。
まとめると、以下のように領域に分割できます。

  • 富士山
    • 麓(山全体のベースの色)
    • 雪の箇所
    • 山頂あたりの影の部分
  • 山と空の境界線

2.2.2. 各領域を塗る順番

領域を分けたので、次に塗る順番を決めます。
今回は、下図のような(ⅰ)~(ⅴ)の順番で色を塗りました。

領域の塗る順番

2.2.3. 重ね塗り

私は、油絵初心者なので1度、絵の具をキャンバスに塗り込めば良いと思ったのですが、実際は、なかなかキャンバスに絵の具がなじまず、苦労しました。

一回目に絵の具を塗り込んだキャンバスの様子

この時は、ハッカソンまでにまともな成果物ができるかなと、かなり不安になったのを覚えています。
しかし、油絵について調べると、油絵とはそもそも絵の具を重ね塗りすることで、下地の色と混ざり合い、味のある絵に変わっていくことがわかりました。
そこで、分割した領域をそれぞれ3~4回重ね塗りしました。
これは効果があり、下地の色と新たに上塗りした色が上手くなじみ、だんだんとそれらしい富士山になっていきました。

重ね塗りにより下地の色となじませる様子

3. 成果物

期日の3時間前まで絵を粘り強く描いていました。
下図の中央の絵が実際にRo8armによって描かれたものです。
左の絵は、私が描きました。
厳密には、Ro8armがはじめに絵を描いたのですが、上手く描けなかったため、その上に私が実際に絵を描いたものになります。

4. 課題点

ここまで、読むと、いろいろなツッコミどころがあると思います。
そもそもキャンバスに絵の具を塗る部分のみをRo8armに担当させ、それ以外は私が行なったので、自動化とは程遠いものです。
また、描き方も私が勝手に決めているので、他の画像では、応用できないという課題があります。
ただ、今回のハッカソンは、スクラッチからプロダクト作成という条件でした。
こうしたことも考慮して、今まで人間が絵を描く際に辿る工程のうち、ほんの一部分だけでもRobot armが担当すれば、十分な成果だと私は考えていました。
今回のハッカソンで、人間らしい絵をRobot armに描かせる上で、多くの課題点が見つかりました。
ここでは、そのうちの一つを紹介します。

4.1. 微妙な色の濃淡

成果物の画像を見るとなんとなく上手く描けているようには見えても、近くで見ると人間が描いた作品とはかなり異なります。特に、微妙な色の濃淡はRo8armでは、再現できていません。
下図のように人間が描いた絵(中央)やoriginalの画像(右)は一部分を切り取ると色の濃淡が見られる一方、Ro8armの絵(左)は、均質な色になってしまっています。

Ro8arm(左)、人間(中央)、Original(右)の部分的な領域の色の濃淡

Ro8armでは、分割した各領域について、サーボモータの角度を1度ずつ変えながら色を塗っています。
これにより、隣り合うとだいたい同じ色になってしまい色の濃淡が出せなかったと言えます。

詳細な色の塗り方

5. 今後の予定

今後の予定は、3点あります。

  • 全自動化(今回私が担当した工程)
    • 色の配合
    • 筆に絵の具を足す
    • 筆を洗う
  • 他の画像への応用
  • 描き方のアルゴリズム改善

6. まとめ

今週末、3月24日は、東京ai技術大合戦(ハッカソン)のファイナルデモデーです。私は、ファイナルに進出したので、登壇し、成果物の発表を行います。少しでも興味のある方、特にモノづくりが好きな方は、他の発表者の成果物の話も聞けるのでぜひ参加してみてはいかがでしょうか。
https://www.aisai.tokyo/hanckthon-page

Discussion