Open mark-belbin opened 3 years ago
Receiving same issue. Has there been a resolution?
Pi4 Python 3.7.3
Segfault appearing in this portion of code: at_detector = Detector(families='tag36h11', nthreads=2, quad_decimate=1.0, quad_sigma=0.0, refine_edges=1, decode_sharpening=0.25, debug=0)
Appears to be slightly more stable when nthreads=2 (skips my image if all tags are detected) and crashes if nthreads=1.
Thanks, Aaron
This is related to either filesize or ratio of resolution.
Attached is some minimum reproducible code. I tried as-is (file size 2028 x 1520 which maybe isn't a standard) and mostly consistently was able to get 10 loops before the segmentation error. I then reduced the resolution to 720x480 and was able to get 1000+ loops without issue.
The image I tested with is here: https://neoconinc-my.sharepoint.com/:i:/g/personal/ashepherd_neoconhfx_com/ETLrI41fyORAswLsMXFJPmYBRIDx9CtF4ZF-K4tqyGcSeQ?e=ph8BwU
`import cv2 from pupil_apriltags import Detector
for z in range(1,50):
image = cv2.imread('3333.jpg')
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
image = cv2.resize(image,(720,480))
tag_id = 0
at_detector = Detector(families='tag36h11',
nthreads=1,
quad_decimate=1.0,
quad_sigma=0.0,
refine_edges=1,
decode_sharpening=0.25,
debug=0)
tags = at_detector.detect(image, estimate_tag_pose=False, camera_params=None, tag_size=None)
# loop over the AprilTag detection results
for r in tags:
# extract the bounding box (x, y)-coordinates for the AprilTag
# and convert each of the (x, y)-coordinate pairs to integers
(ptA, ptB, ptC, ptD) = r.corners
ptB = (int(ptB[0]), int(ptB[1]))
ptC = (int(ptC[0]), int(ptC[1]))
ptD = (int(ptD[0]), int(ptD[1]))
ptA = (int(ptA[0]), int(ptA[1]))
# draw the bounding box of the AprilTag detection
cv2.line(image, ptA, ptB, (0, 255, 0), 2)
cv2.line(image, ptB, ptC, (0, 255, 0), 2)
cv2.line(image, ptC, ptD, (0, 255, 0), 2)
cv2.line(image, ptD, ptA, (0, 255, 0), 2)
# draw the center (x, y)-coordinates of the AprilTag
(cX, cY) = (int(r.center[0]), int(r.center[1]))
# if debugging is True:
# print ('tag center location is ' + str(cX) + ', ' + str(cY) + ' and ID # is ' + str(r.tag_id))
cv2.circle(image, (cX, cY), 5, (0, 0, 255), -1)
# draw the tag ID on the image
cv2.putText(image, str(r.tag_id), (ptA[0], ptA[1] - 15),
cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
# show the image, provide window name first
cv2.imshow('step ' + str(z), image)
# add wait key. window waits until user presses a key
cv2.waitKey(1000)
# and finally destroy/close all open windows
cv2.destroyAllWindows()
print(str(z))
next
`
I'm on a Raspberry Pi 4 and my solution to fixing this was to optimize my code so as to not run anything unnecessarily in a while loop. For me this was setting at_detector once at the start. I also ran the optimizations mentioned above, but they didn't help me as much as refactoring my code.
I receive a segmentation fault when using this library on a Raspberry Pi 4 and python 3.7. When the entire script exits a seg fault pops up. I've attached the following gdb excerpt:
The library works fine on windows with the same code, any ideas what would be causing this on a Pi 4?