我正在尝试使用Vision Barcode Scanner的实现扫描一些Data Matrix条形码,但我在编码的条码扫描器上遇到了问题.
我正在使用:
int codesDetected = Barcode.ALL_FORMATS;
Run Code Online (Sandbox Code Playgroud)
但它仍会返回那些的未知编码.
另一方面,Google Goggles应用程序正确扫描它们,对于使用zxing的其他一些条形码阅读器也是如此.
条形码示例:
如果能解决这个问题,我愿意转移到Zxing,但我想知道我的实现中是否缺少某些东西(我采用了Vision示例应用程序)这些类型的条形码(数据矩阵编码).
谢谢
上下文:我需要使用我的Android手机的相机扫描数据矩阵条形码.我通过html5访问相机,并将图片放入画布元素.
方法:我找不到用于扫描图片的JavaScript库来解码2D数据矩阵代码.实际上我打电话给ZXing应用程序并复制并返回等等.所以我对这个费力的解决方案不满意.
问:有人知道用于解码2D数据矩阵代码的javascript库吗?或者通过使用像ZXing/Goggles这样的其他应用程序并在JS中自动获得扫描结果的简单解决方案?!
我很感激你的意见.
我正在使用zxing生成不同类型的条形码(EAN,2of5和DataMatrix).生成一般工作正常.我目前唯一的问题是zxing只生成一个14x14像素的位图,这个位图太小了.但只有在使用DataMatrix时!EAN13,2of5/ITF和QR码与相同的代码完美配合.
我的代码:
BitMatrix bitMatrix = new DataMatrixWriter().encode(message, BarcodeFormat.DATA_MATRIX, 1080, 1080, null);
int height = bitMatrix.getHeight(); //height is always 14, it doesn't matter what value I pass to the encoder
Run Code Online (Sandbox Code Playgroud)
你可以想象这在像nexus 5这样的1080p屏幕上看起来很糟糕.我有什么问题吗?我是否必须为DataMatrix做一些特殊设置?
谷歌和Stackoverflow无法帮助我,因为我找不到任何使用DataMatrix的例子
更新 这是我将bitmatrix转换为位图的方法
int width = bitMatrix.getWidth();
int height = bitMatrix.getHeight();
int[] pixels = new int[width * height];
// All are 0, or black, by default
for (int y = 0; y < height; y++) {
int offset = y * width;
for (int x = 0; x < …
Run Code Online (Sandbox Code Playgroud) 我们需要解析由其他方提供的GS1 datamatrix条形码.我们知道他们将使用GTIN(01),批号(10),到期日期(17),序列号(21).问题是条形码阅读器输出一个字符串,格式如下01076123456789001710050310AC3453G321455777.由于没有分隔符,并且根据GS1标准,序列号和批号都是可变长度,我们很难识别段.我的理解是,解析的最佳方法似乎是将解析器嵌入扫描设备中,而不是从应用程序中嵌入.但我们还没有计划嵌入式软件.我该如何实现解析器?有什么建议?
我的目标是在像这样的大图像上检测多个数据矩阵(四大):
基于几个代码示例,我做了一个小测试程序:
Bitmap image = getImage();
DataMatrixReader reader = new DataMatrixReader();
GenericMultipleBarcodeReader genericReader = new genericMultipleBarcodeReader(reader);
Dictionary<DecodeHintType, object> hints = new Dictionary<DecodeHintType,object>();
hints.Add(DecodeHintType.TRY_HARDER, true);
BitmapLuminanceSource source = new BitmapLuminanceSource(image);
HybridBinarizer binarizer = new HybridBinarizer(source);
BinaryBitmap binaryBitmap = new BinaryBitmap(binarizer);
Result[] results = genericReader.decodeMultiple(binaryBitmap,hints);
show(results);
Run Code Online (Sandbox Code Playgroud)
它无法检测到大图像上的任何代码.
但它可以检测到代码,当它被裁剪时:
之后我合并了两个生成的数据矩阵,它也失败了:
最后我用略微裁剪的图片再进行了两次测试,两次都失败了:
所以看起来这个库根本不健壮,或者我使用它错了.
知道如何改善我的结果吗?(包括其他库和预处理)
Data Matrix条形码支持已添加到iOS 8中,如果它们是白色黑色(光线较暗),我可以使用它来读取Data Matrix条形码.但是,它永远不会读取黑色(暗光)条形码上的白色.
读这个罚款:
无法阅读:
根据Data Matrix ECC 200,应支持黑暗照明.
任何人都知道如何让iOS 8读取黑暗Data Matrix条形码上的灯光?
我正在尝试读取微管底部的数据矩阵条形码.我尝试了libdmtx,它有python绑定,并且当矩阵的点是正方形时工作得相当好,但是当它们像这里一样圆时更糟糕:
另一个复杂因素是闪耀,在某些情况下到达代码区域.
条形码在平板扫描仪上的架子中扫描,因此它们具有恒定的尺寸并且大致居中.方向是随机的.
我得出结论,我必须自己找到代码并改善图像.我使用python和OpenCV 3.1.我已经尝试过阈值处理,轮廓:
import matplotlib.pyplot as plt
import numpy as np
import cv2
well = plt.imread('https://i.stack.imgur.com/kqHkw.png')
well = cv2.cvtColor(well, cv2.COLOR_BGRA2GRAY)
plt.subplot(151); plt.imshow(well)
x, thr = cv2.threshold(well, .4[enter image description here][2], 1, cv2.THRESH_BINARY)
thr = np.uint8(thr)
plt.subplot(152); plt.imshow(thr)
dst, contours, hierarchy = cv2.findContours(thr.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
c = cv2.drawContours(np.zeros_like(thr), contours, -1, 255, 1)
plt.subplot(153); plt.imshow(c)
areas = map(lambda x: cv2.contourArea(cv2.convexHull(x)), contours)
max_i = areas.index(max(areas))
d = cv2.drawContours(np.zeros_like(thr), contours, max_i, 255, 1)
plt.subplot(154); plt.imshow(d)
rect = cv2.minAreaRect(contours[max_i])
box = …
Run Code Online (Sandbox Code Playgroud) 我正在尝试从 Datamatrix 解码数字。这是我的代码
import cv2
from pylibdmtx.pylibdmtx import decode
a = decode(cv2.imread(dmtx.jpg'))
print(a)
Run Code Online (Sandbox Code Playgroud)
代码运行没有错误。但它不打印任何东西,它给了我一个空矩阵。
我无法理解 decode() 函数。
有人可以建议我使用 pylibdmtx lib 解码为数字吗?
我正在尝试在 Android 应用程序中利用ZXing来扫描数据矩阵。到目前为止,我成功的印刷数据矩阵如本:
但是其他通过激光或冲压打印的数据矩阵具有圆形标记而不是方形标记。
这些都存在问题。我发现唯一能够扫描这个的应用程序是QRDroid。这篇文章说QRDroid使用ZXing,所以我在想如果可以的话,一定有办法。不幸的是,QRDroid 不是一个开源项目,所以我不知道如何。
当然,QRDroid 有可能在尝试读取数据矩阵之前使用一种算法将带圆圈的标记转换为方形标记。我对 Java 中的图像处理一无所知,所以我无法想象这是如何完成的。
我的问题是是否有办法调整 ZXing 来读取这种类型的数据矩阵,或者是否有任何库可以用来操作图像以使其可被 ZXing 读取。
编辑:
如果我使用图像编辑器 - 例如我使用https://www.befunky.com-并应用 10 的模糊,那么它看起来像一个普通的打印数据矩阵,我的扫描工作。我应该如何在我的 Android 应用程序中执行此操作?
使用条码扫描仪、zxing 移动应用程序可以很好地读取下面的数据矩阵。但是,zxing java 库没有读取相同的内容。
我评论了一些图像转换代码。即使变换图像、旋转或缩放也无济于事。
理想情况下,我想以编程方式执行所有可能的图像预处理,直到解码。
移动应用程序使用的逻辑是什么,因为我从计算机屏幕扫描相同的图像并且它正在工作。
请在下面找到用于解码的代码。
public class BarcodeReader {
private static Map<DecodeHintType,Object> hintsMap;
public static void main(String...args){
BufferedImage before = null;
hintsMap = new EnumMap<DecodeHintType, Object>(DecodeHintType.class);
hintsMap.put(DecodeHintType.TRY_HARDER, Boolean.TRUE);
hintsMap.put(DecodeHintType.POSSIBLE_FORMATS, EnumSet.allOf(BarcodeFormat.class));
//hintsMap.put(DecodeHintType.PURE_BARCODE, Boolean.FALSE);
try
{
before = ImageIO.read(new File("C:/ocr.jpg"));
decode(before);
/* for(int i=1; i < 1000;i++){
AffineTransform transform = new AffineTransform();
double rad = (double)i/100;
double scale = (double)i/100;
System.out.println("rad "+scale);
//transform.rotate(rad, before.getWidth()/2, before.getHeight()/2);
transform.scale(scale, scale);
BufferedImage after = new BufferedImage(before.getWidth(), before.getHeight(), BufferedImage.TYPE_INT_ARGB);
AffineTransformOp op = new AffineTransformOp(transform, …
Run Code Online (Sandbox Code Playgroud) 我试图通过调用DataMatrix()函数创建一个DataMatrix变量。但是该功能不存在。如果输入:
>> DataMatrix
Run Code Online (Sandbox Code Playgroud)
我收到此错误消息:
Undefined function or variable 'DataMatrix'.
Run Code Online (Sandbox Code Playgroud)
我确实安装了生物信息学工具箱,在Mac上的版本是2016b
有任何想法吗?
我想知道如何在python中使用openCV读取数据矩阵条形码
我已经找到了如何使用python定位和读取数据矩阵代码,但这对我来说仍然不清楚。我想显示读取条形码以输出的结果。