python3でctypesを使用してfann(Cで記述されたニューラルネットワークライブラリ)を使用しようとしています。これまでの私の要約コードは次のとおりです。
from ctypes import *
cdll.LoadLibrary("/usr/local/lib/libdoublefann.dylib")
fann = CDLL("/usr/local/lib/libdoublefann.dylib")
# Call fann to create a neural network
nn = fann.fann_create_from_file(b'/Users/xxxxx/Code/fanncode/net/nnf_25_1339802027.net')
# this outputs 3909360
print(nn)
nn変数に対してfannライブラリ内の他の関数を呼び出そうとすると、これは現在fannニューラルネットワークになっているはずですが、Segmentation fault: 11
またはAttributeError: 'int' object has no attribute 'getMSE'
(たとえば)を取得します。私の問題は、ctypesのドキュメントによると、変数nnがintになるのに対し、関数fann_create_from_fileのfannのドキュメントには次のように記載されていることだと思います。
FANN_EXTERNAL struct fann *FANN_API fann_create_from_file(const char * configuration_file)
だから私は宣言する必要があると思います:
class FANN_API(Structure):
<fields and things which I don't know what they should be>
そして、次のことを行います。
fann.fann_create_from_file.restype = FANN_API
私の問題は、構造体FANN_APIがどうあるべきかがわからないことです。fann.hの130行目はそれを述べています#define FANN_API
が、それはそれであり、定義もそれに続くものもありません。
構造体を定義する必要があるという私の推測は正しいですか?もしそうなら、Pythonコードで宣言するためのフォーマットをどのように見つけることができますか?そうでない場合、誰かが私のコードを機能させるために私が何をする必要があるか/何を読む必要があるかを提案できますか?
ありがとう!