ORB detector Segmentation Fault - Python [closed]

asked Sep 3 '19

lars27 gravatar image

Hi,

Whenever I try to use the ORB detector like described in the tutorial I get a segmentation fault. To be exact, when I start this small script:

import cv2 as cv
im = cv.imread('butterfly.jpg', 0)
orb = cv.ORB()
kps = orb.detect(im, None)

I get this error in PyCharm:

Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)

and this if I start in shell:

Segmentation fault (core dumped)

I am using Python 3.6.1, OpenCV 4.1.1 (built from source) and Ubuntu 16.04 LTS.

I also tried running it in gdb and backtraced it with these commands:

gdb -ex r --args python3 test.py
bt

and got the following output:

Thread 1 "python3" received signal SIGSEGV, Segmentation fault.
0x00007fffe7a4c360 in pyopencv_cv_Feature2D_detect(_object*, _object*, _object*) () from /usr/local/lib/python3.6/site-packages/cv2/python-3.6/cv2.cpython-36m-x86_64-linux-gnu.so
(gdb) bt
#0  0x00007fffe7a4c360 in pyopencv_cv_Feature2D_detect(_object*, _object*, _object*) () from /usr/local/lib/python3.6/site-packages/cv2/python-3.6/cv2.cpython-36m-x86_64-linux-gnu.so
#1  0x00000000004addfc in _PyCFunction_FastCallDict (kwargs=0x0, nargs=<optimized out>, args=0x7ffff7f71ba0, func_obj=0x7fffd61f9048) at Objects/methodobject.c:231
#2  _PyCFunction_FastCallKeywords (func=func@entry=0x7fffd61f9048, stack=stack@entry=0x7ffff7f71ba0, nargs=<optimized out>, kwnames=kwnames@entry=0x0) at Objects/methodobject.c:295
#3  0x000000000053e3ae in call_function (pp_stack=pp_stack@entry=0x7fffffffd920, oparg=oparg@entry=2, kwnames=kwnames@entry=0x0) at Python/ceval.c:4798
#4  0x0000000000542c17 in _PyEval_EvalFrameDefault (f=<optimized out>, throwflag=<optimized out>) at Python/ceval.c:3284
#5  0x000000000053e015 in PyEval_EvalFrameEx (throwflag=0, f=0x7ffff7f71a20) at Python/ceval.c:718
#6  _PyEval_EvalCodeWithName (_co=_co@entry=0x7ffff7efca50, globals=globals@entry=0x7ffff7f5a078, locals=locals@entry=0x7ffff7efca50, args=args@entry=0x0, argcount=argcount@entry=0, 
    kwnames=kwnames@entry=0x0, kwargs=0x8, kwcount=0, kwstep=2, defs=0x0, defcount=0, kwdefs=0x0, closure=0x0, name=0x0, qualname=0x0) at Python/ceval.c:4128
#7  0x000000000053ee43 in PyEval_EvalCodeEx (closure=0x0, kwdefs=0x0, defcount=0, defs=0x0, kwcount=0, kws=0x0, argcount=0, args=0x0, locals=locals@entry=0x7ffff7efca50, 
    globals=globals@entry=0x7ffff7f5a078, _co=_co@entry=0x7ffff7efca50) at Python/ceval.c:4149
#8  PyEval_EvalCode (co=co@entry=0x7ffff7efca50, globals=globals@entry=0x7ffff7f42288, locals=locals@entry=0x7ffff7f42288) at Python/ceval.c:695
#9  0x000000000042740f in run_mod (arena=0x7ffff7f5a078, flags=0x7fffffffdc00, locals=0x7ffff7f42288, globals=0x7ffff7f42288, filename=0x7ffff7e843e8, mod=0x933048) at Python/pythonrun.c:980
#10 PyRun_FileExFlags (fp=0x983f20, filename_str=<optimized out>, start=<optimized out>, globals=0x7ffff7f42288, locals=0x7ffff7f42288, closeit=1, flags=0x7fffffffdc00) at Python/pythonrun.c:933
#11 0x000000000042763c in PyRun_SimpleFileExFlags (fp=0x983f20, filename=<optimized out>, closeit=1, flags=0x7fffffffdc00) at Python/pythonrun.c:396
#12 0x000000000043b975 in run_file (p_cf=0x7fffffffdc00, filename=0x8f91e0 L"test.py", fp=0x983f20) at Modules/main.c:338
#13 Py_Main (argc=argc@entry=2, argv=argv@entry=0x8f7010) at Modules/main.c:809
#14 0x000000000041dc52 in main (argc=2, argv=<optimized out>) at ./Programs/python.c:69

I do not understand much of it. I read that for debugging python you can use py-bt, but it did not seem to work for my version. If someone ... (more)

Preview: (hide)

Closed for the following reason the question is answered, right answer was accepted by LBerger
close date 2019-09-03 05:58:33.941405

Comments

if you have got opencv4 why don't you use opencv 4.0 tutorial?

LBerger gravatar imageLBerger (Sep 3 '19)edit
3

You are right, I should have! Problem solved, it should be cv.ORB_create() instead of cv.ORB()! Thank you @LBerger

lars27 gravatar imagelars27 (Sep 3 '19)edit

@lars27, however, you should see a cv::Exception :

    kps = orb.detect(im, None)
TypeError: Incorrect type of self (must be 'Feature2D' or its derivative)

and not a segfault. please try on a simple cmdline (NOT from pycharm, it harms noobs)

berak gravatar imageberak (Sep 3 '19)edit
1

No It's finished :

import cv2 as cv

import numpy as np
img = cv.imread('g:/lib/opencv/samples/data/lena.jpg')
o = cv.ORB_create()
kps = o.detect(img,None)
len(kps)

 500
LBerger gravatar imageLBerger (Sep 3 '19)edit
1

@berak Like I said in my original question, I did try it vie cmdline, output is stated above as well. No exception was thrown.

lars27 gravatar imagelars27 (Sep 3 '19)edit