import cv2 import numpy as np class Table: def __init__(self, html, img=[]): """ 表格类的初始化函数。 Parameters: html (str): 输入的HTML字符串。 img (List): 输入的图像数组,默认为空列表。 """ self.img = img self.html = html self.html_arr = [] # 存储HTML解析后的表格内容 self.total = 0 # 表格单元总数 self.empty = 0 # 空白表格单元数 def get_tr(self): """ 从HTML中提取并返回表格行。 Returns: List: 提取的表格行列表。 """ str = self.html if len(str.split('')) > 1: return str.split('')[1:] else: return [] def get_td(self): """ 从HTML中提取并存储表格单元。 Returns: None """ if self.html_arr != []: return tr_list = self.get_tr() for i in range(len(tr_list)): if tr_list[i] == '': continue tr = tr_list[i].split('')[:-1] temp_list = [] for cell in tr: if '' in cell: temp_list.append(cell.split('')[1]) if '' in cell: temp_list.append(cell.split('')[1]) if '' in cell: temp_list.append(cell.split('')[1]) print(temp_list) self.html_arr.append(temp_list) def get_empty(self): """ 统计表格中的空白单元格数量和总单元格数量。 Returns: None """ self.get_td() if self.total != 0: return for tr in self.html_arr: for cell in tr: self.total += 1 if cell == '': self.empty += 1 def change_green2white(self): """ 将图像中绿色区域修改为白色。 Returns: None """ hsv = cv2.cvtColor(self.img, cv2.COLOR_BGR2HSV) lower_green = np.array([35, 43, 46]) upper_green = np.array([77, 220, 255]) mask_green = cv2.inRange(hsv, lower_green, upper_green) color = [248, 248, 255] self.img[mask_green != 0] = color def get_str(self): """ 从HTML数组中获取字符串。 Returns: str: 提取的字符串。 """ str = '' for tr in self.html_arr: for cell in tr: str += cell return str def check_html(self): """ 检查HTML表格的质量,如果识别效果不佳,则修改图像颜色。 Returns: int: 返回1表示识别效果不佳,返回0表示识别效果良好。 """ self.get_empty() html_str = self.get_str() if (self.empty > 4 and self.empty > self.total // 4) or ( '项目' in html_str and '每份' in html_str and '营养素参考值' in html_str and np.max( [len(a) for a in self.html_arr]) < 3): print('识别效果不佳,改变图片颜色!') self.change_green2white() return 1 return 0