# -*- 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