|
|
|
Return to Scripting Issues
by Hoffmann » Sun Mar 18, 2012 6:31 pm
I'm getting an error while using ARToolkit on Ubuntu 11.10 with panda3d 1.8.0 (stable release).
Here is my code:
- Code: Select all
from pandac.PandaModules import * loadPrcFileData("", "auto-flip 1") from direct.directbase import DirectStart from direct.task import Task from time import sleep
tex = OpenCVTexture() tex.setTexturesPower2(0) assert tex.fromCamera(0)
cm = CardMaker("background-card") cm.setFrame(-1, 1, 1, -1) card = render2d.attachNewNode(cm.generate()) card.setTexture(tex)
base.cam.node().getDisplayRegion(0).setSort(20)
axis = loader.loadModel("yup-axis") axis.reparentTo(render) axis.setScale(.2)
ar = ARToolKit.make(base.cam, "./camera_para.dat", 1) ar.attachPattern("./patt.hiro", axis)
def updatePatterns(task): ar.analyze(tex, False) return Task.cont sleep(1) taskMgr.add(updatePatterns, "update-patterns",-100)
run()
And here is the error that I get: - Code: Select all
DirectStart: Starting the game. Known pipe types: glxGraphicsPipe (all display modules loaded.) :display:glxdisplay(warning): No suitable FBConfig contexts available; using XVisual only. depth_bits=24 color_bits=24 accum_bits=64 back_buffers=1 force_hardware=1 :display(warning): FrameBufferProperties available less than requested. mmap: Invalid argument munmap: Invalid argument munmap: Invalid argument munmap: Invalid argument munmap: Invalid argument Unable to stop the stream.: Bad file descriptor munmap: Invalid argument munmap: Invalid argument munmap: Invalid argument munmap: Invalid argument -------------------------------------- SIZE = 640, 480 Distortion factor = 318.500000 263.500000 26.200000 1.012757 700.95147 0.00000 316.50000 0.00000 0.00000 726.09418 241.50000 0.00000 0.00000 0.00000 1.00000 0.00000 -------------------------------------- Assertion failed: (xsize > 0) && (ysize > 0) at line 287 of panda/src/vision/arToolKit.cxx Traceback (most recent call last): File "raw.py", line 27, in updatePatterns ar.analyze(tex, False) AssertionError: (xsize > 0) && (ysize > 0) at line 287 of panda/src/vision/arToolKit.cxx :task(error): Exception occurred in PythonTask update-patterns Traceback (most recent call last): File "raw.py", line 34, in <module> run() File "/usr/share/panda3d/direct/showbase/ShowBase.py", line 2910, in run self.taskMgr.run() File "/usr/share/panda3d/direct/task/Task.py", line 502, in run self.step() File "/usr/share/panda3d/direct/task/Task.py", line 460, in step self.mgr.poll() File "raw.py", line 27, in updatePatterns ar.analyze(tex, False) AssertionError: (xsize > 0) && (ysize > 0) at line 287 of panda/src/vision/arToolKit.cxx
If I don't add the task to the task manager it doesn't crash but I don't get the webcam video on my card. So I think the problem is with the OpenCVTexture class (my webcam does work on other software).
Any ideas how to fix it?
-
Hoffmann
-
- Posts: 42
- Joined: Thu Feb 24, 2011 12:05 pm
by Hoffmann » Thu Mar 22, 2012 5:20 pm
I hate bumping my own thread, but I was planning on using panda3d and artoolkit on my graduation project and I'm stuck if I can't get it to work. Any help at all would be greately appreciated.
-
Hoffmann
-
- Posts: 42
- Joined: Thu Feb 24, 2011 12:05 pm
by ThomasEgi » Fri Mar 23, 2012 9:41 am
opencv textures are quite a bit of a pain.
in most cases you are better off using webcamvideo
from my own code-snips base.
- Code: Select all
from panda3d.core import loadPrcFileData loadPrcFileData("", "textures-power-2 none") from pandac.PandaModules import * from panda3d.vision import WebcamVideo from panda3d.core import MovieTexture #loadPrcFileData("", "auto-flip 1") #usualy the drawn texture lags a bit behind the calculted positions. this is a try to reduce the lag. from direct.task import Task from time import sleep import sys for x,option in enumerate(WebcamVideo.getOptions()): print >>sys.stderr, option ,x
print "choose webcam and resolution by index" option = WebcamVideo.getOption(int(raw_input())) from direct.showbase.ShowBase import ShowBase ShowBase() print "req:", option tex = MovieTexture(option) tex.setKeepRamImage(True) cm = CardMaker("card") cm.setUvRange(Point2(0, 0), Point2(1, 1)) cm.setFrame(-1, 1, -1, 1) card = render2d.attachNewNode(cm.generate()) card.setTexture(tex)
#set the rendering order manually to render the card-with the webcam-image behind the scene. base.cam.node().getDisplayRegion(0).setSort(20)
#load a model to visualize the tracking axis = loader.loadModel("yup-axis") axis.reparentTo(render) axis.setScale(.2)
#initialize artoolkit, base.cam is our camera , #the camera_para.dat is the configuration file for your camera. this one comes with the artoolkit installation. #last paremeter is the size of the pattern in panda-units. ar = ARToolKit.make(base.cam, "./camera_para.dat", 1)
#attach the model to a pattern so it updates the model's position relative to the camera each time we call analyze() ar.attachPattern("./patt.hiro", axis)
#updating the models positions each frame. def updatePatterns(task): ar.analyze(tex) return Task.cont taskMgr.doMethodLater(1,updatePatterns, "update-patterns", priority = 100)
run()
-

ThomasEgi
-
- Posts: 2147
- Joined: Fri Jul 28, 2006 10:43 am
- Location: Germany,Koblenz
by Hoffmann » Fri Mar 23, 2012 11:33 am
I have tried to use it in windows with WebCamVideo before and I saw accuracy issues:
http://lai.sel.eesc.usp.br/hiro1
http://lai.sel.eesc.usp.br/hiro2
You can notice that if I place the marker on the far left of the screen the model jumps to the right side of the screen. Everywhere else it kinda follows the marker. The orientation works right, but the placement always tends to the middle (except if the marker is on the left side).
I couldn't get it right with any kind of positioning of the card or changing the camera display region.
So I'm now trying to use it on linux with the OpenCVTexture hoping that the ARToolKit implementation in panda wasn't made to work with the WebCamVideo class. My calibration file is not the problem because I have tested ARToolKit without panda (using C with the same camera calibration file) and the accuracy is flawless.
Also I thought that WebcamVideo didn't work on Linux, did the devs implement it on linux?
-
Hoffmann
-
- Posts: 42
- Joined: Thu Feb 24, 2011 12:05 pm
by ThomasEgi » Fri Mar 23, 2012 11:43 am
webcam support was indeed overhauled lately. the sample i posted above should run fine on linux (in fact i wrote it on my linux machine)
as for the jumping, you may need to enable non-power-of-2 textures in your config-prc file
-

ThomasEgi
-
- Posts: 2147
- Joined: Fri Jul 28, 2006 10:43 am
- Location: Germany,Koblenz
by Hoffmann » Tue Mar 27, 2012 12:57 pm
Hey Thomas thanks for your help. I got it to work on Linux using your code, it works flawlessly. But trying the same code on Windows it didn't run.
For some reason in windows this:
- Code: Select all
from direct.showbase.ShowBase import ShowBase ShowBase()
needs to be before this call in Windows: - Code: Select all
WebcamVideo.getOptions()
Or else this call returns an empty list. When I place the ShowBase() call before, it runs fine but there are the same accuracy issue I mentioned before (no jumping when close to the left side though). The rest of the code is exactly the same. - Code: Select all
loadPrcFileData("", "textures-power-2 none")
doesn't fix the accuracy issues in Windows. Should I report it as a bug?
-
Hoffmann
-
- Posts: 42
- Joined: Thu Feb 24, 2011 12:05 pm
by rdb » Wed Mar 28, 2012 1:04 am
Maybe you should choose a different option from getOptions(), perhaps that has a higher resolution, or a different framerate?
-
rdb
-
- Posts: 8548
- Joined: Mon Dec 04, 2006 5:58 am
- Location: Netherlands
-
by Hoffmann » Wed Mar 28, 2012 9:18 pm
I tried different options, all of them get the same problem. I also tried with 2 different cameras on windows. On linux I only tried with one because I can't get the other one to work in linux.
-
Hoffmann
-
- Posts: 42
- Joined: Thu Feb 24, 2011 12:05 pm
Return to Scripting Issues
Who is online
Users browsing this forum: No registered users and 2 guests
| | |