Switch2が発売されましたね〜。ちょっと興味あるものの、購入権があるのかどうか調べるのめんどくさくて放置してました。マイクラの映画も狙ってるけど、まだ行けてません。息子を誘うと「ネットで観られるようになってからでいいんじゃん?」とつれない返事(^^; 誰に似たんだか(間違いなく自分)。
上に載せてる画像は、VSCodeのCopilotにコードを生成してもらっているところです(いわゆるバイブコーディング?)。人間とのコミュニケーションと一緒で、最初はギクシャクするというか、何じゃこりゃ?という結果も戻りがちなんですが、やり取りを繰り返していくうちに何となくお互い気が合うようになる感じがするから不思議です。先日開催した Ruby on Rails ハンズオンの後半で試してみたものです。
下の画像は研修用に作ったPythonプログラムが保存した画像。画面に映っている「車」の数をカウントして、変化があった際にだけ画像を保存します。
プログラムは以下のような感じ。streak
という変数で、ノイズ(時々検出数が変化する現象)を除去していますが、ここはもう少し洗練された方法がありそうな気がしています。
import cv2, numpy, math, os, time
storage = os.path.expanduser('~/carpool/storage')
if not os.path.exists(storage):
os.makedirs(storage)
cam = cv2.VideoCapture(0)
from ultralytics import YOLO
model = YOLO('yolo11n_ncnn_model')
n_cars_prev, n_cars_now, streak = 0, 0, 0
# 物体検出を行い、車の数をカウントする
while True:
ret, image = cam.read()
results = model(image, verbose=False)
boxes = results[0].boxes
font = cv2.FONT_HERSHEY_SIMPLEX
n_cars = 0
for b in boxes:
pt1 = (int(b.xyxy[0][0]),int(b.xyxy[0][1]))
pt2 = (int(b.xyxy[0][2]),int(b.xyxy[0][3]))
# 車は青の矩形で囲む、それ以外の物体はグレーの矩形で囲む
if b.cls == 2:
n_cars += 1
cv2.rectangle(image,pt1,pt2,(255,0,0),1)
else:
cv2.rectangle(image,pt1,pt2,(128,128,128),1)
m = "%d cars" % (n_cars)
cv2.putText(image,m,(10,460),font,1,(0,255,0),3,cv2.LINE_AA)
if n_cars == n_cars_now:
streak += 1
else:
streak = 0
n_cars_now = n_cars
if streak > 10 and n_cars_now != n_cars_prev:
f = "%s-%d.jpg" % (time.strftime('%y%m%d%H%M%S'), n_cars_now)
filename = os.path.join(storage, f)
cv2.imwrite(filename, image)
print("%d -> %d: Saved image to %s" % (n_cars_prev, n_cars_now, filename))
n_cars_prev = n_cars_now
cam.release()
続けてこちらも別の研修の提案資料として作ってみた画像。といってもGeminiに一言お願いしただけですが。
これ、5歳の息子とやっても盛り上がったりして、楽しめます。物心ついた頃から周囲にAIがいる子たちの世界観ってどうなっていくんだろうなぁ、と想像しています。著作権が〜情報漏洩が〜といって色々リスクを心配したくなる親心も理解できますが、何もしないリスクとどっちが大きいだろう?と感じます。といってどこに進めばいいか何を教えればいいかもよく分かんないので、とにかく今は皆んなで色々遊んでみるのが結局一番なのでは?