def initDetector(self):
        fact_templates = [
            'sisi', 'jumlahSisiSama', 'sudutTumpul', 'sudutLancip', 'sudutSiku',
            'jumlahPasanganSejajar', 'sepasangSudutSama', 'maksXSiku', 'minXSiku', 'jumlahSudutSama'  
        ]
        fact_results = []
        delta = 5

        fact_results.append(self.detector.get_edges_length())

        # Sisi
        lengths = self.detector.get_all_length()

        # jumlah sisi sama
        count = 0
        for i in range(len(lengths)):
            temp_count = 0
            for j in range (len(lengths)):
                if (lengths[i] >= lengths[j]-delta and lengths[i] <= lengths[j] + delta):
                    temp_count += 1
            if temp_count > count:
                count = temp_count
        fact_results.append(count)

        degrees = self.detector.get_all_degrees()
        count_tumpul = 0
        count_siku = 0
        count_lancip = 0
        for degree in degrees:
            if (degree > 90-delta and degree < 90+delta):
                count_siku += 1
            elif (degree <= 90-delta):
                count_lancip += 1
            else:
                count_tumpul += 1
        # Sudut tumpul
        fact_results.append(count_tumpul)
        # Sudut lancip
        fact_results.append(count_lancip)
        # Sudut Siku
        fact_results.append(count_siku)

        # jumlahPasanganSejajar
        slopes = self.detector.get_all_slopes()
        count = 0
        forbidden_index = []
        for i in range (len(slopes)):
            for j in range(i+1, len(slopes)):
                if (slopes[i] >= slopes[j] - delta and slopes[i] <= slopes[j] + delta  and i not in forbidden_index and j not in forbidden_index):
                    count += 1
                    forbidden_index.append(i)
                    forbidden_index.append(j)
        fact_results.append(count)

        # Sepasang sudut sama
        count = 0
        forbidden_index = []
        for i in range (len(degrees)):
            for j in range(i+1, len(degrees)):
                if (degrees[i]  >= degrees[j] - delta and degrees[i] <= degrees[j] + delta and i not in forbidden_index and j not in forbidden_index):
                    count += 1
                    forbidden_index.append(i)
                    forbidden_index.append(j)
        fact_results.append(count)

        # maksXsiku
        edges = self.detector.get_all_edges()
        max_index = 0
        min_index = 0
        for i in range(len(edges)):
            if (edges[i][0] > edges[max_index][0]):
                max_index = i
            if (edges[i][0] < edges[min_index][0]):
                min_index = i
        if (degrees[max_index] > 90-delta and degrees[max_index] < 90+delta):
            fact_results.append('true')
        else:
            fact_results.append('false')

        #minXsiku
        if (degrees[min_index] > 90-delta and degrees[min_index] < 90+delta):
            fact_results.append('true')
        else:
            fact_results.append('false')

        # jumlahsudutsama
        count = 0
        for i in range(len(degrees)):
            temp_count = 0
            for j in range (len(degrees)):
                if (degrees[i] == degrees[j]):
                    temp_count += 1
            if temp_count > count:
                count = temp_count
        fact_results.append(count)

        core = Core('rules.clp')
        for i in range(10):
            fact = '('+str(fact_templates[i])+' '+str(fact_results[i])+')'
            core.assert_fact(fact)

        # Run and get hit rules
        hit_rules = core.get_hit_rules()

        # Get results
        object_result = core.get_results()

        # Get all matched facts
        facts = core.get_matched_facts()


        # print(hit_rules)
        # print(str(object_result))
        # print(facts)
        # Write to text box
        self.textHitRules.clearTextBox()
        for hit_rule in hit_rules:
            self.textHitRules.insertTextLine(hit_rule)
        
        self.textBoxDetectionResult.clearTextBox()
        self.textBoxDetectionResult.insertTextLine(object_result)

        self.textMatchedFacts.clearTextBox()
        for fact in facts:
            self.textMatchedFacts.insertTextLine(fact)