はじめに
前回マイクラ内に任意の画像をピクセルアート化するプログラムを作成しました。
そこで今回は描画する対象をカメラ映像に置き換えて、カメラ映像をリアルタイムでマイクラ内に再現しようと思います。
開発環境
Windows 11
Mincraft JE 1.12.2
Forge 1.12.2
Raspberry Jam Mod 0.92
Python 3.9.9
カメラ映像の取り込み
自分のPCにはカメラが付いていないため、Android端末をつないでその映像を取り込みます。
Androidカメラ映像の取り込みはDroidCamAppを使いました。
マイクラへの映像受け渡し
映像の取り込みはOpenCVのVideoCaptureを使います。取り込んだ映像の1フレームは1枚の画像となるため、それをマイクラのピクセルアート化プログラムに渡し、マイクラ内で描画します。
import cv2
#カメラの起動
camera = cv2.VideoCapture(1)
while True:
ret, frame = camera.read() # フレームを取得
frame = Image.fromarray(frame) #pillowで操作できるように変換
#各ピクセルに対応したマイクラ内ブロックに変換
im = pic2map.resize_picture(frame, map_size, brightness)
im_color = pic2map.to_color(im, color_convertor)
im = np.array(pic2map.patting(im_color))
#ブロックの配置
for i in range(map_size):
for j in range(map_size):
#余白は白のウール
if im[i,j] == 255:
mc.setBlock(corner[0] + j, corner[1], corner[2] + i, block.WOOL.id, 0)
#ウールなどブロックidと種類idを持つブロックの設置
elif im[i, j] > 1000:
id1, id2 = divmod(im[i, j], 100)
mc.setBlock(corner[0] + j, corner[1], corner[2] + i, int(id1), int(id2))
#その他ブロックの設置
else:
mc.setBlock(corner[0] + j, corner[1], corner[2] + i, int(im[i, j]))
#qの入力で終了
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 撮影用オブジェクトとウィンドウの解放
camera.release()
cv2.destroyAllWindows()
結果
以下のようにカメラので取り込んだ映像をマイクラ内でピクセルアート化することができました。
終わりに
カメラ映像をリアルタイムでマイクラ内に描画するプログラムを作成しました。以前に作った任意の画像をマイクラ内にピクセルアート化するプログラムを流用できたため、その画像をカメラで取り込んだに置き換えるだけで完成しました。これにより短時間でできました。機能を小分けにして汎用性を高める便利さを感じました。