Shapeworks: 包装 shapworkspy 和用例重组

创建于 2020-12-14  ·  13评论  ·  资料来源: SCIInstitute/ShapeWorks

最有用的评论

重组步骤:

  1. 将 Jupyter 笔记本中使用的所有辅助函数包含到 ShapeWorks python 模块中。
  2. 更新笔记本以使用 python 模块中的辅助函数。
  3. 使用 python 模块和 python API 命令重写 python 用例,而不使用 GroomUtils。

所有13条评论

来自#818

重新设计新郎实用程序,使其可以交互运行,而不是批量运行。
这将使它不必保存中间修饰文件(问题#598)并且可以跳过步骤(问题#507)

让我们将此问题用作 shapeworks python 打包和相关用例设计的父/驱动问题。 我们可以稍后添加更多重点问题并将它们与这个问题联系起来。 我已经相应地关闭了相关问题。

@jadie1 @iyerkrithika21请加入 GC 插槽,将此作为 Python API 的一部分进行讨论。 将此提上议程,以便您在需要时提前离开。

我现在正在研究 Python 模块打包。 如果您有任何建议或想法,请 ping 我。

我发现的一些说明:

到目前为止,我对 conda 最感兴趣的是据称更好的依赖规范,但我很乐意拥有任何东西。
使用 conda 的原因是我们应该能够用这个包安装所有东西:命令行、python 模块和工作室。 但我们将从我们的 python 模块开始。

我最大的恐惧是多平台问题会影响我们的生活,所以我会先尝试让 OSX 工作,然后从那里开始。

这些用例在 Ubuntu 18.04 上对我不起作用,我不得不:

  1. 在 RunUseCase.py 中,我在顶部添加了sys.path.append('../../build/cmake-build-release/bin/')
  2. 设置环境变量LD_LIBRARY_PATH=../../dependencies/install/lib/ (否则它会抱怨缺少“libvcl.so”)

为了有保存中间输出的选项,我们可以在每个操作中包含写选项而不是单独的写/保存函数吗?
我想象的是:

img.binarize(write=False)
img.resample(write=True).binarize(write=True)

代替

img.binarize()
img.write()
img.resample()
img.write()

这可能需要一个文件名作为输入参数
例如,img.binarize(write=True, filename='blabla')

@archanasri @cchriste 的想法?

为了有保存中间输出的选项,我们可以在每个操作中包含写选项而不是单独的写/保存函数吗?
我想象的是:

img.binarize(write=False)
img.resample(write=True).binarize(write=True)

代替

img.binarize()
img.write()
img.resample()
img.write()

Image.write 和其他东西一样是可链接的。 只要把它放在链中,如果
你想要它。

img.binarize().write(<path>)
img.resample().write(<path>).binarize()

2021 年 1 月 19 日,星期二,下午 4:58,Shireen Elhabian通知@github.com
写道:

这可能需要一个文件名作为输入参数
例如,img.binarize(write=True, filename='blabla')

@archanasri https://github.com/archanasri @cchriste
https://github.com/cchriste想法?

要选择保存中间输出,我们可以包括
每个操作中的写入选项,而不是单独的写入/保存
功能?
我想象的是:

img.binarize(write=False)
img.resample(write=True).binarize(write=True)

代替

img.binarize()
img.write()
img.resample()
img.write()


你收到这个是因为你被提到了。
直接回复本邮件,在GitHub上查看
https://github.com/SCIInstitute/ShapeWorks/issues/865#issuecomment-763221837
或取消订阅
https://github.com/notifications/unsubscribe-auth/AAJT3EP3HDOHQGC54NMWSJDS2YMA7ANCNFSM4U3KV45Q
.

Image.write 和其他东西一样是可链接的。 如果需要,只需将其放入链中即可。 img.binarize().write(<path>) img.resample().write(<path>).binarize()

我知道 write 函数也是可链接的; 我在每个操作中建议写选项的观点是只有一个函数并传递标志我们是否要保存中间图像并简化用例。
示例 sudo 代码:

function groom(write_flag):
    img.binarize(write = write_flag).resize(write = write_flag).crop(write=write_flag)
groom(write_flag = True)
groom(write_flag = False)

这样,我们就可以避免重复同一段代码。 只是想知道这个想法的可行性。

我们试图拆除 GroomUtils.py 集的原因之一
“帮手”功能是让我们的美容操作更加透明。
无需将这些操作打包成单体函数,变得灵活
仅通过参数传递,直接创建就容易多了,
易于理解的用例演示。 如果我们不使用(很多)链接
我们的例子,将非常直接地传达写作能力
必要时的中间结果。 现在他们似乎都
必要的,因为我们有需要这些结果的用例,因为
一个 GroomUtils 函数执行一些(可能是任意的)一组
操作,保存其结果,然后下一个函数读取这些结果
并继续处理。

我建议将所有内容都展平以开始,对于所有用例,而不是
只是椭球体。 我相信我们将看到的是一个相对
在某些情况下明显不同的直接操作集
(例如:当原始图像“随行”时)。 用户会做什么
从我们的例子中可以更清楚地了解什么可以和/或
应该为他们自己的数据集做。

如果我是用户,以下是我想要模仿的示例:

for img in images:

# since we're starting with fuzzy data, we first need to ensure it's a
binary (black and white) image in order to <explain>
img.binarize()

# next, we must ensure images all have the same logical dimensions since
<explain>
img.resize()

# now we'll crop these images using the bounds we computed earlier so they
all encompass the data without leftover space (since it can be costly and
pointless to compute)
img.crop(bounds)

我们可以提供链接写入任何这些操作的示例,例如
如在其中之一后添加.write(<path> 。 我们不想要的是一些
“只是做”的功能,因为“它”对每个人来说都不同
数据集。 反而,
我们将通过向用户展示正在做的事情并不是全部,从而赋予他们权力
那个复杂而且很容易改变。 而不是给他们一个
具有无数参数的黑盒界面,给他们钥匙,让
他们开车。 我希望这有助于弄清楚摆脱背后的整个想法
的 GroomUtils。

2021 年 1 月 25 日星期一上午 9:49 Krithika Iyer通知@github.com
写道:

Image.write 和其他东西一样是可链接的。 只要把它放在链中,如果
你想要它。 img.binarize().write()
img.resample().write().二值化()
... <#m_-7433729883366947300_>

我知道 write 函数也是可链接的; 我的观点
建议每个操作中的写选项只有一个
函数并传递标志是否要保存中间图像
或否并简化用例。
示例 sudo 代码:

功能新郎(写标志):

img.binarize(write = write_flag).resize(write = write_flag).crop(write=write_flag)

新郎(write_flag = True)

新郎(write_flag = False)

这样,我们就可以避免重复同一段代码。


你收到这个是因为你被提到了。
直接回复本邮件,在GitHub上查看
https://github.com/SCIInstitute/ShapeWorks/issues/865#issuecomment-766952032
或取消订阅
https://github.com/notifications/unsubscribe-auth/AAJT3EJND2F3EDVU75NB6ITS3WOIPANCNFSM4U3KV45Q
.

@iyerkrithika21 @jadie1

我同意@cchriste。 除非在语义上合理(例如,重采样二进制图像),否则我们不要使用链接,即使对于这些情况,我们也不必编写此重采样(组合)步骤的每个中间输出。 让我们使用例易于遵循、自我记录并且易于用户适应和定制。

编写(特别是临时用于调试)图像是一个很好的例子
当链接是合理的。

# let's see what happened
img.operation(...) -> img.operation(...).write(<path>)

然而,当这是一个重要的步骤时,最好把它放在它的
自己的一行评论。

...
# now let's write the results
img.write(<path>)

2021 年 1 月 25 日星期一上午 10:34 Shireen Elhabian通知@github.com
写道:

@iyerkrithika21 https://github.com/iyerkrithika21 @jadie1
https://github.com/jadie1

我同意@cchriste https://github.com/cchriste 。 我们不要用
除非在语义上合理(例如,重新采样)
二进制图像),即使对于这些情况,我们也不必编写每个
此重采样(组合)步骤的中间输出。 让我们做用例
易于遵循、自我记录且易于用户适应和定制。


你收到这个是因为你被提到了。
直接回复本邮件,在GitHub上查看
https://github.com/SCIInstitute/ShapeWorks/issues/865#issuecomment-766983878
或取消订阅
https://github.com/notifications/unsubscribe-auth/AAJT3EKKARLKY4VKBRPHJWLS3WTSNANCNFSM4U3KV45Q
.

重组步骤:

  1. 将 Jupyter 笔记本中使用的所有辅助函数包含到 ShapeWorks python 模块中。
  2. 更新笔记本以使用 python 模块中的辅助函数。
  3. 使用 python 模块和 python API 命令重写 python 用例,而不使用 GroomUtils。

请记住,我们已经在其中启动了 python_module 分支。 它还没有被合并一分钟,但如果有人解决这个问题,请通知我们。 它在我的优先级列表中名列前茅。

此页面是否有帮助?
0 / 5 - 0 等级