You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测识别药敏纸片裁剪图中任意朝向文本并完成OCR提取?

抗生素药敏纸片文本朝向检测与校正最佳实践

一、文本朝向检测方法

  • OCR引擎内置检测:使用Tesseract的image_to_osd方法直接获取文本方向(含旋转角度),配合--psm 0参数可专门做方向与脚本检测;云OCR服务(如Google Cloud Vision、AWS Textract)的方向检测API准确率更高,适合复杂光照或模糊场景。
  • 计算机视觉特征分析:通过OpenCV提取文本轮廓,计算轮廓最小外接矩形的旋转角度,统计高频角度作为整体朝向;或用霍夫变换检测文本行的倾斜方向,适合无OCR依赖的轻量化场景。
  • 深度学习模型:采用轻量文本方向检测模型(如EAST扩展模型、CRNN变种),批量处理时准确率优于传统方法,适合大规模样本场景。

二、图像旋转校正工具

  • OpenCV:通过cv2.getRotationMatrix2D生成旋转矩阵,结合cv2.warpAffine实现任意角度旋转;可通过计算旋转后图像的边界尺寸,避免黑边遮挡文本。
  • PIL/Pillow:用Image.rotate()快速实现旋转,支持指定填充色(如白色)处理黑边,适合简单场景的快速校正。
  • Tesseract联动校正:基于image_to_osd返回的角度直接旋转图像,再用Tesseract进行OCR,减少工具切换成本。

三、针对圆形药敏纸片的稳健工作流

  1. 图像预处理:将裁剪后的图像灰度化→自适应二值化(适配纸片光照不均)→中值滤波去噪,突出文本轮廓。
  2. 圆形区域掩码:利用霍夫圆检测(cv2.HoughCircles)或图像尺寸生成圆形掩码,仅保留圆形内的文本区域,过滤背景干扰。
  3. 朝向检测:优先用Tesseract的image_to_osd获取旋转角度;若检测失败, fallback到轮廓分析统计高频角度。
  4. 图像校正:根据检测到的角度旋转图像,调整边界尺寸去除黑边,确保文本区域完整可读。
  5. OCR提取:用校正后的图像执行OCR,设置--psm 6(单一文本块模式)+对应语言参数(如-l eng)提升准确率。

示例代码片段(Python)

import cv2
import pytesseract
import numpy as np

# 读取裁剪后的药敏纸片图像
img = cv2.imread("antibiotic_disc.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 预处理:自适应二值化+去噪
thresh = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2)
thresh = cv2.medianBlur(thresh, 3)

# 生成圆形掩码(适配正方形裁剪图)
height, width = thresh.shape
mask = np.zeros((height, width), dtype=np.uint8)
cv2.circle(mask, (width//2, height//2), min(width, height)//2, 255, -1)
masked_img = cv2.bitwise_and(thresh, thresh, mask=mask)

# 检测文本朝向
osd_result = pytesseract.image_to_osd(masked_img)
rotation_angle = int(osd_result.split("Orientation in degrees: ")[1].split("\n")[0])

# 校正图像(处理黑边)
if rotation_angle != 0:
    center = (width//2, height//2)
    rot_mat = cv2.getRotationMatrix2D(center, rotation_angle, 1.0)
    # 计算旋转后图像的新尺寸
    cos_val = np.abs(rot_mat[0, 0])
    sin_val = np.abs(rot_mat[0, 1])
    new_w = int((height * sin_val) + (width * cos_val))
    new_h = int((height * cos_val) + (width * sin_val))
    # 调整旋转矩阵的偏移量
    rot_mat[0, 2] += (new_w / 2) - center[0]
    rot_mat[1, 2] += (new_h / 2) - center[1]
    corrected_img = cv2.warpAffine(masked_img, rot_mat, (new_w, new_h), borderValue=255)

# 提取文本
ocr_text = pytesseract.image_to_string(corrected_img, config="--psm 6 -l eng")
print("提取的药敏文本:", ocr_text.strip())

内容的提问来源于stack exchange,提问作者Zahidul Islam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 23:29:58