OpenCVを使用した物体検出の基本


  1. Haar Cascadeを使用した物体検出: Haar Cascadeは、画像内の特定のパターンやオブジェクトを検出するための一般的な手法です。以下は、OpenCVを使用してHaar Cascadeを使用した物体検出を行う基本的なコード例です。

    import cv2
    # Haar Cascadeの読み込み
    cascade = cv2.CascadeClassifier('path/to/haarcascade.xml')
    # 画像の読み込み
    image = cv2.imread('path/to/image.jpg')
    # 物体検出の実行
    objects = cascade.detectMultiScale(image, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
    # 検出された物体の座標を表示
    for (x, y, w, h) in objects:
       cv2.rectangle(image, (x, y), (x+w, y+h), (255, 0, 0), 2)
    # 結果の表示
    cv2.imshow('Objects Detected', image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
  2. TensorFlowを使用した物体検出: OpenCVだけでなく、TensorFlowを使用して物体検出を行うこともできます。以下は、TensorFlow Object Detection APIを使用した物体検出のコード例です。

    import cv2
    import tensorflow as tf
    from object_detection.utils import label_map_util
    from object_detection.utils import visualization_utils as viz_utils
    # モデルとラベルの読み込み
    model_path = 'path/to/model.pb'
    label_map_path = 'path/to/label_map.pbtxt'
    category_index = label_map_util.create_category_index_from_labelmap(label_map_path)
    # モデルの読み込み
    detection_model = tf.saved_model.load(model_path)
    # 画像の読み込み
    image = cv2.imread('path/to/image.jpg')
    # 物体検出の実行
    input_tensor = tf.convert_to_tensor(image)
    input_tensor = input_tensor[tf.newaxis, ...]
    detections = detection_model(input_tensor)
    # 検出結果の可視化
    viz_utils.visualize_boxes_and_labels_on_image_array(
       image,
       detections['detection_boxes'][0].numpy(),
       detections['detection_classes'][0].numpy().astype(int),
       detections['detection_scores'][0].numpy(),
       category_index,
       use_normalized_coordinates=True,
       max_boxes_to_draw=200,
       min_score_thresh=0.5,
       agnostic_mode=False)
    # 結果の表示
    cv2.imshow('Objects Detected', image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()