数カ月前に作ったArUcoアプリを再稼働させたところ
AttributeError: module 'cv2.aruco' has no attribute 'detectMarkers'
などというエラーが。
……何もしてないのに壊れた??
これ、何のことはなく、別のプロジェクトでOpenCVをアップデートした事が原因でした。
4.7.X系からdetectmarkersメソッドからdetectメソッドを使うように変わったそうです。
実際のところ
非推奨……というかエラーを吐いた原因であるdetectMarkersメソッドを使ったバージョンが以下の時
import cv2 import numpy as np import sys aruco = cv2.aruco dictionary = aruco.getPredefinedDictionary(aruco.DICT_4X4_50) stdin = sys.stdin.buffer.read() array = np.frombuffer(stdin, dtype="uint8") img_src = cv2.imdecode(array, 1) corners, ids, rejectedImgPoints = aruco.detectMarkers(img_src, dictionary) if ids is not None: img_src = aruco.drawDetectedMarkers(img_src, corners, ids) cv2.imshow("Image with detected ArUco markers", img_src) cv2.waitKey(0) cv2.destroyAllWindows()
detectメソッド使って書き換えると
import cv2 import numpy as np import sys aruco = cv2.aruco dictionary = aruco.getPredefinedDictionary(aruco.DICT_4X4_50) stdin = sys.stdin.buffer.read() array = np.frombuffer(stdin, dtype="uint8") img_src = cv2.imdecode(array, 1) parameters = aruco.DetectorParameters_create() corners, ids, rejectedImgPoints = aruco.detect(img_src, dictionary, parameters=parameters) if ids is not None: img_src = aruco.drawDetectedMarkers(img_src, corners, ids) cv2.imshow("Image with detected ArUco markers", img_src) cv2.waitKey(0) cv2.destroyAllWindows()