OpenStitching / stitching

A Python package for fast and robust Image Stitching
Apache License 2.0
1.93k stars 148 forks source link

Request a complete configuration file (requirements.txt) that works #183

Closed yecheng-9860 closed 3 months ago

yecheng-9860 commented 6 months ago

I keep getting errors in the reproduction process but can't find a solution. Maybe there is something wrong with my configuration file?

My requirements.txt

python==3.8

certifi @ file:///C:/b/abs_91u83siphd/croot/certifi_1700501720658/work/certifi
cfgv==3.3.1
charset-normalizer==2.0.12
distlib==0.3.8
filelock==3.4.1
identify==2.4.4
idna==3.6
importlib-metadata==4.8.3
importlib-resources==5.2.3
install==1.3.5
largestinteriorrectangle==0.2.0
llvmlite==0.32.1
nodeenv==1.6.0
numba==0.49.1
numpy==1.21.6
opencv-contrib-python==4.3.0.38
opencv-python==4.7.0.72
platformdirs==2.4.0
pre-commit==2.17.0
PyYAML==6.0.1
requests==2.27.1
stitching==0.5.3
toml==0.10.2
typing_extensions==4.1.1
urllib3==1.26.18
virtualenv==20.16.2
wincertstore==0.2
zipp==3.6.0

Traceback (most recent call last):

stitching s1.jpg s2.jpg into result.jpg
**Traceback (most recent call last):**
  File "D:\Tools\Anaconda3\envs\stitch\lib\runpy.py", line 194, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "D:\Tools\Anaconda3\envs\stitch\lib\runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "D:\Tools\Anaconda3\envs\stitch\Scripts\stitch.exe\__main__.py", line 7, in <module>
  File "D:\Tools\Anaconda3\envs\stitch\lib\site-packages\stitching\cli\stitch.py", line 312, in main
    panorama = stitcher.stitch(images, feature_masks)
  File "D:\Tools\Anaconda3\envs\stitch\lib\site-packages\stitching\stitcher.py", line 108, in stitch
    self.prepare_cropper(imgs, masks, corners, sizes)
  File "D:\Tools\Anaconda3\envs\stitch\lib\site-packages\stitching\stitcher.py", line 190, in prepare_cropper
    self.cropper.prepare(imgs, masks, corners, sizes)
  File "D:\Tools\Anaconda3\envs\stitch\lib\site-packages\stitching\cropper.py", line 56, in prepare
    lir = self.estimate_largest_interior_rectangle(mask)
  File "D:\Tools\Anaconda3\envs\stitch\lib\site-packages\stitching\cropper.py", line 93, in estimate_largest_interior_rectangle
    import largestinteriorrectangle
  File "D:\Tools\Anaconda3\envs\stitch\lib\site-packages\largestinteriorrectangle\__init__.py", line 1, in <module>
    from .lir import lir, pt1, pt2
  File "D:\Tools\Anaconda3\envs\stitch\lib\site-packages\largestinteriorrectangle\lir.py", line 1, in <module>
    from .lir_basis import largest_interior_rectangle as lir_basis
  File "D:\Tools\Anaconda3\envs\stitch\lib\site-packages\largestinteriorrectangle\lir_basis.py", line 91, in <module>
    def span_map(grid, h_adjacency, v_adjacency):
  File "D:\Tools\Anaconda3\envs\stitch\lib\site-packages\numba\core\decorators.py", line 198, in wrapper
    disp.compile(sig)
  File "D:\Tools\Anaconda3\envs\stitch\lib\site-packages\numba\core\compiler_lock.py", line 32, in _acquire_compile_lock
    return func(*args, **kwargs)
  File "D:\Tools\Anaconda3\envs\stitch\lib\site-packages\numba\core\dispatcher.py", line 794, in compile
    cres = self._compiler.compile(args, return_type)
  File "D:\Tools\Anaconda3\envs\stitch\lib\site-packages\numba\core\dispatcher.py", line 77, in compile
    status, retval = self._compile_cached(args, return_type)
  File "D:\Tools\Anaconda3\envs\stitch\lib\site-packages\numba\core\dispatcher.py", line 91, in _compile_cached
    retval = self._compile_core(args, return_type)
  File "D:\Tools\Anaconda3\envs\stitch\lib\site-packages\numba\core\dispatcher.py", line 104, in _compile_core
    cres = compiler.compile_extra(self.targetdescr.typing_context,
  File "D:\Tools\Anaconda3\envs\stitch\lib\site-packages\numba\core\compiler.py", line 568, in compile_extra
    return pipeline.compile_extra(func)
  File "D:\Tools\Anaconda3\envs\stitch\lib\site-packages\numba\core\compiler.py", line 339, in compile_extra
    return self._compile_bytecode()
  File "D:\Tools\Anaconda3\envs\stitch\lib\site-packages\numba\core\compiler.py", line 401, in _compile_bytecode
    return self._compile_core()
  File "D:\Tools\Anaconda3\envs\stitch\lib\site-packages\numba\core\compiler.py", line 381, in _compile_core
    raise e
  File "D:\Tools\Anaconda3\envs\stitch\lib\site-packages\numba\core\compiler.py", line 372, in _compile_core
    pm.run(self.state)
  File "D:\Tools\Anaconda3\envs\stitch\lib\site-packages\numba\core\compiler_machinery.py", line 341, in run
    raise patched_exception
  File "D:\Tools\Anaconda3\envs\stitch\lib\site-packages\numba\core\compiler_machinery.py", line 332, in run
    self._runPass(idx, pass_inst, state)
  File "D:\Tools\Anaconda3\envs\stitch\lib\site-packages\numba\core\compiler_lock.py", line 32, in _acquire_compile_lock
    return func(*args, **kwargs)
  File "D:\Tools\Anaconda3\envs\stitch\lib\site-packages\numba\core\compiler_machinery.py", line 291, in _runPass
    mutated |= check(pss.run_pass, internal_state)
  File "D:\Tools\Anaconda3\envs\stitch\lib\site-packages\numba\core\compiler_machinery.py", line 264, in check
    mangled = func(compiler_state)
  File "D:\Tools\Anaconda3\envs\stitch\lib\site-packages\numba\core\typed_passes.py", line 288, in run_pass
    parfor_pass.run()
  File "D:\Tools\Anaconda3\envs\stitch\lib\site-packages\numba\parfors\parfor.py", line 2599, in run
    ConvertNumpyPass(self).run(self.func_ir.blocks)
  File "D:\Tools\Anaconda3\envs\stitch\lib\site-packages\numba\parfors\parfor.py", line 1769, in run
    new_instr = self._numpy_to_parfor(equiv_set, lhs, expr)
  File "D:\Tools\Anaconda3\envs\stitch\lib\site-packages\numba\parfors\parfor.py", line 1867, in _numpy_to_parfor
    return self._numpy_map_to_parfor(equiv_set, call_name, lhs, args, kws, expr)
  File "D:\Tools\Anaconda3\envs\stitch\lib\site-packages\numba\parfors\parfor.py", line 1884, in _numpy_map_to_parfor
    index_vars, loopnests = _mk_parfor_loops(pass_states.typemap, size_vars, scope, loc)
  File "D:\Tools\Anaconda3\envs\stitch\lib\site-packages\numba\parfors\parfor.py", line 1736, in _mk_parfor_loops
    for size_var in size_vars:

TypeError: Failed in nopython mode pipeline (step: convert to parfors)
'NoneType' object is not iterable
yecheng-9860 commented 6 months ago

Maybe there is something wrong with def estimate_largest_interior_rectangle(self, mask): And i cannot correctly import largestinteriorrectangle ,then I commented out the function and rewrote it with reference to issues:119 . It works out.

    def estimate_largest_interior_rectangle(self, mask):
        # largestinteriorrectangle is only imported if cropping
        # is explicitly desired (needs some time to compile at the first run!)
        # transform the panorama image to grayscale and threshold it
        # gray = cv.cvtColor(mask, cv.COLOR_BGR2GRAY)
        thresh = cv.threshold(mask, 0, 255, cv.THRESH_BINARY)[1]

        # Finds contours from the binary image
        cnts = cv.findContours(thresh.copy(), cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)
        cnts = imutils.grab_contours(cnts)

        # get the maximum contour area
        c = max(cnts, key=cv.contourArea)

        # get a bbox from the contour area
        (x, y, w, h) = cv.boundingRect(c)

        # crop the image to the bbox coordinates
        mask = mask[y:y + h, x:x + w]
        lir = Rectangle(*(x, y, w, h))

        return lir
lukasalexanderweber commented 6 months ago

Are you on Windows 11?

lukasalexanderweber commented 6 months ago

related: https://github.com/OpenStitching/lir/discussions/28

lukasalexanderweber commented 6 months ago

Could you upgrade numba and check if it solves the problem?