我有一组医疗表格,页面的一角可能包含也可能不包含二维数据矩阵。我需要检测二维数据矩阵是否存在。目前,还没有必要读取条形码的内容。 我一直在寻找不同的库,但找不到具有 OCR 功能的库或可以检测二维数据矩阵是否存在的库。 我需要用 Python 来做这个。
附件是一个医疗表格示例,其中二维数据矩阵位于页面的右下角。在这种情况下,算法应该说“True”,因为页面中存在数据矩阵。
PS:我已经测试了 AWS Textract,但没有检测到 datamatrix。
以下是检测 2D DataMatrix 的步骤:
安装dynamsoft_capture_vision_bundle和opencv python
pip install dynamsoft-capture-vision-bundle opencv-python
创建一个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()
运行脚本: