Numpy阵列的流畅接口。

degas的Python项目详细描述


德加

numpy数组的流畅接口。非常适合链接方法 计算机视觉软件包,即skimageopencv

开始

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

我们只需传递对函数的引用,以及包含所有附加参数的字典。

代码现在可读性更强了。{ }数组只存在于窄范围内,这意味着它们可以立即标记为内存扫描。现在更改管道顺序也容易多了。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java将Map<String,String>传递给需要Map<String,Object>   java在循环中使用字符串而不是StringBuilder是否会造成内存损失?   jnlp如何更新java控制台JRE?   java更改、修改和重新打包CXFAPI源文件   JavaFXJava应用程序在Fedora上运行一段时间后关闭   使用来自不同类的方法的java   java如何通过ant脚本在linux中使用subst?   java在使用camunda modeler进行base64编码/解码时出错   获取java。netbeans、weblogic和fastswap设置为true时的lang.NoSuchMethodError   java如何提高FinalizerThread在GC中收集对象的优先级   java检测具有相同根的单词   netbeans crud应用程序中的java错误