Numpy阵列的流畅接口。
degas的Python项目详细描述
德加
numpy
数组的流畅接口。非常适合链接方法
计算机视觉软件包,即skimage
,opencv
。
开始
pip install degas
链接方法-fluentimage
基本原理
这个模式使我们能够从python的内部内存中获得一些负载 管理机制,使代码更具可读性。
让我们考虑这样的函数(请记住,图像是非常重的变量):
fromskimage.colorimportrgb2grayfromskimage.exposureimportequalize_adapthistfromskimage.featureimportcannyfromskimage.transformimportrescaledefpreprocess(src,scale_factor):gray=rgb2gray(src)downscaled=rescale(gray,scale_factor)equalized=equalize_adapthist(downscaled,clip_limit=0.2)edges=canny(equalized,sigma=2.0)returnedges
在这个函数中,我们创建4个对象,每个对象都有唯一的引用标签:
- 灰色
- 缩小比例
- 均衡
当解释器进入preprocess
作用域时,在函数结束时,这4个对象都存在于内存中,因为它们的引用计数是1。我们的内存消耗随着每次图像操作而线性增长。考虑到图像甚至可以超过100MP,这只是一个过度杀戮。怎么办?
我们为图像FluentImage
引入简单的包装器,这将帮助我们链接后续方法。
https://martinfowler.com/bliki/FluentInterface.html
因为我们不能简单地为Python定义新的运算符,所以我们正在重载现有的^ {< CD6>}运算符{{CD7}}(谁使用它?)。我认为它看起来很酷,类似于来自F#
的管道|>
运算符。
示例
fromdegasimportFluentImagefromskimage.colorimportrgb2grayfromskimage.exposureimportequalize_adapthistfromskimage.featureimportcannyfromskimage.transformimportrescaledefpreprocess(src,scale_factor):withFluentImage(src)asthresh:preprocessed>>(rgb2gray)>>(rescale,{'scale_factor':scale_factor})>>(equalize_adapthist,{'clip_limit':0.2})>>(canny,{'sigma':2.0})returnpreprocessed
我们只需传递对函数的引用,以及包含所有附加参数的字典。
代码现在可读性更强了。{