【问题标题】:Building the pHash library on Windows在 Windows 上构建 pHash 库
【发布时间】:2012-04-01 05:32:10
【问题描述】:

我一直在尝试在我的 Windows 机器上构建 pHash(http://phash.org/),但没有任何运气。我是编程桌面应用程序的新手。我将通过 ctypes 将 pHash 库与 Python 一起使用。有人可以发布构建 pHash 所涉及的步骤吗?

我尝试的是使用 Visual Studio 2008 打开 pHash.sln 并选择发布(而不是调试)并构建 pHash。我不确定它在哪里构建,因为我找不到文件。我尝试查看 Visual Studio 的项目文件夹,但它不存在,所以我认为它正在构建到 pHash/release/pHash.dll,但是当我使用 ctypes.cdll 加载该 dll 时,pHash docs(http ://phash.org/docs/howto.html) 似乎可以访问,例如ph_dct_imagehash(), ph_dct_videohash.

这是我的代码示例:

import ctypes
import inspect

PHASHPATH = "C:\Users\me\Downloads\phash\release\pHash.dll"
phash_dll = ctypes.CDLL(PHASHPATH)
phash_dll['ph_dct_imagehash']

我得到的回应是:

Traceback (most recent call last):
  File "C:\Users\me\workspace\project\src\opencv.py", line 12, in <module>
    phash_dll['ph_dct_imagehash']
  File "C:\Program Files (x86)\Python27\lib\ctypes\__init__.py", line 371, in __getitem__
    func = self._FuncPtr((name_or_ordinal, self))
AttributeError: function 'ph_dct_imagehash' not found

我是新手,所以请多多包涵。谢谢。

编辑: 我正在运行 Python 2.7。

【问题讨论】:

    标签: python c phash


    【解决方案1】:

    除了一些不同的函数,pHash.dll 没有导出任何 pHash 函数。这可以通过 DependencyWalker http://www.dependencywalker.com/ 进行验证。尝试在 pHash.h 中的函数声明前添加 __declspec(dllexport)(例如,对于 ph_dct_imagehash)并重新编译。

    【讨论】:

    • 我用 ph_dct_imagehash 做到了这一点,它现在显示在 dllexport 函数列表中。但是现在 Python Ctypes 说即使文件名和位置没有改变,它也无法找到该模块。
    • 是否仍然可以在 Windows 中构建 pHash? phash.org 只列出了一个 Linux 下载...可以说这可能是在 WSL 中构建的,在回答这个问题时它并不存在 - 但即便如此,尝试从 WSL 外部链接可能会有问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    • 1970-01-01
    • 2017-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多