Сканирование, обнаружение и декодирование кода UPC из изображения

Я работаю над разработкой для Android, где, как только я получаю байтовый массив из фрейма Google Glass, я пытаюсь сканировать массив, используя библиотеку Zxing, и пытаюсь обнаружить 1d штрих-код (код UPC). Я попробовал этот фрагмент кода.

BufferedImage image = ImageIO.read(game);
BufferedImageLuminanceSource bils = new BufferedImageLuminanceSource(image);
HybridBinarizer hb = new HybridBinarizer(bils);
BitMatrix bm = **hb.getBlackMatrix();**
MultiDetector detector = new MultiDetector(bm);
DetectorResult dResult = detector.detect();
if(dResult == null)
{
    System.out.println("Image does not contain any barcode");
}
else
{
    BitMatrix QRImageData = dResult.getBits();
    Decoder decoder = new Decoder();
    DecoderResult decoderResult = decoder.decode(QRImageData);
    String QRString = decoderResult.getText();
    System.out.println(QRString);
} 

Он отлично работает для QR-кода, хорошо обнаруживает и декодирует QR-код. Но не обнаруживает код UPC.

Я также попробовал этот фрагмент кода,

InputStream barCodeInputStream = new FileInputStream(game);
BufferedImage barCodeBufferedImage = ImageIO.read(barCodeInputStream);
BufferedImage image = ImageIO.read(game);
LuminanceSource source = new BufferedImageLuminanceSource(image);
BinaryBitmap bitmap = new BinaryBitmap(new GlobalHistogramBinarizer(source));
RSSExpandedReader rssExpandedReader = new RSSExpandedReader();
int rowNumber = bitmap.getHeight()/2;
BitArray row = **bitmap.getBlackRow(0, null);**
Result theResult = rssExpandedReader.decodeRow(rowNumber, row, new Hashtable());

и в обоих я получаю "Исключение в потоке" главное "com.google.zxing.NotFoundException".

Кто-нибудь знает, как решить эту проблему?

getBlackMatrix () - Преобразует двумерный массив данных яркости в 1 бит. Как и выше, предположим, что этот метод дорог и не вызывайте его повторно. Этот метод предназначен для декодирования 2D штрих-кодов и может применять или не применять повышение резкости. Поэтому строка из этой матрицы может не совпадать с строкой, полученной с помощью getBlackRow(), поэтому не смешивайте и не сопоставляйте их.

getBlackRow () - Преобразует одну строку данных яркости в данные 1 бита. Может на самом деле сделать преобразование или вернуть кэшированные данные. Вызывающие абоненты должны полагать, что этот метод дорогой, и вызывать его как можно реже. Этот метод предназначен для декодирования штрих-кодов 1D и может выбрать повышение резкости.

0 ответов

Другие вопросы по тегам