5

自動運転ロボットで使用する blob を見つけるために SimpleCV を使用しています。問題は、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)
4

4 に答える 4

5

Kat さん、SimpleCV ブロブ ライブラリを作成しました。

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

現時点での解決策は、github リポジトリの 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)
于 2011-10-10T19:29:24.443 に答える
2

ここのSimpleCV開発者の1人であるAnthony:最後の行を変更してみてください:

sleep(0.01)

十分な速度で処理できないという問題が発生しているかどうかを確認するだけです。最近、Ubuntu 11.04 にアップグレードしましたが、10.10 以降に発生したいくつかの Python バグをつぶす必要があると思います。

また、これを私たちの問題キューに投稿していただければ幸いです: http://github.com/ingenuitas/SimpleCV/issues

于 2011-10-10T19:09:38.620 に答える
0

ブロブのしきい値を「-1」に置き換えるだけです。私は同じ問題を抱えていましたが、これで修正されました。

于 2012-01-31T10:05:04.563 に答える
0

致命的な Python エラー: (pygame パラシュート) セグメンテーション違反

これは、一部のコードがクラッシュしたことを意味し、問題を見つけるためにデバッグする必要があります。あなたは何かを学んでいると思います。デバッグする方法を学ぶかもしれません;-)

レンズがブロックされていない場合でも、機能する場合とクラッシュする場合があります。約30秒以上実行すると、ほとんどの場合クラッシュします。

これらは、ヒープの破損またはデータ競合の典型的な症状です。

SimpleCV の多くの問題を再インストールして修正し、Pygame を再インストールしようとしましたが、役に立たないようです。

なんでそうなると思った?あなたの問題は、インストールの問題のようには見えません

Linux でヒープ破損の問題をデバッグするためのツールは valgrind です。次のように実行します。

  valgrind python your-code.py

残念ながら、デフォルトの Python インストールは Valgrind に適していないため、上記のコマンドを実行すると、多くの「未初期化メモリ読み取り」エラーが発生する可能性があります。この抑制ファイルを使用して、それらのほとんどを抑制します。

Python 以外の部分 (特に SimpleCV) を含むエラーに集中できる可能性があります。を探していinvalid {read,write} ... N bytes after block ...ます。

このようなエラーが見つかった場合は、GDB を使用してさらにデバッグするか、SimpleCV 開発者に報告して最善を尽くすことができます。

エラーが見つからない場合は、Valgrind に適したバージョンの Python をビルドして ( instructions )、もう一度試してください。

上記の実行が Valgrind クリーンである場合、ヒープの破損ではなく競合が発生する可能性があります。ThreadSanitizerで繰り返します。

于 2011-10-09T15:11:10.650 に答える