示例#1
0
def main():
    try:
        # initialize variable
        db = DataBase()
        settings = Config.Settings
        if args["feature"] is None:
            feature = settings["FEATURE"]
        else:
            feature = args["feature"]

        if args["type"] is None:
            kmeansType = Config.KMeans["TYPE"]
        else:
            kmeansType = args["type"]

        filename = "{}/{}_{}_kmeans{}_{}".format(
            settings["ROOT_DATASET_FOLDER"], settings["TRAIN_DATASET"],
            feature, kmeansType, settings["FEATURE_FILE"])

        if db.checkFile(filename):
            (image_paths, im_features, idf, numWords, voc) = db.read(filename)
        else:
            descriptorHandler = Descriptor(Config)
            numWords = Config.KMeans["NUM_WORDS"]
            iterations = Config.KMeans["ITER"]
            imageFiles = glob.glob("{}/{}/*.*".format(
                settings["ROOT_DATASET_FOLDER"], settings["TRAIN_DATASET"]))

            if len(imageFiles) > settings["MAX_FILES"]:
                np.random.shuffle(imageFiles)
                imageFiles = imageFiles[:settings["MAX_FILES"]]

            # Extract features of images
            (image_paths, des_list,
             descriptors) = extractFeatures(descriptorHandler, feature,
                                            imageFiles)

            # Create descriptors
            # descriptors = createDescriptors(des_list, imageFiles);

            # Perform k-means clustering
            if (descriptors.shape[0] / numWords) < 100:
                numWords = numWords / 100
            (voc, variance) = kMeansClustering(kmeansType, descriptors,
                                               numWords, iterations)

            # Calculate the TF-IDF of features
            filename = "{}/{}_{}_kmeans{}_{}".format(
                settings["ROOT_DATASET_FOLDER"], settings["TRAIN_DATASET"],
                feature, kmeansType, settings["FEATURE_FILE"])
            (im_features, idf) = calculateTFIDF(des_list, voc, variance,
                                                numWords, len(image_paths))
            db.write(filename, (image_paths, im_features, idf, numWords, voc))

    except Exception as e:
        tb = traceback.format_exc()
        print 'Error found: %s' % (tb)
示例#2
0
from database import DataBase
from config import Config
from descriptors.feature import Descriptor

# Load the classifier, class names, scaler, number of clusters and vocabulary (voc)
db = DataBase()
descriptorHandler = Descriptor(Config)
settings = Config.Settings
Datasets = {}

for key, value in Config.Features.iteritems():
    filename = "{}/{}_{}_kmeans{}_{}".format(settings["ROOT_DATASET_FOLDER"],
                                             settings["TRAIN_DATASET"], value,
                                             Config.KMeans["TYPE"],
                                             settings["FEATURE_FILE"])
    if db.checkFile(filename):
        (image_paths, im_features, idf, numWords, voc) = db.read(filename)
        Datasets[value] = (image_paths, im_features, idf, numWords, voc)


def getQueryImage(image_path, cx=0, cy=0, cw=0, ch=0):
    if image_path.find("http") != -1:
        imgdata = urllib.urlopen(image_path)
        arr = np.asarray(bytearray(imgdata.read()), dtype=np.uint8)
        query = cv2.imdecode(arr, -1)
    else:
        if (image_path.find("/") == -1) and (image_path.find("\\") == -1):
            query = cv2.imread("{}/{}".format(
                Config.Resources["UPLOAD_FOLDER"], image_path))
        elif (image_path.find(settings["ROOT_DATASET_FOLDER"]) == -1):
            query = cv2.imread("{}/{}".format(settings["ROOT_DATASET_FOLDER"],