2011-10-08 11 views
5

自己駆動ロボットで使用するBLOBの検索にSimpleCVを使用しています。問題は、SimpleCVでfindBlobsコマンドを呼び出すときです。SimpleCVライブラリfindBlob関数を使用した場合のPygameセグメンテーションエラー

致命的なPythonのエラー:(pygameのパラシュート)セグメンテーションフォールト

時にはそれは、動作し、それだけでクラッシュし、他の回も、レンズ、私は完全にKinectのカメラのレンズをブロックすると、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) 

答えて

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 

は残念ながら、デフォルトのPythonのインストールは、Valgrindはフレンドリーではなく、上記のコマンドの多くのエラーを「初期化されていないメモリが読み」を生成する可能性があります。この抑制を使用してほとんどを抑制したいでしょうfile

Python以外の部分(特に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以降にポップアップしたスカッシュに必要ないくつかのPythonバグがあると思います。あなたが私たちの発行キューにこれを投稿することができれば

また、私はそれをお願い申し上げます。ここに http://github.com/ingenuitas/SimpleCV/issues

5

キャットは、私がSimpleCVブロブライブラリを書きました。

1.1リリースの出荷後に見つかったBLOBライブラリにはいくつか問題がありました。 2つの大きな点は、blobライブラリがpythonの最大再帰深度に達し、救済されることでした。 2番目は実際の基礎となるOpenCVラッパーに由来し、ブロブがブロブメーカーによって検出されないときには、Pygameエラーを引き起こします。

今の解決策は、github repoのマスターブランチにあるバージョンを使用することです。パッチを適用したバージョンは、今月後半にリリースされる新しい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」;私は同じ問題を抱えていて、これで解決しました。