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)