2011-10-08 5 views
5

자기 블로킹 로봇과 함께 사용할 수 있도록 찾기 BLOB에 SimpleCV를 사용하고 있습니다. 문제는 SimpleCV에서 findBlobs 명령을 호출 할 때입니다.SimpleCV 라이브러리 findBlob 함수를 사용하는 경우 Pygame 세그먼트 화 오류

치명적 파이썬 오류 : (파이 게임 낙하산) 분할 오류

가끔은, 작품과 그냥 충돌 다른 시간에도 렌즈 나는 완전히 넥트 카메라의 렌즈를 차단하면, 파이 게임은 나에게 오류를 제공 충돌 차단 해제되었습니다. 거의 30 초 이상 오래 실행하면 거의 항상 충돌합니다. 저는 SimpleCV에서 많은 문제를 다시 설치하고 수정하여 파이 게임을 다시 설치하려고했지만 전혀 도움이되지 않습니다. 또한 X-Box kinect를 카메라 소스로 사용하고 있습니다. 우분투 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) 

답변

0

Fatal Python error: (pygame parachute) Segmentation Fault

이 몇 가지 코드가 충돌을 의미하고, 지금은 문제를 찾아 그것을 디버깅해야합니다

여기 내 정확한 코드입니다. 나는 너가 무언가를 배우고 있다고 추정한다; 디버그 방법을 배울 수도 있습니다 .--)

Sometimes it works and other times it just crashes, even when the lens is unblocked. It will almost always crash when i run it for longer than about thirty seconds.

이러한 것들은 힙 손상이나 데이터 경합의 전형적인 증상입니다.

I have re-installed and fixed many problems in SimpleCV and tried re-installing Pygame and it doesn't seem to help.

왜 그렇게 생각 했습니까? 귀하의 문제는 에 전혀 표시되지 않습니다.은 설치 문제처럼 보입니다.

다음은 사용자가 수행하는 작업입니다. Linux에서 힙 손상 문제를 디버깅하는 도구는 valgrind입니다. 이처럼 실행

valgrind python your-code.py 

불행하게도, 기본 파이썬 설치 Valgrind의 친화적하지 않고, 위의 명령의 많은 오류를 "초기화되지 않은 메모리 읽기"를 생성 할 전망이다. 이 억제 기능을 사용하여 대부분을 억제하고자합니다. file.

비 파이썬 파트 (특히 SimpleCV)가 포함 된 오류에 집중할 수 있습니다. invalid {read,write} ... N bytes after block ...을 찾고 있습니다.

이러한 오류가 발견되면 GDB로 디버깅을 시도하거나 SimpleCV 개발자에게보고하고 최선을 다할 수 있습니다.

오류를 찾을 수 없다면 Valgrind 친숙한 버전의 Python (instructions)을 빌드하고 다시 시도하십시오.

위의 실행이 Valgrind-clean 인 경우 힙 손상이 아닌 경쟁이있을 수 있습니다. ThreadSanitizer과 같이 반복하십시오.

2

앤서니 여기 SimpleCV 개발자 중 하나는 충분히 빨리 처리 할 수없는 위치에가는 문제의 몇 가지 유형이있을 경우

sleep(0.01) 

그냥 볼 수 : 당신은 마지막 줄을 변경 시도 할 수 있습니다. 최근 Ubuntu 11.04로 업그레이드했고 10.10 이후로 튀어 나와야하는 비단 버그가 두 개 있다고 생각합니다.당신이 우리의 문제 큐에이를 게시 할 수 있다면

또한 나는 그것을 감사하겠습니다 : 여기 http://github.com/ingenuitas/SimpleCV/issues

5

캣, 나는 SimpleCV의 덩어리 라이브러리를 썼다.

우리가 1.1 릴리스를 출시 한 후에 발견 한 blob 라이브러리에는 몇 가지 문제가있었습니다. 두 큰 것들은 blob 라이브러리가 python max recursion depth를 치고 빠져 나올 것이라는 것이었다. 두 번째 것은 실제 기본 OpenCV 래퍼에서 유래하고 blob 제작자가 blob을 감지하지 못하면 pygame 오류가 발생합니다.

지금 해결책은 github repo의 master 브랜치에있는 버전을 사용하는 것입니다. 패치 된 버전은 이번 달 말에 출시 될 새로운 SimpleCV 1.2 릴리스에서도 사용할 수 있습니다. 수동으로 코드를 수정하려는 경우 나는 고정 조각 아래에 붙여 넣은 : 라인 주위

BlobMaker.py에서

55

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) 
0

단지와 방울 임계 값을 대체 "-1"; 나는 똑같은 문제가 있었는데 이것으로 해결되었다.