Пример #1
0
class Label:
    def __init__(self, path, mode):
        str_list = path.split('/')
        self.kind = str_list[1]
        self.name = str_list[2]
        self.mode = copy.deepcopy(mode)

        self.image = cv2.imread(path)

        self.image_proc_s = ImageProcess(
            cv2.medianBlur(self.image,5), 70
        )
        self.image=cv2.bilateralFilter(self.image,5,50,50)
        self.image_proc_m = ImageProcess(self.image, 100)
        self.image_proc_l = ImageProcess(self.image, 130)

        self.client = MongoClient()
        self.db = self.client.object_finder

    def label_fore(self):
        self.image_proc_s.label_classify_target_list(True)
        coll = self.db[self.mode + '_fore']
        vec_list = self.image_proc_s.get_classify_vec_list()
        target_list = self.image_proc_s.get_classify_target_list()
        for index in range(len(vec_list)):
            coll.insert({
                'vec': vec_list[index],
                'target': target_list[index],
                'kind': self.kind,
                'name': self.name
            })

    def label_shape(self):
        self.image_proc_m.label_classify_target_list(True)
        self.image_proc_l.label_classify_target_list(True)
        coll = self.db[self.mode + '_shape']
        vec_list = \
            self.image_proc_m.get_classify_vec_list() + self.image_proc_l.get_classify_vec_list()
        target_list = \
            self.image_proc_m.get_classify_target_list() + self.image_proc_l.get_classify_target_list()
        for index in range(len(vec_list)):
            coll.insert({
                'vec': vec_list[index],
                'target': target_list[index],
                'kind': self.kind,
                'name': self.name
            })
Пример #2
0
class ObjectProcess:
    def __init__(self, path, clf_fore, clf_shape):
        str_list = path.split('/')
        self.kind = str_list[-2]
        self.name = str_list[-1]

        self.clf_fore = clf_fore
        self.clf_shape = clf_shape

        self.image = cv2.imread(path)
        self.image = cv2.resize(self.image, (400, 400))
        # cv2.imshow('img',self.image)
        # cv2.waitKey()

        thread_s = threading.Thread(target=self.init_image_proc_s)
        thread_m = threading.Thread(target=self.init_image_proc_m)
        thread_l = threading.Thread(target=self.init_image_proc_l)
        thread_s.start()
        thread_m.start()
        thread_l.start()
        thread_s.join()
        thread_m.join()
        thread_l.join()

        self.hog_list = []
        hog_list = self.image_proc_m.get_hog_list() + \
                   self.image_proc_l.get_hog_list()
        target_list = list(self.image_proc_m.get_classify_target_list()) + \
                      list(self.image_proc_l.get_classify_target_list())
        for index in range(len(hog_list)):
            if target_list[index]:
                self.hog_list.append(hog_list[index])

        self.client = MongoClient()
        self.db = self.client.object_finder

    def init_image_proc_s(self):
        self.image_proc_s = ImageProcess(
            cv2.medianBlur(self.image, 5), 70
        )
        self.image_proc_s.set_classify_target_list(
            self.clf_fore.predict(
                self.image_proc_s.get_classify_vec_list()
            )
        )
        self.image_proc_s.image = cv2.bilateralFilter(self.image, 5, 50, 50)
        self.image_proc_s.compute_foreground_mask()
        self.image_proc_s.compute_foreground_image()
        self.image_proc_s.compute_color_list()
        self.image_proc_s.compute_sift_list()

    def init_image_proc_m(self):
        self.image_proc_m = ImageProcess(
            cv2.bilateralFilter(self.image, 5, 50, 50), 100
        )
        self.image_proc_m.set_classify_target_list(
            self.clf_shape.predict(
                self.image_proc_m.get_classify_vec_list()
            )
        )

    def init_image_proc_l(self):
        self.image_proc_l = ImageProcess(
            cv2.bilateralFilter(self.image, 5, 50, 50), 130
        )
        self.image_proc_l.set_classify_target_list(
            self.clf_shape.predict(
                self.image_proc_l.get_classify_vec_list()
            )
        )

    def get_image(self):
        return copy.deepcopy(self.image)

    def get_fore(self):
        return copy.deepcopy(self.image_proc_s.get_foreground_image())

    def get_seg_image_list(self):
        return [
            np.array(self.image_proc_s.get_mark_image() * 255, dtype=np.uint8),
            np.array(self.image_proc_m.get_mark_image() * 255, dtype=np.uint8),
            np.array(self.image_proc_l.get_mark_image() * 255, dtype=np.uint8)
        ]

    def get_pos_hog_image_list(self):
        try:
            return copy.deepcopy(self.hog_image_list)
        except:
            self.hog_image_list = []
            tmp_list = self.image_proc_m.get_hog_image_list() + \
                       self.image_proc_l.get_hog_image_list()
            target_list = list(self.image_proc_m.get_classify_target_list()) + \
                          list(self.image_proc_l.get_classify_target_list())
            for i in range(len(target_list)):
                if target_list[i]:
                    self.hog_image_list.append(tmp_list[i])
            return copy.deepcopy(self.hog_image_list)


    def get_color_list(self):
        return copy.deepcopy(self.image_proc_s.get_color_list())

    def get_sift_list(self):
        return copy.deepcopy(self.image_proc_s.get_sift_list())

    def get_hog_list(self):
        return copy.deepcopy(self.hog_list)

    def store_color_list(self):
        coll = self.db.color_list
        color_list=self.get_color_list()
        try:
            for color in color_list:
                coll.insert({
                    'vec': color,
                    'kind': self.kind,
                    'name': self.name
                })
        except:
            pass
        return self

    def store_sift_list(self):
        coll = self.db.sift_list
        sift_list = self.get_sift_list()
        try:
            for sift in sift_list:
                coll.insert({
                    'vec': [int(num) for num in sift],
                    'kind': self.kind,
                    'name': self.name
                })
        except:
            pass
        return self

    def store_hog_list(self):
        coll = self.db.hog_list
        hog_list = self.get_hog_list()
        try:
            for hog in hog_list:
                coll.insert({
                    'vec': hog,
                    'kind': self.kind,
                    'name': self.name
                })
        except:
            pass
        return self

    def write_fore_image(self, img_base):
        cv2.imwrite(
            img_base + '/' + self.kind + '/' + self.name,
            self.image_proc_s.get_foreground_image()
        )

    def insert_into_dict(self, fit, arg_dict):
        if fit['kind'] in arg_dict.keys():
            if fit['name'][:-4] in arg_dict[fit['kind']].keys():
                arg_dict[fit['kind']][fit['name'][:-4]] += 1
            else:
                arg_dict[fit['kind']][fit['name'][:-4]] = 1
        else:
            arg_dict[fit['kind']] = {}
            arg_dict[fit['kind']][fit['name'][:-4]] = 1

    def find_k_means_color_list(self):
        fit_list = []
        best_fit_list = []
        print len(self.get_color_list())
        for color in self.get_color_list():
            fit, best = find_k_means(
                color,
                'object_finder',
                'k_means_color_list',
                'vec'
            )
            fit_list += fit
            best_fit_list.append(best)
        self.fit_color_dict = {}
        for fit in fit_list:
            self.insert_into_dict(fit, self.fit_color_dict)
        self.best_fit_color_dict = {}
        for best_fit in best_fit_list:
            self.insert_into_dict(best_fit, self.best_fit_color_dict)

    def get_fit_color_dict(self):
        try:
            return copy.deepcopy(self.fit_color_dict)
        except:
            self.find_k_means_color_list()
            return copy.deepcopy(self.fit_color_dict)

    def get_best_fit_color_dict(self):
        try:
            return copy.deepcopy(self.best_fit_color_dict)
        except:
            self.find_k_means_color_list()
            return copy.deepcopy(self.best_fit_color_dict)

    def find_k_means_sift_list(self):
        fit_list = []
        best_fit_list = []
        try:
            print len(self.get_sift_list())
            for sift in self.get_sift_list():
                fit, best = find_k_means(
                    sift,
                    'object_finder',
                    'k_means_sift_list',
                    'vec'
                )
                fit_list += fit
                best_fit_list.append(best)
        except:
            print 0
        self.fit_sift_dict = {}
        for fit in fit_list:
            self.insert_into_dict(fit, self.fit_sift_dict)
        self.best_fit_sift_dict = {}
        for best_fit in best_fit_list:
            self.insert_into_dict(best_fit, self.best_fit_sift_dict)

    def get_fit_sift_dict(self):
        try:
            return copy.deepcopy(self.fit_sift_dict)
        except:
            self.find_k_means_sift_list()
            return copy.deepcopy(self.fit_sift_dict)

    def get_best_fit_sift_dict(self):
        try:
            return copy.deepcopy(self.best_fit_sift_dict)
        except:
            self.find_k_means_sift_list()
            return copy.deepcopy(self.best_fit_sift_dict)

    def find_k_means_hog_list(self):
        fit_list = []
        best_fit_list = []
        for hog in self.get_hog_list():
            fit, best = find_k_means(
                hog,
                'object_finder',
                'k_means_hog_list',
                'vec'
            )
            fit_list += fit
            best_fit_list.append(best)
        self.fit_hog_dict = {}
        for fit in fit_list:
            self.insert_into_dict(fit, self.fit_hog_dict)
        self.best_fit_hog_dict = {}
        for best_fit in best_fit_list:
            self.insert_into_dict(best_fit, self.best_fit_hog_dict)

    def get_fit_hog_dict(self):
        try:
            return copy.deepcopy(self.fit_hog_dict)
        except:
            self.find_k_means_hog_list()
            return copy.deepcopy(self.fit_hog_dict)

    def get_best_fit_hog_dict(self):
        try:
            return copy.deepcopy(self.best_fit_hog_dict)
        except:
            self.find_k_means_hog_list()
            return copy.deepcopy(self.best_fit_hog_dict)