0

そのカメラでmicropythonを使用してコードを実行しています:OpenMV Camera

Python で、self が定義されていないというエラーがランダムに発生します。これは私のpythonコードがどのように見えるかです:(ファイル全体が長すぎるでしょう)

class BlobAnalyser:
#
#constructor and lots of functions
#...
#
    def findLandmarkCombo(self, bnoAngle, playingTowardsBlue):
        self.findBlobs()
        print(type(self))
        self.possibleLandmarkIDs = []
        if len(self.blobs) == 0:
            return None
        for blobIndex in range(len(self.blobs)):
            self.possibleLandmarkIDs.append([])
            #and so on and so on

現在、2 つの異なるエラー メッセージが表示されます。

時々、self.findBlobs() 内または "self.possibleLandmarkIDs = []" で

AttributeError: ',' オブジェクトに属性 'possibleLandmarkIDs' がありません

「,」が「int」または「(矢印記号)」である場合がありますが、これはおそらく、コンピューターとカメラ間の通信が中断されているためです。

他のタイプのエラーは print(type(self)) にあります。「ローカル変数 self が定義される前に呼び出されました」というエラー メッセージです。このエラーは、関数の呼び出し中に発生したことはなく、常に関数内にあります。

これらのエラーは完全にランダムに発生します。このメソッドは数百回呼び出され、突然機能しなくなりましたか? そして、このクラスのインスタンスは特定のスコープ内にないため (インタープリターを開いて >>> a = 0 と入力したように作成されます)、ガベージ コレクターによって削除されるとは考えられません。

誰かがそれが何であるか、または私が研究を続けることができるか考えていますか? ご回答をお待ちしております。desireentz

編集:

ここで、findBlobs(self) 関数を追加しました。

def findBlobs(self):
        img = sensor.snapshot()
        #merge = True,
        allBlobs = img.find_blobs(self.thresholds, pixels_threshold=200, area_threshold=150, merge=True)
        self.blobs = []
        print("=====")
        i = 0
        for blob in allBlobs:
            i += 1
            img.draw_string(blob.cx() - 5, blob.cy() - 5, str(i))
            img.draw_rectangle(blob.rect())
            self.blobs.append(blob)
            print(str(i) + ": " + str(bin(blob.code())))
        self.sortBlobs()
4

1 に答える 1

2

最初は、これは一般的な (マイクロ) python エラーだと思っていたので、このトピックをここに作成しました。次に、OpenMV カメラの公式フォーラムに同じ質問を投稿し、ファイル全体をアップロードしました。ファームウェアの開発者の 1 人は、パフォーマンスが大幅に低下するため、この micropython の実装にはスタック保護がないと答えました。そして、再帰関数を使用していたため、スタックがいっぱいになるとヒープが破損し、これらの「ランダムな」エラーが発生しました。

于 2017-06-26T06:55:12.793 に答える