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

基于Python图像处理的卷材半圆形印刷ID识别问题咨询

半圆形卷材ID识别调整方案

核心问题为ID沿半圆形印刷,字符存在多角度偏转,Tesseract默认仅支持水平/接近水平的文本识别,因此只能识别局部直线段的数字。可按以下方案调整:

  • 新增弧形区域极坐标展开逻辑:这是最核心的优化点,先定位ID所在圆弧的圆心、内外半径,将环形分布的ID通过极坐标逆变换拉伸为水平排列的矩形文本,符合Tesseract的识别输入要求。
  • 优化图像预处理逻辑:展开后再做灰度化、高斯去噪、二值化处理,可增加形态学闭运算修复字符断裂,过滤背景噪点。
  • 适配Tesseract识别参数:将PSM模式调整为7(假设输入为单行文本),比默认的3(自动分页)更适合单行数字的识别场景,降低误判概率。

修改后的完整代码如下:

import numpy as np
import pytesseract
import cv2

pytesseract.pytesseract.tesseract_cmd = 'C:\\Program Files\\Tesseract-OCR\\tesseract.exe'
image = cv2.imread('1.jpg')

# 裁剪ROI区域,可根据实际采集场景调整坐标
(h, w) = image.shape[:2]
ROI = image[200:450, 1100:1550]
roi_h, roi_w = ROI.shape[:2]

# ------------------- 核心:弧形文本极坐标展开 -------------------
# 圆心坐标、内外半径可根据实际ID印刷位置微调
center = (roi_w // 2, roi_h // 2 + 50)
max_radius = roi_h // 2 + 30
min_radius = roi_h // 2 - 30

# 计算展开后矩形尺寸
unwarp_w = int(2 * np.pi * max_radius)
unwarp_h = max_radius - min_radius

# 生成坐标映射表
map_x = np.zeros((unwarp_h, unwarp_w), dtype=np.float32)
map_y = np.zeros((unwarp_h, unwarp_w), dtype=np.float32)
for y in range(unwarp_h):
    for x in range(unwarp_w):
        theta = 2 * np.pi * x / unwarp_w
        r = max_radius - y
        map_x[y, x] = center[0] + r * np.cos(theta)
        map_y[y, x] = center[1] + r * np.sin(theta)

# 执行变换得到水平文本
unwarped = cv2.remap(ROI, map_x, map_y, interpolation=cv2.INTER_CUBIC)
unwarped = cv2.rotate(unwarped, cv2.ROTATE_90_COUNTERCLOCKWISE)
# ----------------------------------------------------------------

# 预处理优化
gray = cv2.cvtColor(unwarped, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray, (3, 3), 0)
thresh = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1]
# 修复字符断裂
kernel = np.ones((2, 2), np.uint8)
thresh = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel)

# 适配单行数字识别参数
options = "--psm 7 -c tessedit_char_whitelist=0123456789"
text = pytesseract.image_to_string(thresh, config=options)
print("识别结果:", text.strip())

cv2.imshow("展开后文本", unwarped)
cv2.imshow("预处理结果", thresh)
cv2.waitKey(0)
cv2.destroyAllWindows()

提示:若需要适配不同尺寸、位置的卷材ID,可新增霍夫圆检测逻辑自动定位圆弧圆心、半径参数,无需手动调整固定值。

内容的提问来源于stack exchange,提问作者nihal akcay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 22:54:02