Raspberry PiとOpenCVで遭遇したバグと対処法
はじめに
嫁にせがまれたので、飼い犬のLINEスタンプを作って公開しました。数は少ないけどね。 作ったのは良いけど、飼い犬のLINEスタンプなんて自己満足以上の何者でも無いよなとか脳裏をよぎりもしましたが、 作る作業自体は結構楽しかったので、またやりたいですね。
イケメンチワワのもっちん そんなわけで、8個120円は高いなと自分でも思いますがよろしく。30円ぐらい私の手元に入ります。
Raspberry PiとOpenCVは、手軽に画像処理や機械学習を行うことができる組み合わせです。しかし、進めていく中でいくつかのバグに遭遇することがあります。本記事では、Raspberry PiとOpenCVで開発を進める中で出会ったバグとその対処法を紹介します。これらの対処法を参考に、あなたのプロジェクトをスムーズに進めることができるでしょう。
OpenCV周り特有のエラー
The total matrix size does not fit to “size_t” type in function ‘setSize’
terminate called after throwing an instance of 'cv::Exception'
what(): OpenCV(4.5.3) /tmp/opencv/opencv-4.5.3/modules/core/src/matrix.cpp:274: error: (-211:One of the arguments' values is out of range) The total matrix size does not fit to "size_t" type in function 'setSize'
SIGABRT: abort
PC=0xb4944f14 m=0 sigcode=4294967290
goroutine 0 [idle]:
runtime: unknown pc 0xb4944f14
stack: frame={sp:0xbed55868, fp:0x0} stack=[0xbe557214,0xbed56258)
要因としては、何故か画像として取得されるものの-XXXみたいな負の値が帰ってくることがありエラーで落ちているというものでした。 あまり原因を深堀りしても良いことなさそうなのでこんな感じに、画像のサイズが負の値の場合は処理しないようにしました。
if 0 < int(float64(img.Rows())) && 0 < int(float64(img.Cols())) {
//やりたい処理
qr.Detect(img, &points)
strtmp = qr.Decode(img, points, &straight_qrcode)
if len(strtmp) > 0 {
fmt.Println(strtmp)
break
}
}
とりあえず暫定対策にはなるので残します。
error: (-4:Insufficient memory) Failed to allocate 2756250000 bytes in function ‘OutOfMemoryError’
メモリ足りないよ系のエラーですね。 今回のケースだと、2.567 GBなので、Raspberry piに積んでるメモリの数を凌駕してます。 とりあえず、読み込んでいる画像を小さくするとか、メモリを解放してあげることで対処します。
4GB以上のサイズでメモリもそれ以上積んでるのになぁと言うのであれば、64Bit対応のOSを使うとかそんな話になると思います。
terminate called after throwing an instance of 'cv::Exception'
what(): OpenCV(4.5.3) /tmp/opencv/opencv-4.5.3/modules/core/src/alloc.cpp:73: error: (-4:Insufficient memory) Failed to allocate 2756250000 bytes in function 'OutOfMemoryError'
SIGABRT: abort
PC=0xb4956f14 m=0 sigcode=4294967290
xxx.Close()
で解放できるので使い終わった変数や構造体はお片付けしましょうって話でした。
おわりに
本記事では、Raspberry PiとOpenCVを使ってプロジェクトを進める中で遭遇した2つのバグとその対処法を解説しました。具体的には、「The total matrix size does not fit to “size_t” type in function ‘setSize’」というエラーと、「error: (-4:Insufficient memory) Failed to allocate 2756250000 bytes in function ‘OutOfMemoryError’」というエラーです。これらのエラーが発生した場合には、画像のサイズが負の値でないか確認したり、メモリの解放を行うことで対処することができます。これらの対処法を参考に、Raspberry PiとOpenCVを使ったプロジェクトをスムーズに進めてください。