概要
画像系の機械学習を利用していると画像中の座標を取得したい場面が出てきます。
そこでPythonを用いたいくつかの手法について紹介したいと思います。
opencv
opencvのマウスイベントを活用してクリックした座標を取得します。
import cv2
def run():
def mouse_event(event,x,y, flags, param):
if event == cv2.EVENT_LBUTTONUP:
points.append([x,y])
print(x,y)
cv2.circle(img, (x,y), 5, (255,0,0), -1)
img = cv2.imread("<image_path>")
points = []
cv2.namedWindow("window", cv2.WINDOW_KEEPRATIO)
cv2.setMouseCallback("window", mouse_event)
while True:
cv2.imshow("window", img)
if cv2.waitKey(1) & 0xFF == ord("z"):
break
cv2.destroyAllWindows()
if __name__ =="__main__":
print("hello")
run()
streamlit-drawable-canvas
streamlitの拡張であるstreamlit-drawable-canvasを活用します。
これは、webアプリ上で座標・線などを設定することができるもので、背景の画像の設定も可能です。
詳しくはこちらのデモがわかりやすいです。
何に使えそう?
物体検出のアノテーション
物体検出では、画像中のどこに物体が存在しているかをセットで学習します。そのため座標を取得してアノテーションを行います(イメージ:picacaのライブより)
見守りシステム
人物の検出をした際に危険な場所にいないか、転倒の検知への活用が考えられます。例えば、ベッドの範囲をあらかじめ取得しておくことでその範囲外で人を検知した場合に転倒の可能性があるためアラートを送信するなどのユースケースがあると思います。