Вопрос или проблема
Для проекта электронной коммерции нам нужно сфотографировать десятки тысяч продуктов, у всех которых есть штрих-код. Для того чтобы загружать фотографии в магазин пакетами и знать, какая фотография относится к какому продукту, я придумал следующий процесс:
- Взять продукт
- Сделать четкую фотографию штрих-кода продукта
- Сделать n фотографий продукта с различных ракурсов (штрих-код на этих фотографиях не будет виден)
- Взять следующий продукт, перейти к шагу 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).
Ответ или решение
В проекте электронной коммерции требуется фотографировать десятки тысяч товаров с наличием штрих-кода. Для массовой загрузки фотографий в магазин и определения, какое изображение соответствует какому товару, предлагается использовать следующий метод:
- Берем товар.
- Делаем четкую фотографию штрих-кода товара.
- Делаем несколько фотографий товара с различных ракурсов (в них штрих-код не будет виден).
- Берем следующий товар и повторяем шаги 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.
Это решение также позволяет легко внедрять изменения и оптимизации, исходя из специфических нужд вашего проекта.
Выбор между предложенными решениями может зависеть от ваших предпочтений, навыков программирования и бюджета. Они оба предлагают качественное и надежное распознавание штрих-кода, помогая автоматизировать процесс фотосъемки и сортировки товаров для ваших нужд электронной коммерции.