WorldViz User Forum  

Go Back   WorldViz User Forum > Vizard

Reply
 
Thread Tools Rating: Thread Rating: 4 votes, 5.00 average. Display Modes
  #1  
Old 05-20-2012, 11:03 PM
goro goro is offline
Member
 
Join Date: May 2012
Posts: 33
Unhappy Flip WebCam input Horizontally

Hi,
I am new to vizard working on Augmented Reality. I am trying to flip my Web Camera input horizontally. I am successfully flipping it but my system performance is going down. Here is my code:

Code:
import viz
import vizact
viz.go()

video = viz.add('VideoCamera.dle')
ar = viz.add('ARToolKit.dle')

cam = video.addWebcam(type=viz.TEX_2D)
width, height, type = cam.getSize()
flipCam = viz.addBlankTexture([width,height])
width_3 = width*3

camera = ar.addCamera(flipCam)
dataCam = cam.getImageData()
dataFlipCam = flipCam.getImageData()

def mainLoop():
	for y in range(0,height-1):
		for x in range(0,width-1):
			dataFlipCam[(3*x+y*width_3)] = dataCam[(3*(width-1-x)+y*width_3)] 
			dataFlipCam[(3*x+1+y*width_3)] = dataCam[(3*(width-1-x)+1+y*width_3)] 
			dataFlipCam[(3*x+2+y*width_3)] = dataCam[(3*(width-1-x)+2+y*width_3)] 
			
	flipCam.hint(viz.TEXTURE_MODIFIED_HINT)
	
vizact.ontimer(0,mainLoop)
Please suggest me alternate.

Thanks!
Reply With Quote
  #2  
Old 05-22-2012, 01:28 AM
goro goro is offline
Member
 
Join Date: May 2012
Posts: 33
I have found the optimised way to flip the Image, Video and Web cam Input. Flipping is now not an issue but the issue is while flipping video & web cam images the colour changes.

This Image will illustrate what happens when I flip video:


Code for the above mentioned flipping video image

Code:
import viz
import vizact
import Image
viz.go()

def PIL_TO_VIZARD(texture):
	image = Image.fromstring('RGB',[width,height],cam.getImageData())
	"""Copy the PIL image to the Vizard texture"""
	im = image.transpose(Image.FLIP_LEFT_RIGHT)
	texture.setImageData(im.convert('RGB').tostring(),im.size)
	
#Create a blank Vizard texture
tex = viz.addBlankTexture([1,1])

cam = viz.addVideo('mona.mpg')
cam.play()
cam.loop()

width,height,type = cam.getSize()


#---------------------------- Texture Comparison -----------------------------#
quad1 = viz.addTexQuad()
quad1.setPosition([-.75, 2, 3])

quad1.texture(cam)

quad2 = viz.addTexQuad()
quad2.setPosition([.75, 2, 3])
quad2.texture(tex)

#-----------------------------------------------------------------------------#

vizact.ontimer(0,PIL_TO_VIZARD,tex)
Thanks!
Reply With Quote
  #3  
Old 05-22-2012, 08:30 AM
farshizzo farshizzo is offline
WorldViz Team Member
 
Join Date: Mar 2003
Posts: 2,849
Do you actually need the image data to be flipped, or do you just want to display the texture flipped? If you just want to display the texture flipped horizontally, then simply apply a negative scale on the texture quad:
Code:
quat.setScale([-1,1,1])
Reply With Quote
  #4  
Old 05-22-2012, 10:38 AM
goro goro is offline
Member
 
Join Date: May 2012
Posts: 33
Red face Solved the Flip Image Issue

Thanks farshizzo for the reply. I actually need the Image data to be flipped. I am working on Augmented Reality Project & I want to create a Mirror. If I flipped the quad containing the Image then the marker wont get flipped, so the co-ordination between image & logo gets lost and mismatch happens. To overcome this issue I need help. I have solved the colour issue in flipping video image by modifying the code as shown below & got the output as shown in below image:



Code:
import viz
import vizact
import Image
viz.go()

def PIL_TO_VIZARD(texture):
	image = Image.fromstring('RGB',[width,height],cam.getImageData())
	"""Copy the PIL image to the Vizard texture"""
	im = image.transpose(Image.FLIP_LEFT_RIGHT)
	RGB2BGR = (
		0.0, 0.0, 1.0, 0.0,
		0.0, 1.0, 0.0, 0.0,
		1.0, 0.0, 0.0, 0.0 )
	texture.setImageData(im.convert('RGB',RGB2BGR).tostring(),im.size)
	
#Create a blank Vizard texture
tex = viz.addBlankTexture([1,1])

cam = viz.addVideo('mona.mpg')
cam.play()
cam.loop()

width,height,type = cam.getSize()


#---------------------------- Texture Comparison -----------------------------#
quad1 = viz.addTexQuad()
quad1.setPosition([-.75, 2, 3])

quad1.texture(cam)

quad2 = viz.addTexQuad()
quad2.setPosition([.75, 2, 3])
quad2.texture(tex)

#-----------------------------------------------------------------------------#

vizact.ontimer(0,PIL_TO_VIZARD,tex)
Reply With Quote
  #5  
Old 05-22-2012, 10:59 AM
goro goro is offline
Member
 
Join Date: May 2012
Posts: 33
Angry Marker is not getting detected in Flipped Image

I working on ARToolKit & Successfully flipped the Webcam Image. But now the issue is Marker is not getting detected in flipped texture.

Here is the code:

Code:
import viz
import vizact
import Image
viz.go()

#------------------------ Flip Horizontal ------------------------------#
def FlipHorizontal(cam_tex,texture):
	image = Image.fromstring('RGB',[width,height],cam_tex.getImageData())
	"""Copy the PIL image to the Vizard texture"""
	im = image.transpose(Image.FLIP_LEFT_RIGHT)
	RGB2BGR = (
		0.0, 0.0, 1.0, 0.0,
		0.0, 1.0, 0.0, 0.0,
		1.0, 0.0, 0.0, 0.0 )
	texture.setImageData(im.convert('RGB',RGB2BGR).tostring(),im.size)
	
#Create a blank Vizard texture
tex = viz.addBlankTexture([1,1],format=viz.TEX_BGR)

#Load Video Camera
video = viz.add('VideoCamera.dle')
# Load Web Camera & set cam as Video Texture
cam = video.addWebcam()

#Load ARToolKit
ar = viz.add('ARToolKit.dle')

width,height,type = cam.getSize()

# Flip Video Texture Horizontally
vizact.ontimer(0,FlipHorizontal,cam,tex)

# Set ARToolKit Camera with cam as texture
camera = ar.addCamera(tex)  #---- This Dosn't work
#camera = ar.addCamera(cam) #---- This works
camera.setDebug(True)

# Add AR Marker
marker = camera.addMarker('ar/patt.hiro',width = 1000.00) #patt.hiro or patt.hiro_fh 

#Add logo model
logo = viz.add('logo.ive')

#Link logo model to marker sensor
link = viz.link(marker,logo)
Reply With Quote
  #6  
Old 05-29-2012, 09:20 AM
farshizzo farshizzo is offline
WorldViz Team Member
 
Join Date: Mar 2003
Posts: 2,849
You need to flip the image before ARToolkit processes the camera image. Try scheduling the FlipHorizontal function with a lower update priority using the following code, instead of using vizact.ontimer:
Code:
vizact.onupate(viz.PRIORITY_PLUGINS,FlipHorizontal,cam,tex)
Reply With Quote
  #7  
Old 05-31-2012, 09:50 PM
goro goro is offline
Member
 
Join Date: May 2012
Posts: 33
Nope.. Its not working...
I have even tried to set priority values from -1000 to 1000.
Reply With Quote
  #8  
Old 06-04-2012, 09:40 AM
farshizzo farshizzo is offline
WorldViz Team Member
 
Join Date: Mar 2003
Posts: 2,849
Is the incoming raw video data flipped or are you flipping it for another reason? If you are artificially flipping the data and the marker you are tracking is not horizontally symmetrical, then ARToolkit will fail to track the marker.
Reply With Quote
  #9  
Old 06-04-2012, 12:13 PM
goro goro is offline
Member
 
Join Date: May 2012
Posts: 33
My webcam is giving real image & not the flipped image. But my application requirement is my customer should see him on screen as he is seeing him in mirror & marker should also respond in the same way. So can you tell me any alternate method so I can flip my webcam input out and out before applying it to artoolkit?
Reply With Quote
  #10  
Old 06-05-2012, 06:07 AM
goro goro is offline
Member
 
Join Date: May 2012
Posts: 33
This simple code flips the texture but it doesn't solve the purpose..
Code:
import viz
viz.go()

ar = viz.add('artoolkit.dle')
camera = ar.addWebCamera()

camera.background.setEuler([180,0,0])
camera.background.setPosition([640,0,0])

marker = camera.addMarker('ar/patt.worldviz',width = 1000)

logo = viz.add('logo.ive')

viz.link(marker,logo)
Marker positions miss match with the image if we go with this code.
Reply With Quote
  #11  
Old 06-05-2012, 03:52 PM
farshizzo farshizzo is offline
WorldViz Team Member
 
Join Date: Mar 2003
Posts: 2,849
You will need to "flip" the position/rotation values of the markers as well. You can use the link.swapPos and link.swapEuler commands to accomplish this. Here is some sample code:
Code:
import viz
viz.go()

#Add ARToolkit extension
ar = viz.add('artoolkit.dle')

#Create camera using first available webcam
camera = ar.addWebCamera()

#Flip background quad
camera.background.setEuler([180,0,0])
camera.background.setPosition([camera.texture.getSize()[0],0,0])

#Create a matrix marker with the specified id
marker = camera.addMatrixMarker(0,width=1000)

#Add logo model
logo = viz.add('logo.ive')

#Link logo model to marker sensor
link = viz.link(marker,logo)

#Swap X position and yaw,roll of euler rotation
link.swapPos([-1,2,3],target=viz.LINK_POS_OP)
link.swapEuler([-1,2,-3],target=viz.LINK_ORI_OP)
Reply With Quote
  #12  
Old 06-06-2012, 12:15 AM
goro goro is offline
Member
 
Join Date: May 2012
Posts: 33
Smile

Thanks friend! Its working.
Reply With Quote
Reply

Tags
artoolkit, camera, flip, flip horizontally, webcam

Thread Tools
Display Modes Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
User keyboard input without halting the program Zhi Vizard 2 06-23-2011 12:53 PM
Controlling User Input ohad Vizard 1 03-15-2010 05:16 PM
How to input several model files and then save one output file mspusch Vizard 1 07-15-2008 10:30 PM
problems with webcam plug-in v-clizzin Plug-in development 2 01-25-2008 03:06 PM
problem with input boxes shai Vizard 6 08-15-2005 10:51 AM


All times are GMT -7. The time now is 11:49 AM.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Copyright 2002-2023 WorldViz LLC