while runflag:
    #print uflag1.value
    #print uflag2.value
    dat1 = uflag1.value
    dat2 = uflag2.value
    frame = vs.read() #for testing
    #datrecv1 = pipeul1.recv() #Blocking
    #datrecv2 = pipeul2.recv() #Blocking
    #if datrecv1[0] and datrecv2[0]:
    if (dat1 == 2) and (dat2 ==2):
        #pos3d =  calc3d(datrecv2[2].ravel(),datrecv1[2].ravel()) ########
        with uarray1.get_lock():
            arr1 = np.frombuffer(uarray1.get_obj())
        with uarray2.get_lock():
            arr2 = np.frombuffer(uarray2.get_obj())
        pos3d =  calc3d(arr1,arr2)
        #print np.asarray(pos3d)
        imgpts, jac = cv2.projectPoints(np.float32([np.asarray(pos3d)]).reshape(-1,3), rvecs, tvecs, mtx, dist)
        cv2.rectangle(frame,(int(imgpts[0,0,0]) - 2,int(imgpts[0,0,1]) - 2),(int(imgpts[0,0,0]) + 2 ,int(imgpts[0,0,1]) + 2),(255,0,0),1)
    #elif not datrecv1[1] or not datrecv2[1]:
    elif (dat1 == 0) or (dat2 ==0):
        runflag = False
    cv2.imshow('frame',frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
    	break

print "Waiting for both processes to stop..."
#while pipeul1.poll(0.5) or pipeul2.poll(0.5):
while (uflag1.value != 0) or (uflag2.value != 0):
    continue
	    Dat2 = proc2.read()
	    print Dat1
	    print Dat2
	    # dat1 = uflag1.value
	    # dat2 = uflag2.value
	    frame = vs.read() #for testing
	    #datrecv1 = pipeul1.recv() #Blocking
	    #datrecv2 = pipeul2.recv() #Blocking
	    #if datrecv1[0] and datrecv2[0]:
	    if (Dat1[0]== 2) and (Dat2[0] ==2):
	        #pos3d =  calc3d(datrecv2[2].ravel(),datrecv1[2].ravel()) ########
	        # with uarray1.get_lock():
	        #     arr1 = np.frombuffer(uarray1.get_obj())
	        # with uarray2.get_lock():
	        #     arr2 = np.frombuffer(uarray2.get_obj())
	        pos3d =  calc3d(Dat1[1],Dat2[1])
	        #print np.asarray(pos3d)
	        imgpts, jac = cv2.projectPoints(np.float32([np.asarray(pos3d)]).reshape(-1,3), rvecs, tvecs, mtx, dist)
	        cv2.rectangle(frame,(int(imgpts[0,0,0]) - 2,int(imgpts[0,0,1]) - 2),(int(imgpts[0,0,0]) + 2 ,int(imgpts[0,0,1]) + 2),(255,0,0),1)
	    #elif not datrecv1[1] or not datrecv2[1]:
	    elif (Dat1[0] == 0) or (Dat2[0] ==0):
	        runflag = False
	    cv2.imshow('frame',frame)
	    if cv2.waitKey(1) & 0xFF == ord('q'):
	        break
	
	print "Waiting for both processes to stop..."
	#while pipeul1.poll(0.5) or pipeul2.poll(0.5):
	while (proc1.read()[0] != 0) or (proc2.read()[0] != 0):
	    continue