如何为 opencv 或 tensorflow 等复杂包指定 python 类型提示?

Ber*_*ald 6 python opencv types tensorflow

我正在构建一个 python 库,并编写一个如下所示的函数:

def addimg(image) -> None:
Run Code Online (Sandbox Code Playgroud)

现在我想将图像类型指定为 OpenCV 图像(例如 cv2.readimg() 的结果)。有没有一种优雅的方法来做到这一点?

PyTorch 或 TensorFlow 张量也有同样的问题。

否则,我的库最终会出现没有指定类型的第二个变量,我认为这看起来非常难看。

非常感谢!最好的,伯恩哈德

aer*_*mat 9

OpenCV 图像的类型是 Numpy 数组(名为ndarray):

>>> image = cv2.imread("my_image.png")
>>> type(image)
numpy.ndarray
Run Code Online (Sandbox Code Playgroud)

所以你可以使用:

from numpy import ndarray

def addimg(image: ndarray) -> None:
    ...
Run Code Online (Sandbox Code Playgroud)

更新:

Numpy 版本 1.21 引入了numpy.typing.NDArray一个通用版本,ndarray允许指定数据类型。

例如,如果图像使用uint8

from numpy import uint8
from numpy.typing import NDArray

def addimg(image: NDArray[uint8]) -> None:
    ...
Run Code Online (Sandbox Code Playgroud)