def _get_stage_name(self, image): self.stage_entrance = {} buttons = self.campaign_extract_name_image(image) ocr = Ocr(buttons, lang='stage', letter=(255, 255, 255), back=(102, 102, 102), threshold=120) result = ocr.ocr(image) if not isinstance(result, list): result = [result] result = [ocr_result_process(res) for res in result] chapter = [separate_name(res)[0] for res in result] counter = collections.Counter(chapter) self.campaign_chapter = counter.most_common()[0][0] for name, button in zip(result, buttons): button.area = button.button button.name = name self.stage_entrance[name] = button logger.attr('Chapter', self.campaign_chapter) logger.attr('Stage', ', '.join(self.stage_entrance.keys()))
def commission_parse(self): # Name # This is different from CN, EN has longer names area = area_offset((176, 23, 420, 51), self.area[0:2]) button = Button(area=area, color=(), button=area, name='COMMISSION') ocr = Ocr(button, lang='cnocr', back=(74, 97, 148), use_binary=False) self.button = button self.name = ocr.ocr(self.image) self.genre = self.commission_name_parse(self.name) # Duration time area = area_offset((290, 74, 390, 92), self.area[0:2]) button = Button(area=area, color=(), button=area, name='DURATION') ocr = Ocr(button, lang='stage', back=(57, 85, 132)) self.duration = self.parse_time(ocr.ocr(self.image)) # Expire time area = area_offset((-49, 68, -45, 84), self.area[0:2]) button = Button(area=area, color=(189, 65, 66), button=area, name='IS_URGENT') if button.appear_on(self.image): area = area_offset((-49, 73, 45, 91), self.area[0:2]) button = Button(area=area, color=(), button=area, name='EXPIRE') ocr = Ocr(button, lang='stage', back=(189, 65, 66)) self.expire = self.parse_time(ocr.ocr(self.image)) else: self.expire = None # Status area = area_offset((179, 71, 187, 93), self.area[0:2]) dic = {0: 'finished', 1: 'running', 2: 'pending'} self.status = dic[int(np.argmax(get_color(self.image, area)))]
def after_process(self, raw): """ Returns: int: """ raw = super().after_process(raw) if not raw: result = 0 else: result = int(raw) return result AMOUNT_OCR = AmountOcr([], back=(-200, -200, -200), lang='digit', name='Amount_ocr') ENEMY_GENRE_OCR = Ocr(ENEMY_GENRE_BUTTON, lang='cnocr', use_binary=False, back=(127, 127, 127)) class ImageError(Exception): pass class ItemTemplate: def __init__(self, image): self.image = np.array(image) def match(self, image): res = cv2.matchTemplate(self.image, np.array(image), cv2.TM_CCOEFF_NORMED) _, similarity, _, _ = cv2.minMaxLoc(res) return similarity > TEMPLATE_THRESHOLD