diff --git a/Code/Ball_Detection/PyTorch_with_ESPCAM/imageTread_AT.py b/Code/Ball_Detection/PyTorch_with_ESPCAM/imageTread_AT.py index c18e194f3184ffa653cae7e35edf256a7310ea70..7130fad4dfd7f0f8ea26f3f23f8ccaeeda05d550 100644 --- a/Code/Ball_Detection/PyTorch_with_ESPCAM/imageTread_AT.py +++ b/Code/Ball_Detection/PyTorch_with_ESPCAM/imageTread_AT.py @@ -3,14 +3,15 @@ from urllib.request import urlopen, Request import numpy as np import time -import apriltag - +# import apriltag +from pupil_apriltags import Detector def nothing(x): pass -detector = apriltag.Detector() +# detector = apriltag.Detector() +detector = Detector() if __name__ == "__main__": @@ -19,11 +20,12 @@ if __name__ == "__main__": # url='http://192.168.4.1/cam-hi.jpg' # url='http://192.168.1.107/cam-hi.jpg' url='http://192.168.4.1/cam-mid.jpg' + url = 'http://192.168.1.118/cam-hi.jpg' # cv2.namedWindow("live transmission", cv2.WINDOW_AUTOSIZE) - cv2.namedWindow("live transmission", cv2.WINDOW_NORMAL) + # cv2.namedWindow("live transmission", cv2.WINDOW_NORMAL) while True: header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36."} @@ -36,7 +38,30 @@ if __name__ == "__main__": #print(len(gray_image.shape)) h,w,_ = frame.shape - results = detector.detect(gray_image ) + """ + If you also want to extract the tag pose, estimate_tag_pose should be set to True + and camera_params ([fx, fy, cx, cy]) + and tag_size (in meters) should be supplied. + The detect method returns a list of Detection objects each having + the following attributes + (note that the ones with an asterisks are computed only if estimate_tag_pose=True): + """ + + """ + So fx and fy are the focal lengths expressed in pixels. + Cx and Cy describe the coordinates of the so called principal + point that should be in the center of the image. + It is e.g. not in the center of the image if you cropped the image, + what you should never do when calibrating. + + fx, fy, cx, cy are given in Pixels in Computer Vision ( and openCV) + but e.g. in Photogrammetry you often use mm + """ + fx = 600 + fy = 800 + cx = 0 + cy = 0 + results = detector.detect(gray_image,estimate_tag_pose=True,camera_params=[fx, fy, cx, cy],tag_size=0.16) # loop over the AprilTag detection results for r in results: @@ -47,6 +72,8 @@ if __name__ == "__main__": ptC = (int(ptC[0]), int(ptC[1])) ptD = (int(ptD[0]), int(ptD[1])) ptA = (int(ptA[0]), int(ptA[1])) + tx,ty,tz = r.pose_t + print("tx,ty,tz:{},{},{}".format(tx,ty,tz)) # draw the bounding box of the AprilTag detection cv2.line(frame, ptA, ptB, (0, 255, 0), 5) cv2.line(frame, ptB, ptC, (0, 255, 0), 5) @@ -56,10 +83,12 @@ if __name__ == "__main__": (cX, cY) = (int(r.center[0]), int(r.center[1])) cv2.circle(frame, (cX, cY), 5, (0, 0, 255), -1) # draw the tag family on the image + print("cX,cY:{},{}".format(cX,cY)) tagFamily = r.tag_family.decode("utf-8") + tid = r.tag_id cv2.putText(frame, tagFamily, (ptA[0], ptA[1] - 15), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2) - print("[INFO] tag family: {}".format(tagFamily)) + print("[INFO] tag id: {}".format(tid)) # show the output image after AprilTag detection cv2.imshow("Image", frame)