Итерация списка фотографий, отсортированных по дате создания, поиск штрих-кода на фотографии и сопоставление последующих фотографий соответствующему штрих-коду.

Вопрос или проблема

Для проекта электронной коммерции нам нужно сфотографировать десятки тысяч продуктов, у всех которых есть штрих-код. Для того чтобы загружать фотографии в магазин пакетами и знать, какая фотография относится к какому продукту, я придумал следующий процесс:

  1. Взять продукт
  2. Сделать четкую фотографию штрих-кода продукта
  3. Сделать n фотографий продукта с различных ракурсов (штрих-код на этих фотографиях не будет виден)
  4. Взять следующий продукт, перейти к шагу 2

Результат будет выглядеть как список фотографий следующим образом

  • фото штрих-кода продукта A
  • 1-е фото продукта A
  • 2-е фото продукта A
  • фото штрих-кода продукта B
  • 1-е фото продукта B
  • фото штрих-кода продукта C
  • 1-е фото продукта C
  • 2-е фото продукта C
  • фото штрих-кода продукта D
  • 1-е фото продукта D
  • 2-е фото продукта D
  • 3-е фото продукта D
  • 4-е фото продукта D
  • фото штрих-кода продукта E
  • 1-е фото продукта E
  • 2-е фото продукта E

Теперь я ищу программное обеспечение, чтобы перебрать этот список и создать csv файл со следующим результатом

штрих-код | имена файлов
12312312 | p1.jpg, p2.jpg
42342342 | p3.jpg
31231231 | p4.jpg, p5.jpg
31254234 | p6.jpg, p7.jpg, p8.jpg, p9.jpg
75867867 | p10.jpg, p11.jpg

Редактировать: у меня нет ограничений по поводу ОС. Это может быть Windows, Linux или MacOS, также нет ограничений по бюджету. Я полагаю, что эта услуга не должна быть очень дорогой, но также не ожидаю, что это будет бесплатно.

Поскольку вы упомянули “проект электронной коммерции”, это может означать, что у вас есть доступ к программисту. Если это так, вы могли бы использовать программный набор инструментов для проверки изображений на наличие штрих-кодов и создания CSV файла с помощью кода.

Один из таких наборов инструментов — это LEADTOOLS Barcode Pro. Дисклеймер: я являюсь сотрудником поставщика этого набора инструментов.
Следующий код на C# создает CSV файл из списка имен файлов с изображениями:

private void CreatePhotoList(string csvName, string[] imageFileNames)
{
System.IO.StreamWriter csv = new StreamWriter(csvName);
csv.Write("barcode,filenames");
for (int i = 0; i < imageFileNames.Length; ++i)
{
   RasterImage image = _codecs.Load(imageFileNames[i]);
   BarcodeEngine engine = new BarcodeEngine();
   BarcodeReader reader = engine.Reader;
   var symbologies // указать один или несколько типов штрих-кодов, которые вы хотите искать
      = new BarcodeSymbology[] { BarcodeSymbology.Code128, BarcodeSymbology.Code3Of9 };
   BarcodeData barcode = reader.ReadBarcode(image, LeadRect.Empty, symbologies);
   string itemToWrite;
   if (barcode == null)
   {
      itemToWrite = imageFileNames[i];
      csv.Write(",");
   }
   else
   {
      csv.Write("\n");
      itemToWrite = barcode.Value;
   }
   if (itemToWrite.Contains(",")) // если есть запятая, следует заключить в двойные кавычки
      itemToWrite = "\"" + itemToWrite + "\"";
   csv.Write(itemToWrite);
}
csv.Close();
}

Код использует LEADTOOLS для поиска штрих-кода на изображении. Если он находит его, то начинает новую строку и записывает значение штрих-кода в CSV файл. Если на изображении нет штрих-кода, то оно записывается в ту же строку, предполагая, что оно относится к предыдущему штрих-коду.

Это должно работать, если список имен файлов изображений упорядочен правильно (Barcode1, изображение1, изображение1, Barcode2, изображение2, изображение2, изображение2 и т.д.)

Если хотите попробовать, есть бесплатная оценочная версия LEADTOOLS, которую можно скачать. Если вы не программируете на C#, набор инструментов поддерживает другие языки, включая C, C++, VB.NET, Java и Objective-C. Также техническая поддержка бесплатна даже во время оценочного периода.

Вы могли бы использовать комбинацию python, OpenCV и zbar, чтобы написать этот скрипт. Локализация и декодирование штрих-кодов с изображений или видеопотоков хорошо освещены в этой статье блога всего 40 строками кода для статических изображений, единственное значительное отличие в том, что вам нужно добавить имена файлов изображений, которые не содержат штрих-код, в список для последнего штрих-кода.

  • Бесплатно, без ограничений и с открытым исходным кодом
  • Кросс-платформенность (даже работает на Raspberry Pi).

Ответ или решение

В проекте электронной коммерции требуется фотографировать десятки тысяч товаров с наличием штрих-кода. Для массовой загрузки фотографий в магазин и определения, какое изображение соответствует какому товару, предлагается использовать следующий метод:

  1. Берем товар.
  2. Делаем четкую фотографию штрих-кода товара.
  3. Делаем несколько фотографий товара с различных ракурсов (в них штрих-код не будет виден).
  4. Берем следующий товар и повторяем шаги 2-3.

Результатом этого процесса станет список фотографий, например:

  • фото штрих-кода продукта A
  • 1-е фото продукта A
  • 2-е фото продукта A
  • фото штрих-кода продукта B
  • и т.д.

Для обработки этого списка фотографий и создания CSV файла в формате "штрих-код | имена файлов", могут быть предложены несколько решений на основе инструментов для разработчиков и доступных технологий.

Использование LEADTOOLS Barcode Pro

LEADTOOLS Barcode Pro – это инструмент для извлечения штрих-кодов из изображений. Пример кода на C#, который создает файл CSV из списка имен изображений, представлен ниже:

private void CreatePhotoList(string csvName, string[] imageFileNames)
{
    System.IO.StreamWriter csv = new StreamWriter(csvName);
    csv.Write("barcode,filenames");
    for (int i = 0; i < imageFileNames.Length; ++i)
    {
        RasterImage image = _codecs.Load(imageFileNames[i]);
        BarcodeEngine engine = new BarcodeEngine();
        BarcodeReader reader = engine.Reader;
        var symbologies = new BarcodeSymbology[] { BarcodeSymbology.Code128, BarcodeSymbology.Code3Of9 };
        BarcodeData barcode = reader.ReadBarcode(image, LeadRect.Empty, symbologies);
        string itemToWrite;
        if (barcode == null)
        {
            itemToWrite = imageFileNames[i];
            csv.Write(",");
        }
        else
        {
            csv.Write("\n");
            itemToWrite = barcode.Value;
        }
        if (itemToWrite.Contains(",")) 
            itemToWrite = "\"" + itemToWrite + "\"";
        csv.Write(itemToWrite);
    }
    csv.Close();
}

Этот код позволяет просматривать изображения, искать штрих-кода и добавлять названия файлов в CSV.

Использование Python, OpenCV и Zbar

Также можно воспользоваться открытыми технологиями, такими как Python с библиотеками OpenCV и Zbar. Эти инструменты позволяют идентифицировать и декодировать штрих-коды в изображениях. Скрипт на Python может автоматически сопоставлять непомеченные изображения с последним найденным штрих-кодом и записывать результаты в CSV:

  • Инструменты бесплатны и имеют открытый исходный код.
  • Работоспособны на всех основных платформах, включая Windows, Linux, и macOS.

Это решение также позволяет легко внедрять изменения и оптимизации, исходя из специфических нужд вашего проекта.

Выбор между предложенными решениями может зависеть от ваших предпочтений, навыков программирования и бюджета. Они оба предлагают качественное и надежное распознавание штрих-кода, помогая автоматизировать процесс фотосъемки и сортировки товаров для ваших нужд электронной коммерции.

Оцените материал
Добавить комментарий

Капча загружается...