让 pdiffer 在 ubuntu 中运行

让 pdiffer 在 ubuntu 中运行

我正在尝试在 ubuntu 中使用 pdiffer。它是 PerceptualDiff 工具的 python 接口。 https://pypi.python.org/pypi/pdiffer

我使用 pip 安装了 pdiffer(安装 pip 之后)
我安装了 cmake
我安装了 freeimage(sudo apt-get install libfreeimage-dev)
我按照自述文件构建了 PerceptualDiff。

据我所知,一切都已设置好(没有错误)。在 Home/Documents 下,我有两张图片和一个名为 pdiff 的文件夹,其中包含已编译的 perceptualdiff 文件。

我在终端窗口中使用了 Python 解释器

从 pdiffer 导入 PDiffer

pdiff = PDiffer(bin='/home/username/Documents/pdiff/perceptualdiff')
result = pdiff('image1.png', 'image2.png')

直到最后一条命令都没有错误

回溯(最近一次调用最后一次):

File "<stdin>", line 1, in <module>
TypeError: 'PDiffer' object is not callable

这是我第一次尝试使用 Python 接口来处理 C 模块。如果您能告诉我我做错了什么(或者让我知道我需要包含哪些其他信息),我将不胜感激。

答案1

该文档缺少基本的解释。

我们先来看看你的错误。你创建了该类的一个实例PDiffer,然后尝试再次调用该实例。请查看这个非常简单的示例,其中有同样的错误:

>>> class PDiffer:
...   def __init__(self, *args, **kwargs):
...     pass
... 
>>> pdiff = PDiffer(bin="/path/to/bin")
>>> pdiff("image1.png", "image2.png")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'PDiffer' object is not callable

也就是说,文档提供了 2 个使用 pdiff 的选项。创建一个实例PDiff并为其指定二进制文件的自定义路径或使用辅助函数pdiff。为它们赋予相同的变量名并在同一个代码块中使用它们非常令人困惑。要么是这个,要么是另一个。

我不得不查看源代码以了解发生了什么。您应该改用类pdiff的方法PDiff。第二个示例是使用自定义二进制路径的此方法的快捷方式。

因此一个可行的示例是:

from pdiffer import PDiffer
pdiff = PDiffer(bin='/home/username/Documents/pdiff/perceptualdiff')
result = pdiff.pdiff('image1.png', 'image2.png')

相关内容