Я делаю проект с графическим интерфейсом для ультразвуковой диагностики печени.
Я использую PyQT5 (5.12.1) для GUI и sklearn (0.21.2) для статистических моделей. Основные особенности текстур, которые я получаю из пирадиомики (2.2.0).
Когда я компилирую свой проект в PyCharm 2019.1 - все работает совершенно нормально.
Но когда я пытаюсь собрать свой проект как файл .exe с помощью pyinstaller, у меня появляются некоторые ошибки. Я решил большинство из них (о пропавших библиотеках), но этот ушел.
Я получил ошибки:
Feature class firstorder is not recognized
Feature class glcm is not recognized
Feature class glrlm is not recognized
Feature class ngtdm is not recognized
Feature class glszm is not recognized
и моя модель также выдает ошибку (когда я сопоставляю свои новые данные с моделями, которые уже были сохранены в файлах .sav из sklearn):
ValueEror: operands could not be broadcast together with shapes (1,3)(96,)(1,3)
1) Я пытался изменить с:
extractor.enableFeatureClassByName('glcm')
до:
extractor.enableFeatureClassByName(str('glcm'))
Это не помогло.
2) Также я пытался построить проект на разных версиях пирадиомики:
2.1.1 и
2.2.0
дать тот же результат (ошибка)
import pandas as pd
import numpy as np
import pickle
import sklearn
...
folderName = "tmp"
sl = "/"
image_path_to = os.getcwd() + "/data/nrrd/" + folderName + sl + name_image
label_path_to = os.getcwd() + "/data/nrrd/" + folderName + sl + name_label
# Instantiate the extractor
extractor = featureextractor.RadiomicsFeatureExtractor()
# Switch on only needed feature class
extractor.disableAllFeatures()
extractor.enableFeatureClassByName('firstorder') <<< There is a problem
extractor.enableFeatureClassByName('glcm')
extractor.enableFeatureClassByName('glrlm')
extractor.enableFeatureClassByName('ngtdm')
extractor.enableFeatureClassByName('gldm')
extractor.enableFeatureClassByName('glszm')
# result -> ordered dict
result = extractor.execute(image_path_to, label_path_to)
df = pd.DataFrame(result, index=[0])
...
# Load the model from disk
model_name = 'Multi-layer Perceptron'
poolParam = ["diagnosis_code", "isnorm"]
models = [0,5]
for param in poolParam:
filename = 'data/result/model/' + model_name + ' ' + param + '.sav'
file = open(filename, 'rb')
loaded = pickle.load(file)
print("Model <" + model_name + " " + param + "> was loaded")
# Test the classifier
y_pred = int(loaded.predict(data)) <<< There is a problem