# -*- coding:utf-8 -*- import os import sys import time import numpy as np import cv2 as cv import json from BaseLog import CBaseLog from OptionConfig import COptionConfig from ssat_sdk import OCRConvert, ImageCMP, getSATTmpDIR class COptionOCR(CBaseLog): # 创建OCR对象 __ocr = OCRConvert() # 图片切割对象 __imgCMP = ImageCMP() def __init__(self, optionConfig, optionExcel): CBaseLog.__init__(self) # COptionConfig对象; self.__optionConfig = optionConfig if self.__optionConfig is None: self.error("configManger对象空") # 路径对象; self.__optionExcel = optionExcel ''' 函数:获取指定原图中指定的文本区域内的文本内容; 参数: optionName: Option名称; src_pid: 原图文件路径; texb_box: 原图中要获取文本内容的区域坐标; ocr_config: 使用何种方式识别文本; 示例:{"lan": "ChinesePRC+English", "type": 4} 返回: 返回文本内容; ''' def getOptionText(self, optionName, src_pic, text_box, ocr_config): src_img = src_pic # 如果是字符串,认为是路径; if type(src_pic) == str: src_img = cv.imread(src_pic) # 判断图片对象是否空; if src_img is None: self.error(u"读取图片失败:%s" % src_pic) return None return self.__getOptionText(optionName, src_img, text_box, ocr_config) ''' 函数:获取指定原图中指定的文本区域内的文本内容; 参数: optionName: Option名称; src_img: 原图图片对象(cv2.imread的结果值); texb_box: 原图中要获取文本内容的区域坐标; ocr_config: 使用何种方式识别文本; 示例:{"lan": "ChinesePRC+English", "type": 4} 返回: 返回文本内容; ''' def __getOptionText(self, optionName, src_img, text_box, ocr_config): if text_box.__len__() == 0: self.error(u"【%s】文本区域空" % optionName) return None # 配置文本图片路径,保存文本区域截图; text_pic = os.path.join(getSATTmpDIR(), "meuttree_area_text.png") COptionOCR.__imgCMP.saveCropImage(src_img, text_pic, text_box) # 判断文本图片是否存在; if not os.path.exists(text_pic): self.error(u"【%s】保存文本区域截图失败" % optionName) return None # 获取ocr识别时阈值(疑似问题:不是使用optionName,而是对应的first_parent) # 示例:threshold = {"Threshold":[25,255,0]} threshold = self.__optionConfig.getThresholdDict(optionName) # 识别文本图片内容; optionText = COptionOCR.__ocr.getStrWithImgProcess(text_pic, threshold, ocr_config['lan'], ocr_config['type'], reconTimes=1) self.info(u"【%s】识别结果=%s" % (optionName, optionText)) # 返回结果; return optionText ''' 函数:识别指定图片文件的文本内容; 参数: text_pic: 要识别文本的图片路径; ocr_config: 使用何种方式识别文本; 示例:{"lan": "ChinesePRC+English", "type": 4} threshold: orc识别时的阈值,示例:{"Threshold":[25,255,0]} 返回: ''' def getImageText(self, text_pic, ocr_config, threshold): # 判断文本图片是否存在; if not os.path.exists(text_pic): self.error(u"【%s】文本图片不存在" % text_pic) return None # 识别文本图片内容; imgText = COptionOCR.__ocr.getStrWithImgProcess(text_pic, threshold, ocr_config['lan'], ocr_config['type'], reconTimes=1) self.info(u"【%s】识别结果=%s" % (text_pic, imgText)) # 返回结果; return imgText # end-class if __name__ == "__main__": pass