求助:如何用Python结合Robot Framework高亮图片中指定文本
解决方案:高亮图片中特定文本并结合Robot Framework使用
问题分析
当前Python脚本会高亮图片中所有文本,需求改为仅高亮指定字符串(如HS. CODE: 9408. 50),同时要和Robot Framework集成使用。
修改后的Python脚本
核心思路是用pytesseract.image_to_data()获取文本块的完整内容与位置信息,匹配目标字符串后再绘制高亮框,而非逐个字符处理:
import cv2 import numpy as np import pytesseract def highlight_specific_text(image_path, target_text, output_path=None): # 加载图片并转灰度 img = cv2.imread(image_path) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 阈值处理增强文本对比度 thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1] # 获取文本块的详细数据(内容、坐标等) data = pytesseract.image_to_data(thresh, output_type=pytesseract.Output.DICT) num_boxes = len(data['text']) alpha = 0.3 # 高亮透明度 overlay = img.copy() for i in range(num_boxes): # 过滤空文本块,匹配目标字符串(支持部分匹配,如需完全匹配改用==) if int(data['conf'][i]) > 0 and target_text in data['text'][i].strip(): x, y, w, h = data['left'][i], data['top'][i], data['width'][i], data['height'][i] # 绘制半透明黄色高亮框 cv2.rectangle(overlay, (x, y), (x + w, y + h), (0, 255, 255), -1) # 合并高亮层与原图 img = cv2.addWeighted(overlay, alpha, img, 1 - alpha, 0) # 保存或显示结果 if output_path: cv2.imwrite(output_path, img) else: cv2.imshow("Highlighted Specific Text", img) cv2.waitKey(0) cv2.destroyAllWindows() # 测试用例 if __name__ == "__main__": highlight_specific_text( "C:/Users/rmyeow/Desktop/Example pic/sample.png", "HS. CODE: 9408. 50", "C:/Users/rmyeow/Desktop/Example pic/highlighted_sample.png" )
和Robot Framework集成步骤
- 将上述Python脚本保存为
image_text_highlight.py,放在Robot Framework项目的资源目录下。 - 在Robot Framework测试套件中导入该脚本,定义关键字:
*** Settings *** Library image_text_highlight.py *** Test Cases *** Highlight Target Text In Image Highlight Specific Text In Image ${IMAGE_PATH} ${TARGET_TEXT} ${OUTPUT_PATH}
- 运行测试时,传入对应图片路径、目标字符串和输出路径参数即可。
注意事项
- 确保已安装
pytesseract、opencv-python依赖,同时配置好Tesseract OCR的环境变量。 - 若需精确匹配目标字符串,将代码中的
target_text in data['text'][i].strip()改为data['text'][i].strip() == target_text。 - 可根据需求调整高亮框的颜色(如
(0,255,255)是黄色)和透明度alpha值。
内容的提问来源于stack exchange,提问作者SooHana
相关产品推荐
相关产品推荐

