import numpy as np
import cv2 # pylint: disable=import-error
def rot_matrix ( roll , pitch , yaw ) :
cr , sr = np . cos ( roll ) , np . sin ( roll )
cp , sp = np . cos ( pitch ) , np . sin ( pitch )
cy , sy = np . cos ( yaw ) , np . sin ( yaw )
rr = np . array ( [ [ 1 , 0 , 0 ] , [ 0 , cr , - sr ] , [ 0 , sr , cr ] ] )
rp = np . array ( [ [ cp , 0 , sp ] , [ 0 , 1 , 0 ] , [ - sp , 0 , cp ] ] )
ry = np . array ( [ [ cy , - sy , 0 ] , [ sy , cy , 0 ] , [ 0 , 0 , 1 ] ] )
return ry . dot ( rp . dot ( rr ) )
def draw_pose ( img , pose , loc , W = 160 , H = 320 , xyoffset = ( 0 , 0 ) , faceprob = 0 ) :
rcmat = np . zeros ( ( 3 , 4 ) )
rcmat [ : , : 3 ] = rot_matrix ( * pose [ 0 : 3 ] ) * 0.5
rcmat [ 0 , 3 ] = ( loc [ 0 ] + 0.5 ) * W
rcmat [ 1 , 3 ] = ( loc [ 1 ] + 0.5 ) * H
rcmat [ 2 , 3 ] = 1.0
# draw nose
p1 = np . dot ( rcmat , [ 0 , 0 , 0 , 1 ] ) [ 0 : 2 ]
p2 = np . dot ( rcmat , [ 0 , 0 , 100 , 1 ] ) [ 0 : 2 ]
tr = tuple ( [ int ( round ( x + xyoffset [ i ] ) ) for i , x in enumerate ( p1 ) ] )
pr = tuple ( [ int ( round ( x + xyoffset [ i ] ) ) for i , x in enumerate ( p2 ) ] )
if faceprob > 0.4 :
color = ( 255 , 255 , 0 )
cv2 . line ( img , tr , pr , color = ( 255 , 255 , 0 ) , thickness = 3 )
else :
color = ( 64 , 64 , 64 )
cv2 . circle ( img , tr , 7 , color = color )