簡體   English   中英

錯誤:沒有名為“sklearn.tree.tree”的模塊

[英]Error : No module named 'sklearn.tree.tree

import sys
from os import listdir, sep
import numpy as np
import pickle
from PIL import Image
import cv2
from sklearn.ensemble import RandomForestClassifier
import numpy as np
from PIL import Image


DEFAULT_IMAGE_SIZE = (45,45)
SPLIT_POINT_COEFF = 0.8

class PredictionService:


        def __init__(self):
             #self.dataset = datasetDIR
             #self.testImage = testImage
             pass

        def getImageVector(self, image):
            try:

                #NOTE:from docs
                #When translating a color image to black and white (mode “L”), the library uses the ITU-R 601-2 luma transform:
                #L = R * 299/1000 + G * 587/1000 + B * 114/1000

                imageGrayscale = Image.open(image).convert('L')
                #resize image to default image size - 45 x 45
                imageGrayscale = imageGrayscale.resize(DEFAULT_IMAGE_SIZE, Image.ANTIALIAS)
                #
                imageNP = np.array(imageGrayscale)
                imgList = []
                for line in imageNP:
                    for value in line:
                        imgList.append(value)
                #imgList is 2025 long vector
                return imgList
            except Exception as e:
                print("Error : {}".format(e))
                return None

        def addImagesToSet(self, rootPath, imageList, label, completeImageList = [], labelList = []):
            dashes = ['-','/','-','\\']
            counter = 0
            for image in imageList:
                print('[{}] Images loading...'.format(dashes[counter]))
                counter = (counter + 1) % len(dashes)
                completeImageList.append(self.getImageVector(rootPath + image))
                labelList.append(label)


        def getTrainingAndTestData(self, directoryPath):

            dirList = listdir(directoryPath)
            xTrain, yTrain, xTest, yTest = [], [], [], []
            try:
                if len(dirList) < 1:
                    return None

                imageDirPath = None

                counter = 1
                for directory in dirList:

                    imageDir = listdir('{}/{}'.format(directoryPath, directory))
                    splitPoint = int(SPLIT_POINT_COEFF * len(imageDir))

                    print('[{}] Loading dataset - {} images'.format(counter, directory))
                    counter += 1

                    trainImages, testImages = imageDir[:splitPoint], imageDir[splitPoint:]
                    imageDirPath = directoryPath + sep + directory + sep
                    self.addImagesToSet(imageDirPath, trainImages, directory, xTrain, yTrain)
                    self.addImagesToSet(imageDirPath, testImages, directory, xTest, yTest)

            except Exception as e:
                print('Error: {}'.format(e))
                return [],[],[],[]

            return xTrain, yTrain, xTest, yTest

        def trainModel(self, trainDatasetDir):
            train_dataset_dir = ('C:/Users/MUTHU/Documents/GitHub/Handwritten-math-symbols-recognition/Dataset')
            print('Training.....')
            xTrain, yTrain, xTest , yTest = self.getTrainingAndTestData(trainDatasetDir)
            if [] not in (xTrain, yTrain, xTest , yTest):
                randomForestClassifier = RandomForestClassifier()
                randomForestClassifier.fit(xTrain,yTrain)
                accuracyScore = randomForestClassifier.score(xTrain,yTrain)
                # save classifier
                pickle.dump(randomForestClassifier,open("Model/math_recognition_model.pkl",'wb'))
                print("Model Accuracy Score : {}".format(accuracyScore))
                testAccuracyScore = randomForestClassifier.score(xTest,yTest)
                print("Model Accuracy Score (Test) : {}".format(testAccuracyScore))
            else :
                print("An error occurred.")

        def predict(self, imagePath):
            try:
                image = [self.getImageVector(imagePath)]
                # load saved model
                try:
                    decisionTreeClassifierModel= pickle.load(open("Model/random_forest_classifier.pkl",'rb'))
                    modelPrediction = decisionTreeClassifierModel.predict(image)
                    print(modelPrediction)
                    print("Recognized expression:" +  str(modelPrediction[0]))
                except FileNotFoundError as modelFileError:
                    print("Error : {}".format(modelFileError))
                    self.trainModel(datasetDir)
                    self.predict(imagePath)

            except FileNotFoundError as fileError:
                print("Error : {}".format(fileError))
            except Exception as e:
                print("Error : {}".format(e))

請幫助我使用 pycharam 解決這個問題

您需要在項目中單獨導入它。 為此,您可以參考以下鏈接: https://www.jetbrains.com/pycharm/guide/tips/install-and-import/

還將您的 pycharm 從菜單選項 go 更新到其最新版本 2020.1.5 到幫助 -> 檢查更新 -> 選項將在下方右側彈出以進行更新

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM