Hun*_*tR2 5 python pygame segmentation-fault kinect simplecv
我一直在使用SimpleCV来查找与自动驾驶机器人一起使用的blob.问题是当我在SimpleCV中调用findBlobs命令时.当我完全阻挡Kinect相机的镜头时,PyGame崩溃给我这个错误:
致命的Python错误:( pygame降落伞)分段错误
有时它会起作用,有时甚至会在镜头解锁时崩溃.当我运行超过大约30秒时,它几乎总会崩溃.我已经在SimpleCV中重新安装并修复了许多问题,并尝试重新安装Pygame,它似乎没有任何帮助.另外,我使用X-Box kinect作为我的相机源.我正在使用Ubuntu 11.04.
这是我的确切代码:
from SimpleCV import *
from SimpleCV.Display import *
from time import sleep
k = Kinect()
dis = Display()
while 1:
depth = k.getDepth()
depth = depth.invert()
depth = depth.erode()
blobs = depth.findBlobs(threshval=127, minsize=10, maxsize=0)
if blobs:
blobs.draw()
depth.save(dis)
sleep(0)
Run Code Online (Sandbox Code Playgroud)
Kat在这里,我写了SimpleCV blob库.
我们在发布1.1版本后发现了blob库的几个问题.两个大的问题是,blob库将达到python最大递归深度并拯救出来.第二个源于实际的底层OpenCV包装器,并在blob制造商检测到没有blob时导致pygame错误.
现在的解决方案是使用我们的github仓库的主分支中的版本.修补版本也将在本月晚些时候发布的新版SimpleCV 1.2中提供.如果你想手动修复代码,我已粘贴下面的固定代码段:
在第55行的BlobMaker.py中
def extractFromBinary(self,binaryImg,colorImg, minsize = 5, maxsize = -1):
#fix recursion limit bug
sys.setrecursionlimit(1000000)
if (maxsize <= 0):
maxsize = colorImg.width * colorImg.height
retVal = []
#fix all black image bug
test = binaryImg.meanColor()
if( test[0]==0.00 and test[1]==0.00 and test[2]==0.00):
return FeatureSet(retVal)
seq = cv.FindContours( binaryImg._getGrayscaleBitmap(), self.mMemStorage, cv.CV_RETR_TREE, cv.CV_CHAIN_APPROX_SIMPLE)
retVal = self._extractFromBinary(seq,False,colorImg,minsize,maxsize)
del seq
return FeatureSet(retVal)
Run Code Online (Sandbox Code Playgroud)
致命的 Python 错误:(pygame 降落伞)分段错误
这意味着某些代码崩溃了,现在您需要对其进行调试以查找问题。我假设你正在学习一些东西;不妨学习如何调试;-)
有时它可以工作,有时它只是崩溃,即使镜头没有被遮挡。当我运行它超过大约三十秒时,它几乎总是会崩溃。
这些是堆损坏或数据争用的典型症状。
我已经重新安装并修复了 SimpleCV 中的许多问题,并尝试重新安装 Pygame,但似乎没有帮助。
你为什么认为会呢?您的问题看起来根本不像安装问题。
因此,您要做的就是:在 Linux 上调试堆损坏问题的工具是 valgrind。像这样运行它:
valgrind python your-code.py
Run Code Online (Sandbox Code Playgroud)
不幸的是,默认的 Python 安装不是 Valgrind 友好的,上面的命令可能会产生很多“未初始化的内存读取”错误。您需要使用此抑制文件来抑制其中的大部分。
可以集中精力处理包含非 Python 部分(尤其是 SimpleCV)的错误。您正在寻找invalid {read,write} ... N bytes after block ....
如果您发现这样的错误,您可以尝试使用 GDB 进一步调试它,或者将其报告给 SimpleCV 开发人员并希望得到最好的结果。
如果没有发现错误,您可以构建一个 Valgrind 友好的 Python 版本(说明),然后重试。
如果上面的运行是 Valgrind 干净的,那么您可能会遇到竞争而不是堆损坏。使用ThreadSanitizer重复此操作。
| 归档时间: |
|
| 查看次数: |
1691 次 |
| 最近记录: |