defleidke ArucoMarkerid(pilt, markerSize=6, Markerid kokku=250):
# Teisendage pilt halltooniks
hall = cv2.cvtColor (pilt, cv2.COLOR_BGR2GRAY)

# Hankige Aruco sõnastik markeri suuruse ja markerite koguarvu põhjal
dictionary_key = getattr (cv2.aruco, f'DICT_{markerSize}X'
f'{markerSize}_{totalMarkers}')

aruco_dictionary = cv2.aruco.getPredefinedDictionary (sõnastiku_võti)

# Määrake Aruco detektori parameetrid
aruco_params = cv2.aruco. DetectorParameters()

# Tuvastage halltoonides pildil Aruco markerid
marker_corners, marker_ids, _ = cv2.aruco.detectMarkers (hall, aruco_dictionary,
parameetrid=aruco_params)

defsuperimposeImageOnMarkers(video_frame, aruco_markers, overlay_image,
video_width, video_height):
frame_height, frame_width = video_frame.shape[:2]

kui len (aruco_markers[0]) != 0:
jaoks i, marker_nurk sisse loetlema (aruco_markers[0]):
marker_corners = marker_corner.reshape((4, 2)).astype (np.int32)

# Joonistage markeri nurkade ümber hulknurk
cv2.polylines (video_frame, [marker_corners], Tõsi, (0, 255, 0), 2)

# Lisage markeri ID tekstina markeri vasakus ülanurgas
cv2.putText (video_frame, str (aruco_markers[1][i]),
korteež (marker_nurgad[0]),
cv2.FONT_HERSHEY_SIMPLEX,0.5, (0, 255, 0), 2)

# Otsige üles homograafiamaatriks, et kaardistada ülekattepilt markerile
homograafia_maatriks, _ = cv2.findHomography(
np.array([[0, 0], [video_laius, 0], [video_laius, video_kõrgus],
[0, video_height]], dtype="float32"), marker_corners)

# Homograafiamaatriksi abil kõverdage ülekatte pilti, et see joondada markeriga
warped_image = cv2.warpPerspective (overlay_image, homography_matrix,
(kaadri_laius, kaadri_kõrgus))

# Loo mask, et rakendada kõverdatud kujutist ainult markeri alale
mask = np.zeros((kaadri_kõrgus, kaadri_laius), dtype="uint8")
cv2.fillConvexPoly (mask, marker_corners, (255, 255, 255), cv2.LINE_AA)

masked_warped_image = cv2.bitwise_and (kõverdatud_pilt, kõverdatud_pilt,
mask = mask)

# Rakenda videokaadrile pöördmask
masked_video_frame = cv2.bitwise_and (video_frame, video_frame,
mask=cv2.bitwise_not (mask))

# Kombineerige maskeeritud kõverdatud pilt ja maskeeritud videokaader
video_frame = cv2.add (masked_warped_image, masked_video_frame)

defprotsessVideoFeed(ülekatte_pilt):
# Määrake videovoo mõõtmed
video_height = 480
video_laius = 640

# Avage video jäädvustamine
video_capture = cv2.VideoCapture(0)

# Laadige ülekatte pilt ja muutke selle suurust
overlay_image = cv2.resize (overlay_image, (video_width, video_height))

samal ajal video_capture.isOpened():
# Lugege videohõivest kaadrit
ret, video_frame = video_capture.read()

kui ret:
# Leidke videokaadrist Aruco markerid
aruco_markers = leiaArucoMarkerid (video_frame, totalMarkers=100)

# Asetage ülekattepilt videokaadri markeritele
video_frame = superimposeImageOnMarkers (video_frame, aruco_markers,
overlay_image, video_width,
video_height)

# Kuvage videokaader koos ülekattega
cv2.imshow("Kaamera voog", video_frame)

# Kontrollige tsüklist väljumiseks klahvi 'q' vajutamist
kui cv2.waitKey(1) & 0xFF == tellimus('q'):
murda