繁体   English   中英

Sphinx autodoc 和 OpenCV (cv2) 错误 (Python 3.7)

[英]Sphinx autodoc and OpenCV (cv2) errors (Python 3.7)

首先,说我对狮身人面像完全陌生。 我正在研究一个使用 opencv 的图像处理项目。 虽然我已经能够设置 sphinx(并成功地使用一些简单的模块对其进行了测试),但我正在努力使其与我的主模块一起工作。 起初我遇到错误,因为 autodoc 无法识别某些 opencv (cv2) 类,我猜这些类只能在运行时“工作”(例如 VideoCapture.read() 的输出被解释为 None 并且无法获得其形状,或 cv2 .imshow 也破坏了 html 构建)。 为了避免这种情况,我包括

autodoc_mock_imports = ['cv2', 'numpy']

在我的 conf.py 文件中。 上述问题消失了,但现在我遇到了一个新问题:

WARNING: autodoc: failed to import module 'ch01_06_movie_and_beads'; the following exception was       raised:
Traceback (most recent call last):
File "C:\ProgramData\Anaconda3\envs\Book_OpenCV3\lib\site-packages\sphinx\ext\autodoc\importer.py", line 32, in import_module
return importlib.import_module(modname)
File "C:\ProgramData\Anaconda3\envs\Book_OpenCV3\lib\importlib\__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
 File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
 File "<frozen importlib._bootstrap>", line 983, in _find_and_load
 File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
 File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
 File "<frozen importlib._bootstrap_external>", line 728, in exec_module
 File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
 File "C:\Users\Carlos\PycharmProjects\Book_OpenCV3\Chapter_01\ch01_06_movie_and_beads.py", line 244, in <module>
resized_frame = resize_with_aspect_ratio(frame, width=1000)
 File "C:\Users\Carlos\PycharmProjects\Book_OpenCV3\Chapter_01\ch01_06_movie_and_beads.py", line 222, in resize_with_aspect_ratio
(h, w) = img.shape[:2]
 File "C:\ProgramData\Anaconda3\envs\Book_OpenCV3\lib\site-packages\sphinx\ext\autodoc\mock.py", line 57, in __getitem__
return _make_subclass(key, self.__display_name__, self.__class__)()
 File "C:\ProgramData\Anaconda3\envs\Book_OpenCV3\lib\site-packages\sphinx\ext\autodoc\mock.py", line 74, in _make_subclass
attrs = {'__module__': module, '__display_name__': module + '.' + name}
TypeError: can only concatenate str (not "slice") to str

提到的方法的代码是:

def resize_with_aspect_ratio(img=None, width=None, height=None, inter=cv2.INTER_AREA):
  if img is None:
      return None
  (h, w) = img.shape[:2]
  if width is None and height is None:
      return img
  if width is None:
      r = height / float(h)
      dim = (int(w * r), height)
  else:
      r = width / float(w)
      dim = (width, int(h * r))
  return cv2.resize(img, dim, interpolation=inter)

我知道 autodoc 不喜欢 im.Shape[:2] 中的切片,但是如果我必须手动修改整个代码,那将是一场噩梦。 既然我说我是 sphinx autodoc 的新手,我做错了什么吗? 我错过了什么? 提前致谢。

我通过将主要代码放入__main__来解决它:

if __name__ == "__main__":
    [...] # some stuff
    capture = cv2.VideoCapture(str(input_file))
    has_frame, frame = capture.read()
    resized_frame = resize_with_aspect_ratio(frame, width=1000)
    [...] # more stuff

autodoc_mock_imports甚至没有必要在conf.py文件。

希望这对某人有帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM