如何使用Python检测图像中的二维数据矩阵

问题描述 投票:0回答:1

我有一组医疗表格,页面的一角可能包含也可能不包含二维数据矩阵。我需要检测二维数据矩阵是否存在。目前,还没有必要读取条形码的内容。 我一直在寻找不同的库,但找不到具有 OCR 功能的库或可以检测二维数据矩阵是否存在的库。 我需要用 Python 来做这个。

附件是一个医疗表格示例,其中二维数据矩阵位于页面的右下角。在这种情况下,算法应该说“True”,因为页面中存在数据矩阵。

PS:我已经测试了 AWS Textract,但没有检测到 datamatrix。

Medical form example

python amazon-web-services ocr barcode datamatrix
1个回答
0
投票

以下是检测 2D DataMatrix 的步骤:

  1. 安装dynamsoft_capture_vision_bundleopencv python

    pip install dynamsoft-capture-vision-bundle opencv-python
    
  2. 创建一个Python脚本,如下所示。您需要将

    test.png
    LICENSE-KEY
    替换为您自己的。许可证密钥可以从这里获取。

    import sys
    from dynamsoft_capture_vision_bundle import *
    import os
    import cv2
    import numpy as np
    from utils import *
    
    image_path = 'test.png'
    
    error_code, error_message = LicenseManager.init_license(
     "LICENSE-KEY")
    if error_code != EnumErrorCode.EC_OK and error_code != 
    EnumErrorCode.EC_LICENSE_CACHE_USED:
        print("License initialization failed: ErrorCode:",
           error_code, ", ErrorString:", error_message)
    
        sys.exit()
    
    cvr_instance = CaptureVisionRouter()
    result = cvr_instance.capture(
     'test.png', EnumPresetTemplate.PT_READ_BARCODES.value)
    if result.get_error_code() != EnumErrorCode.EC_OK:
        print("Error:", result.get_error_code(),
           result.get_error_string())
    
        sys.exit()
    
    cv_image = cv2.imread(image_path)
    
    items = result.get_items()
    print('Found {} barcodes.'.format(len(items)))
    for item in items:
        format_type = item.get_format()
        text = item.get_text()
        print("Barcode Format:", format_type)
        print("Barcode Text:", text)
    
        location = item.get_location()
        x1 = location.points[0].x
        y1 = location.points[0].y
        x2 = location.points[1].x
        y2 = location.points[1].y
        x3 = location.points[2].x
        y3 = location.points[2].y
        x4 = location.points[3].x
        y4 = location.points[3].y
        del location
    
        cv2.drawContours(
         cv_image, [np.intp([(x1, y1), (x2, y2), (x3, y3), (x4, y4)])], 0, (0, 255, 0), 2)
    
        cv2.putText(cv_image, text, (x1, y1 - 10),
                 cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 2)
    
    max_width = 1600
    max_height = 1000
    
    original_height, original_width = cv_image.shape[:2]
    
    scaling_factor = min(
     max_width / original_width, max_height / original_height)
    
    new_width = int(original_width * scaling_factor)
    new_height = int(original_height * scaling_factor)
    
    resized_image = cv2.resize(
     cv_image, (new_width, new_height), interpolation=cv2.INTER_AREA)
    
    cv2.imshow(
     "Original Image with Detected Barcodes", resized_image)
    
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    
  3. 运行脚本:

    enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.