Сборка библиотеки pHash в Windows

Я пытался собрать pHash(http://phash.org/) на своем компьютере с Windows, и мне не повезло. Я новичок в программировании настольных приложений. Я буду использовать библиотеку pHash с Python через ctypes. Может ли кто-нибудь опубликовать шаги, связанные с созданием pHash?

Что я пробовал, так это открыть pHash.sln с помощью Visual Studio 2008, выбрать выпуск (в отличие от отладки) и собрать pHash. Я не был уверен, куда он строится, так как не мог найти файл. Я пытался искать в папке проектов Visual Studio, но ее там не было, поэтому я предположил, что она собирается в pHash/release/pHash.dll, но когда я загружаю эту dll с помощью ctypes.cdll, ни одна из функций, перечисленных в документах pHash (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.


person user594044    schedule 01.04.2012    source источник


Ответы (1)


За исключением некоторых других функций, никакие функции pHash не экспортируются из pHash.dll. Это можно проверить с помощью DependencyWalker http://www.dependencywalker.com/. Попробуйте добавить __declspec(dllexport) перед объявлениями функций в pHash.h (например, для ph_dct_imagehash) и перекомпилируйте.

person cgohlke    schedule 01.04.2012
comment
Я сделал это с помощью ph_dct_imagehash, и теперь он отображается в списке функций dllexport. Но теперь Python Ctypes говорит, что больше не может найти этот модуль, хотя имя и местоположение файла не изменились. - person user594044; 05.04.2012
comment
Можно ли еще собрать pHash в Windows? phash.org перечисляет только загрузку Linux ... возможно, это может быть встроено в WSL, которого не существовало, когда был дан ответ на этот вопрос, но даже в этом случае попытка ссылки из-за пределов WSL может быть проблематичной. - person Michael; 03.04.2018