OptionOCR.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. # -*- coding:utf-8 -*-
  2. import os
  3. import sys
  4. import time
  5. import numpy as np
  6. import cv2 as cv
  7. import json
  8. from BaseLog import CBaseLog
  9. from OptionConfig import COptionConfig
  10. from ssat_sdk import OCRConvert, ImageCMP, getSATTmpDIR
  11. class COptionOCR(CBaseLog):
  12. # 创建OCR对象
  13. __ocr = OCRConvert()
  14. # 图片切割对象
  15. __imgCMP = ImageCMP()
  16. def __init__(self, optionConfig, optionExcel):
  17. CBaseLog.__init__(self)
  18. # COptionConfig对象;
  19. self.__optionConfig = optionConfig
  20. if self.__optionConfig is None:
  21. self.error("configManger对象空")
  22. # 路径对象;
  23. self.__optionExcel = optionExcel
  24. '''
  25. 函数:获取指定原图中指定的文本区域内的文本内容;
  26. 参数:
  27. optionName: Option名称;
  28. src_pid: 原图文件路径;
  29. texb_box: 原图中要获取文本内容的区域坐标;
  30. ocr_config: 使用何种方式识别文本; 示例:{"lan": "ChinesePRC+English", "type": 4}
  31. 返回:
  32. 返回文本内容;
  33. '''
  34. def getOptionText(self, optionName, src_pic, text_box, ocr_config):
  35. src_img = src_pic
  36. # 如果是字符串,认为是路径;
  37. if type(src_pic) == str:
  38. src_img = cv.imread(src_pic)
  39. # 判断图片对象是否空;
  40. if src_img is None:
  41. self.error(u"读取图片失败:%s" % src_pic)
  42. return None
  43. return self.__getOptionText(optionName, src_img, text_box, ocr_config)
  44. '''
  45. 函数:获取指定原图中指定的文本区域内的文本内容;
  46. 参数:
  47. optionName: Option名称;
  48. src_img: 原图图片对象(cv2.imread的结果值);
  49. texb_box: 原图中要获取文本内容的区域坐标;
  50. ocr_config: 使用何种方式识别文本; 示例:{"lan": "ChinesePRC+English", "type": 4}
  51. 返回:
  52. 返回文本内容;
  53. '''
  54. def __getOptionText(self, optionName, src_img, text_box, ocr_config):
  55. if text_box.__len__() == 0:
  56. self.error(u"【%s】文本区域空" % optionName)
  57. return None
  58. # 配置文本图片路径,保存文本区域截图;
  59. text_pic = os.path.join(getSATTmpDIR(), "meuttree_area_text.png")
  60. COptionOCR.__imgCMP.saveCropImage(src_img, text_pic, text_box)
  61. # 判断文本图片是否存在;
  62. if not os.path.exists(text_pic):
  63. self.error(u"【%s】保存文本区域截图失败" % optionName)
  64. return None
  65. # 获取ocr识别时阈值(疑似问题:不是使用optionName,而是对应的first_parent)
  66. # 示例:threshold = {"Threshold":[25,255,0]}
  67. threshold = self.__optionConfig.getThresholdDict(optionName)
  68. # 识别文本图片内容;
  69. optionText = COptionOCR.__ocr.getStrWithImgProcess(text_pic, threshold, ocr_config['lan'], ocr_config['type'],
  70. reconTimes=1)
  71. self.info(u"【%s】识别结果=%s" % (optionName, optionText))
  72. # 返回结果;
  73. return optionText
  74. '''
  75. 函数:识别指定图片文件的文本内容;
  76. 参数:
  77. text_pic: 要识别文本的图片路径;
  78. ocr_config: 使用何种方式识别文本; 示例:{"lan": "ChinesePRC+English", "type": 4}
  79. threshold: orc识别时的阈值,示例:{"Threshold":[25,255,0]}
  80. 返回:
  81. '''
  82. def getImageText(self, text_pic, ocr_config, threshold):
  83. # 判断文本图片是否存在;
  84. if not os.path.exists(text_pic):
  85. self.error(u"【%s】文本图片不存在" % text_pic)
  86. return None
  87. # 识别文本图片内容;
  88. imgText = COptionOCR.__ocr.getStrWithImgProcess(text_pic, threshold, ocr_config['lan'], ocr_config['type'],
  89. reconTimes=1)
  90. self.info(u"【%s】识别结果=%s" % (text_pic, imgText))
  91. # 返回结果;
  92. return imgText
  93. # end-class
  94. if __name__ == "__main__":
  95. pass