使用python在药丸上刻印记检测

时间:2018-07-20 10:49:58

标签: python opencv image-processing python-tesseract

enter image description here

enter image description here

showTab() {
switch (this.state.activeTab) {
  case 'NewsRouter':
      return <News navigation={this.props.navigation} />;
      break;
  case 'MenuRouter':
      return <Menu navigation={this.navigationOptions} />;
      break;
  case 'CalendarRouter':
      return <Calendar navigation={this.navigationOptions} />;
      break;
  case 'MoodleRouter':
      return <Moodle navigation={this.navigationOptions} />;
      break;
  case 'CouncilRouter':
      return <Council navigation={this.navigationOptions} />;
      break;
}

enter image description here

我正在尝试代码中提到的某些图像处理,但是无法获得pytesseract可以检测到的图像。
请帮忙做任何工作来检测雕刻

seen that stack overflow link but did't get the proper idea

2 个答案:

答案 0 :(得分:4)

请注意:这只是入门代码。您可以使用它,它还涉及许多threshold值,您需要对其进行试验。当然,这不是最好的代码,但是您可以将其用作起点。

我将简要概述以下步骤,并在其后提供python代码以及在每个步骤中生成的output

  • 灰度
  • 中加载图像
  • 使用较大的kernel size执行自适应阈值。它是 对执行 Adaptive Threshold (自适应阈值)很重要,而不是对某些 Global 阈值,因为它考虑了附近的强度, 在您提供的示例图像中起着重要作用。
  • 执行中值模糊以消除盐和胡椒粉噪声
  • 找到相当大的 Connected Components 并删除 最终图像中的小岛噪声
  • 将最终的轮廓绘制到输出图像中。

下面提供了实现这一目标的python代码:

import cv2
import numpy as np

image = cv2.imread('test.png')
output = np.zeros((image.shape[0],image.shape[1],3), np.uint8)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
threshold = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C  , cv2.THRESH_BINARY, 11, 1)

median = cv2.medianBlur(threshold, 11)
median = cv2.bitwise_not(median)

im2, contours, hierarchy = cv2.findContours(median,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)

saved_cont = []
thresh = 100

for contour in contours:
    if cv2.contourArea(contour) > thresh:
        print(cv2.contourArea(contour))
        saved_cont.append(contour)

cv2.drawContours(output, saved_cont,-1,(255,255,255),1)

cv2.imshow('original', gray)
cv2.imshow('threshold', threshold)
cv2.imshow('median', median)
cv2.imshow('contour', output)

cv2.imwrite("threshold.png", threshold)
cv2.imwrite("median.png", median)
cv2.imwrite("output.png", output)

cv2.waitKey(0)
cv2.destroyAllWindows()

原始图片:

enter image description here

阈值图像:

enter image description here

中位数模糊图像:

enter image description here

最终输出:

enter image description here

您可能要尝试的其他形态学操作包括膨胀侵蚀打开和< strong>结算操作。可以在here上找到该文档。

答案 1 :(得分:2)

这是典型的工业应用。

您需要的设置是正确的照明: http://www.vision-doctor.com/en/illumination-techniques/dark-field-illumination.html 这是它的解释。只需一点创意,您就可以在家中制作原型,例如使用LED条纹。

通过灰色形态,您可以增强深色区域,以便更轻松地分割雕刻字母。

如果您下载了HALCON的测试版本并在制药行业和HALCON IDE HDevelop中的OCR上执行了示例,则这是学习的最佳方法,以及如何做到这一点。在示例中,您可以学习如何使用徽标匹配,以获取药丸的方向。然后,您可以将图像转换为水平方向以进行分割并执行OCR。如果您没有任何徽标,请使用印记作为模型进行基于形状的匹配,然后转换图像,以便使字母水平​​放置,然后对字母进行分割并执行OCR。 没有通用的配方,每个应用程序都是唯一的。但是您可以从示例中学到很多东西来构建自己的应用程序。

最好的问候, 多萝西娅