OpenCV/ArUcoã©ã€ããã©ãªãŠãç©äœäœçœ®èšæž¬
OpenCVã¯ç»ååŠçã«è§Šããããšã®ãã人ãªãã°ç¥ããªã人ã¯ããªããšèšãããã»ã©æåãªã©ã€ãã©ãªã§ãããæ¬æ¥ã¯ãã®ã¢ãžã¥ãŒã«ã®äžã€ã§ãããARçšã©ã€ãã©ãªArUcoãçšããŠãç©äœã®äœçœ®èšæž¬ãããŠã¿ãŸãã ãããã«ã¯C++ã®èšäºããããã転ãã£ãŠããã®ã§ãããPythonãçšããèšäºãå°ãªãããã«æãããããåå¿é²ãšããŠããã°ã«æ®ãããšæã£ã次第ã§ãã ããããããš æºã®äžã«åº§æšç³»ãèšå®ãïŒæšªã®èŸºã$x$軞ã瞊ã®èŸºã$y$軞ãšãïŒãæºã®äžãåãåãç©äœïŒå°åãããããšãïŒã®äœçœ®åº§æšããæºãæ®åœ±ããã«ã¡ã©ã®æ åããæšå®ãããã§ãã æºå PCã«Pythonã¯ã€ã³ã¹ããŒã«ãããŠãããšããOpenCVã®ã€ã³ã¹ããŒã«ããè¡ããŸãã pip install opencv-contrib-python åäœç¢ºèªãè¡ããŸãããã import cv2 aruco = cv2.aruco help(aruco) ããã£ãœãæç« ããã¡ããã¡ãåºãŠããããã€ã³ã¹ããŒã«æåã§ãã ããŒã«ãŒçæ ArUcoã§ã¯ãQRã³ãŒãã®ãããª2次å ããŒã«ãŒãçæããç»åäžããçæãããããŒã«ãŒãèªèããããšãã§ããŸãã ç»åã®çæã¯ä»¥äžã®ããã«è¡ããŸãã dictionary = aruco.getPredefinedDictionary(aruco.DICT_4X4_50) for i in range(5): marker = aruco.drawMarker(dictionary, i+1, 100) cv2.imwrite('ar_marker'+str(i+1)+'.png', marker) ããã§ãgetPredefinedDictionaryã¯ããŒã«ãŒãæ ŒçŽãããŠããèŸæžãåŒã³åºãé¢æ°ã§ãããDICT_4X4_50ã¯èŸæžã®çš®é¡ãè¡šããŸãã ãŸããforã«ãŒãã®äžã§ã¯ãdrawMarkerã§idã$i+1$ã®ããŒã«ãŒãåŒã³åºããimwriteã§åŒã³åºããããŒã«ãŒãä¿åããŠããŸãã çæãããç»åã¯ã€ãã®ããã«ãªããŸãã ä»åããŒã«ãŒã¯5ã€åŒã³åºããŸããã 1ã€ã¯ç©äœã«èšçœ®ããèªèããããã®ãã®ã§ãæ®ãã®4ã€ã¯åº§æšå€æã®ããã®ãã®ã§ãã ããŒã«ãŒæ€åº ç»åäžã®ããŒã«ãŒãæ€åºããããã®ã³ãŒãã以äžã§ãã img = cv2.imread('img.jpg') corners, ids, rejectedImgPoints = aruco.detectMarkers(img, dictionary) img_marked = aruco.drawDetectedMarkers(img, corners, ids) cv2.imwrite('img_marked.png', img_marked) detectMarkersã§ãç»åããããŒã«ãŒãèªèããŸãïŒãã£ãäžè¡ïŒïŒã æ»ãå€ã§ããcornersãšidsã¯ãããããæ€åºãããããŒã«ãŒã®åº§æšãšidãæ ŒçŽããããªã¹ãã§ãã å ã»ã©çæãããç»åãã¢ãã¿ã«è¡šç€ºãããæå ã®ã«ã¡ã©ã§æ®åœ±ãããã®ãèªèãããŠã¿ãŸããã çµæãã€ãã®ããã«ãªããŸãã 座æšå€æ ArUcoã§ã¯ãç»åäžã®ããŒã«ãŒã®äœçœ®ãæ€åºããããšãã§ããŸããããã®äœçœ®åº§æšã¯æºã®äžã®åº§æšãšå¿ ãããäžèŽããŸããã ãã®ãããæºã®äžã«åº§æšå€æçšã®ããŒã«ãŒãèšçœ®ããããããçšããŠåº§æšå€æãè¡ãããšã«ããŸãã ãã®äœæ¥ã¯ãArUcoã§ã¯ãªããOpenCVã©ã€ãã©ãªã«ãã£ãŠå®çŸã§ããŸãã ...