Note
This notebook can be downloaded here: Aruco_detection-Tvec.ipynb
import numpy as np
import cv2
import cv2.aruco as aruco
import math
import random
import sys
#import time
aruco_dict = aruco.Dictionary_get(aruco.DICT_6X6_250)
#print(aruco_dict)
# second parameter is id number
# last parameter is total image size
img = aruco.drawMarker(aruco_dict, 2, 700)
cv2.imwrite("test_marker.jpg", img)
#cv2.imshow('frame',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
posorigine =[]
cap = cv2.VideoCapture(0)
mtx=np.array([[ 736.72620104, 0. , 335.09873285],
[ 0. , 784.55469771, 288.37183538],
[ 0. , 0. , 1. ]])
dist=np.array([[ 1.80626027e-01],
[ -6.41707400e-01],
[ 5.59047400e-03],
[ 1.71301917e-03],
[ -2.57102334e+00],
[ 6.96846440e-02],
[ -4.08903572e-01],
[ -2.89017255e+00],
[ 0.00000000e+00],
[ 0.00000000e+00],
[ 0.00000000e+00],
[ 0.00000000e+00],
[ 0.00000000e+00],
[ 0.00000000e+00]] )
#cv2.namedWindow("truc", cv2.WND_PROP_FULLSCREEN)
#cv2.resizeWindow('truc', 1200,1200)
#cv2.SetWindowProperty("truc",cv2.WND_PROP_FULLSCREEN,cv2.WINDOW_FULLSCREEN)
cv2.namedWindow("truc", cv2.WND_PROP_FULLSCREEN)
cv2.setWindowProperty("truc",cv2.WND_PROP_FULLSCREEN,cv2.WINDOW_FULLSCREEN)
while(True):
# Capture frame-by-frame
ret, frame = cap.read()
#print(frame.shape) #480x640
# Our operations on the frame come here
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
aruco_dict = aruco.Dictionary_get(aruco.DICT_6X6_250)
parameters = aruco.DetectorParameters_create()
#print(parameters)
''' detectMarkers(...)
detectMarkers(image, dictionary[, corners[, ids[, parameters[, rejectedI
mgPoints]]]]) -> corners, ids, rejectedImgPoints
'''
#lists of ids and the corners beloning to each id
corners, ids, rejectedImgPoints = aruco.detectMarkers(gray, aruco_dict, parameters=parameters)
#print(corners[0][0][0])
size_of_marker = 0.0202 # side lenght of the marker in meter
if len(corners)>0:
rvecs,tvecs, trash = aruco.estimatePoseSingleMarkers(corners, size_of_marker, mtx, dist)
length_of_axis = 0.01
imaxis = aruco.drawDetectedMarkers(frame, corners, ids)
for i in range(len(tvecs)):
imaxis = aruco.drawAxis(imaxis, mtx, dist, rvecs[i], tvecs[i], length_of_axis)
#It's working.
# qqmy problem was that the cellphone put black all around it. The alrogithm
# depends very much upon finding rectangular black blobs
frame = aruco.drawDetectedMarkers(frame, corners)
"""for i in range(len(ids)):
if ids[i]== 1:"""
if posorigine != []:
for i in ids:
if i in trackedIds:
orgcorners = posorigine[list(trackedIds).index(i)]
newcorners = corners[list(ids).index(i)]
#ax,ay,xmarkers,by,bx,deltax,deltay = calcul(corners,i)
cv2.line(frame,(orgcorners[0][0][0],orgcorners[0][0][1]),
(newcorners[0][0][0], newcorners[0][0][1]),(255,255,255),5)
#deltax = float(int((abs(ax-bx)*2.81/xmarkers)*100)/100)
orgcornersbis = posoriginetvecs[list(trackedIds).index(i)]
newcornersbis = tvecs[list(ids).index(i)]
cal = np.sqrt((newcornersbis[0][0]-orgcornersbis[0][0])**2+(newcornersbis[0][1]-orgcornersbis[0][1])**2)*1000
cal = float(int(cal*100))/100
cv2.putText(frame,'x'+str(i)+':'+ str(cal),(0,100+25*i),cv2.FONT_HERSHEY_SIMPLEX,1,(255,255,255),2)
#print(rejectedImgPoints)
# Display the resulting frame
cv2.imshow('truc',frame)
cv2.imshow('truc',imaxis)
else:
cv2.imshow('truc',frame)
if cv2.waitKey(1) & 0xFF == ord('a'):
posorigine = corners
posoriginetvecs = tvecs
trackedIds = ids
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()
tvecs
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-1-f5df3c737808> in <module>()
----> 1 tvecs
NameError: name 'tvecs' is not defined
cap.release()
def calc_square(numbers):
for n in numbers:
print('square ' + str(n*n))
def calc_cube(numbers):
for n in numbers:
print('cube ' + str(n*n*n))
if __name__ == "__main__":
arr = [2,3,8]
p1 = multiprocessing.Process(target=calc_square, args=(arr,))
p2 = multiprocessing.Process(target=calc_cube, args=(arr,))
p1.start()
p2.start()
p1.join()
p2.join()
print(calc_square(arr),"Done!")
ids
ids = [4,5,2]
ids
ids.index(5)
d = dict()