今回はIntel社のREALSENCE D435で撮影した映像でリアルタイムに物体検出する方法をまとめたいと思います。
おすすめ記事
目次
使用するカメラ Intel REALSENCE D435
今回、物体検出の対象となる映像を撮影するためのカメラデバイスはIntel REALSENCE D435を使用します。
D435で映像を取り込む方法については以下の記事で解説していますので、あわせてご覧ください。
Intel RealSense SDKを使ってPythonからD435にアクセスする方法
今回はIntel RealSense SDKを使ってPythonのプログラムからD435にアクセスする方法を解説します。Intel RealSense D435については以下の記事で解説していますので、あわ…
ポチップ
著:Sebastian Raschka, 著:Vahid Mirjalili, 著:株式会社クイープ, 著:福島 真太朗
¥3,960 (2024/09/19 15:03時点 | Amazon調べ)
ポチップ
機械学習ライブラリと学習済みモデル
今回は物体検出のための推論を行う機械学習ライブラリはPyTorch、学習済みモデルはYOLOv5という組み合わせで実装しました。PyTorchとYOLOv5を使った推論の実行方法は以下の記事で解説しています。
WindowsでPyTorchとYOLOv5で物体検出する方法
今回はWindowsでPyTorchとYOLOv5を使った物体検出を行う方法を解説していきます。また、Jetson NanoでYOLOv5を使う方法を以下の記事で解説していますので、あわせてご覧…
実装方法
今回は「Intel RealSense SDKを使ってPythonからD435にアクセスする方法」で公開しているプログラムに、PyTorchで推論するための関数を追加する形で実装しました。
以下が推論を実行するための関数です。
#Yoloを使った物体検出
def predict(img):
#推論を実行
result = model(img)
result.render()
#戻り値
return result.ims[0]
ポチップ
作成したソースコード
今回作成したソースコードは以下の通りです。
import pyrealsense2 as rs
import numpy as np
import cv2
import cv2
import torch
# Configure depth and color streams
pipeline = rs.pipeline()
config = rs.config()
config.enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30)
config.enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 30)
#YOLOのモデルをロード
model = torch.hub.load('ultralytics/yolov5', 'yolov5s')
#PyTorchを使った物体検出
def predict(img):
#推論を実行
result = model(img)
result.render()
#戻り値
return result.ims[0]
#メイン処理
def main():
# Start streaming
pipeline.start(config)
try:
while True:
# Wait for a coherent pair of frames: depth and color
frames = pipeline.wait_for_frames()
depth_frame = frames.get_depth_frame()
color_frame = frames.get_color_frame()
if not depth_frame or not color_frame:
continue
# Convert images to numpy arrays
depth_image = np.asanyarray(depth_frame.get_data())
color_image = np.asanyarray(color_frame.get_data())
#推論実行
color_image = predict(color_image)
# Apply colormap on depth image (image must be converted to 8-bit per pixel first)
depth_colormap = cv2.applyColorMap(cv2.convertScaleAbs(depth_image, alpha=0.03), cv2.COLORMAP_JET)
# Stack both images horizontally
images = np.hstack((color_image, depth_colormap))
# Show images
cv2.namedWindow('RealSense', cv2.WINDOW_AUTOSIZE)
cv2.imshow('RealSense', images)
cv2.waitKey(1)
finally:
# Stop streaming
pipeline.stop()
if __name__ == '__main__':
main()
著:Sebastian Raschka, 著:Vahid Mirjalili, 著:株式会社クイープ, 著:福島 真太朗
¥3,960 (2024/09/19 15:03時点 | Amazon調べ)
ポチップ
実行結果
プログラムを実行するとRGBとDepthカメラの映像が映し出され、自分の手をカメラの前にかざすとPersonと判別できました。
ぬいぐるみを映すとテディベアと判別できています。
まとめ
今回はIntel REALSENCE D435を使ったリアルタイム物体検出の方法について解説してみました。
PyTorchのおかげで非常に簡潔なコードで実装できています。次は検出したオブジェクトまでの距離を計測するプログラムを実装したいと思います。
ポチップ
機械学習を効率よく学びたい方には、自分のペースで動画で学べるUdemyの以下の講座がおすすめです。数学的な理論からPythonでの実装までを習得できます。(私自身もこの講座を受講しています)
【徹底的に解説!】人工知能・機械学習エンジニア養成講座(初級編~統計学から数字認識まで~)
それでは、また次の記事でお会いしましょう。
ポチップ
ポチップ
コメント