KASAです
前回のボットは文章でしたが、今回は絵?です。
最近はAIに「○○の絵を××風に」っていうとちゃんと要望通りに書いてくれるものが幾つも発表されていて驚いています。
タッチや構図をどうやって学習させるのか興味がありますね。
さて、絵についてはPythonを使ってなら画像を水彩画風とかポップな感じに補正とかして遊んだことがあるのですが、このブログでは、基本的には見てる方が手軽に試せることをモットーとしていますんで(誰か知っているのかw)
Pythonは諦め、Excelで何かできないか考えました。
Pythonでやった内容をExcelで実装しようと考えたのですが結構めんどくさい。
Pythonは繰り返し文や配列演算に相当する処理がめっちゃ強力で通常十数行くらい必要な処理を1行で書けたりしますし、OpenCVを使えばいろんな画像フィルタが用意されていて数十行で立派なプログラムが作れます。
頑張ればVBAでもOpenCVを使えるようですので気が向いたらやってみたいと思います。
色々試してみましたが、なかなか面白いものができないので「花火?」でも書いてみることにしました。
何故「花火」かというととっても乱数を使いやすいからです。
AIチックにしたいとなると同じことを繰り返さないように考える必要がありますが、その辺を一番簡単にやってくれるのが乱数です。
文章の際もRnd関数のおかげで名(迷)文が生まれましたねw。
花火はどれも似ていますが、同じものは有りません。
その辺を乱数で表現したいと思います。
今回の花火は計算が面倒なので丸ではなく四角いですw
その辺はご愛敬ということで
シートのマスを正方形になるよう幅を調整します。(Excel方眼紙ってやつです)
開発タブの挿入から「ボタン」を選びシートの左上に大きめに(ココ重要)貼り付けます。
そのボタンのアクションとして以下の処理を書き込み(貼り付け)ましょう。(上の5行もお忘れなく)
#If Win64 Then
Private Declare PtrSafe Sub Sleep Lib “kernel32” (ByVal dwMilliseconds As LongPtr)
#Else
Private Declare Sub Sleep Lib “kernel32” (ByVal dwMilliseconds As Long)
#End If
Sub ボタン1_Click()
Dim STP_S As Integer
Dim ON_OFF As Integer
Dim STP As Integer
Dim YP As Integer
Dim XP As Integer
Dim SZ As Integer
Dim S As Integer
Dim R As Integer
Dim G As Integer
Dim B As Integer
Dim MAX_SZ As Integer
Dim TOP_Y As Integer
Dim LFT_X As Integer
MAX_SZ = Cells(1, 1)
TOP_Y = Cells(1, 2)
LFT_X = Cells(1, 3)
If MAX_SZ <> 0 Then
‘前回の花火を消します
For SZ = 1 To MAX_SZ
YP = TOP_Y – SZ
XP = LFT_X – SZ
If YP <= 0 Then
YP = 1
End If
If XP <= 0 Then
XP = 1
End If
For S = 0 To SZ * 2
Cells(YP + S, XP).Interior.Color = RGB(0, 0, 0)
Cells(YP + S, XP + SZ * 2).Interior.Color = RGB(0, 0, 0)
Cells(YP, XP + S).Interior.Color = RGB(0, 0, 0)
Cells(YP + SZ * 2, XP + S).Interior.Color = RGB(0, 0, 5)
Next S
Next SZ
Else
‘夜にします
For Y = 1 To 128
For X = 1 To 128
Cells(Y, X).Interior.Color = RGB(0, 0, 0)
Next X
Next Y
End If
‘ここで花火の特徴(形)を決めます
MAX_SZ = Rnd() * 30
TOP_Y = Rnd() * 50 + MAX_SZ
LFT_X = Rnd() * 50 + MAX_SZ
STP_S = Rnd() * 10
Cells(1, 1) = MAX_SZ
Cells(1, 2) = TOP_Y
Cells(1, 3) = LFT_X
ON_OFF = MAX_SZ
‘打ち上げ中
For YP = 120 To TOP_Y Step -5
‘1点の色を決めます
R = Rnd() * 250
G = Rnd() * 250
B = Rnd() * 250
Cells(YP, LFT_X).Interior.Color = RGB(R, G, B)
Sleep (200)
Cells(YP, LFT_X).Interior.Color = RGB(0, 0, 0)
Next YP
‘花火本体
For SZ = 1 To MAX_SZ
YP = TOP_Y – SZ
XP = LFT_X – SZ
If Rnd() * MAX_SZ > SZ Then
STP = STP_S
Else
STP = 0
End If
For S = 0 To SZ * 2
If Rnd() * ON_OFF – STP > SZ Then
‘1点の色を決めます
R = Rnd() * 250
G = Rnd() * 250
B = Rnd() * 250
Cells(YP + S, XP).Interior.Color = RGB(R, G, B)
End If
If Rnd() * ON_OFF – STP > SZ Then
‘1点の色を決めます
R = Rnd() * 250
G = Rnd() * 250
B = Rnd() * 250
Cells(YP + S, XP + SZ * 2).Interior.Color = RGB(R, G, B)
End If
If Rnd() * ON_OFF – STP > SZ Then
‘1点の色を決めます
R = Rnd() * 250
G = Rnd() * 250
B = Rnd() * 250
Cells(YP, XP + S).Interior.Color = RGB(R, G, B)
End If
If Rnd() * ON_OFF – STP > SZ Then
‘1点の色を決めます
R = Rnd() * 250
G = Rnd() * 250
B = Rnd() * 250
Cells(YP + SZ * 2, XP + S).Interior.Color = RGB(R, G, B)
End If
Next S
Next SZ
End Sub
ボタンのテキストを「ボタン1」ではなく「発射」とかにすると雰囲気が出るかもしれません
完成したらシートの表示倍率を30%くらいにしてボタンを押してください。
ボタンを大きくする理由はここで30%にしても押せるサイズが必要だからです。
そうするとシートの一部(左上)に夜が訪れ1発の四角い花火が上がったと思います。
(たまにスカもありますのでw)
もう一回ボタンを押すと見えていた花火が消えてもう1発花火が上がります。
「これのどこが人口無能(AI)やねん」と突っ込まれそうですが、この程度でAIと名乗っているものは世の中に五万とあります。
今回の乱数を使って変化させている部分を条件と考えて、特定の値を入力すればある形の花火を書くことができます。
うーんこじつけくさいですね
まあ深いことは置いといて、夏の終わりにあなただけの花火をExcelで上げてください。
玉屋~、鍵屋~
弊社では人材を募集しております
「俺ならこんな四角じゃなく丸いのを上げてやるぜ」という気合の入ったあなたのご応募お待ちしてます。
▼この記事がいいね!と思ったらブックマークお願いします