OpenCV(webcam制御と画面描画)とYOLOの組み合わせ

2024-01-25 日本語 raspi opencv yolo /posts/2024/2024-01-25-combine-yolo-and-opencv.png

前回のライブラリとopencvでウェブカメラを利用するコードの合わせ技で、リアルタイムに物体(またはポーズ)検出をできるようにしたサンプルです。(RaspberryPi4上で)かなり遅延は気になりますが、一応、動いてるのは分かる…という雰囲気で動作します。

一見簡単そうなのですが、RaspberryPi上にultralyticsを直接インストールできず、venvを使っている関係でライブラリの依存関係がややこしいです。imshowのエラーで悩まされましたが、cv2.namedWindowの後でYOLOライブラリをロードすることで何故か回避できています。

24.02.01 picamera2(ラズパイ標準のカメラ)を利用する場合のコード例をコメントとして追記しました。

import cv2
# from picamera2 import Picamera2

if __name__ == '__main__':
    cv2.namedWindow('find-on-video')
    cam = cv2.VideoCapture(0)
    # cam = Picamera2()
    # cam.start()

    from ultralytics import YOLO
    model = YOLO('yolov8n.pt')  # yolov8n-pose.pt for pose detection
    while True:
        ret, image = cam.read()
        # image = cam.capture_image("main")
        results = model(image)
        cv2.imshow('find-on-video',results[0].plot())
        k = cv2.waitKey(1)
        if k != -1:
            break

    cam.release()
    cv2.destroyAllWindows()
./venv/bin/python3 find-in-video.py

これまでの軌跡: