Найти - Пользователи
Полная версия: Скрипт, который сортирует фото по штрихкоду используя zbar
Начало » Центр помощи » Скрипт, который сортирует фото по штрихкоду используя zbar
1 2
maxprof90
Доброго времени суток.

Имеется фото товаров (3 штуки на товар), одно из фото имеет штрихкод, по которому и будет сортироваться по папкам. Задача распознать штрихкод, создать папки, в качестве имени папки использовать штрихкод. Далее в эти папки переместить нужные фото товара (т.е две чистые фотки, фотку со штрихкодом удалить.)

Я не программист, а сисадмин. Прошу помочь реализовать скрипт. На данный момент застрял на том, чтобы сделать так, чтобы кусок кода обрабатывал фото в подкаталогах. Если положить скрипт в корень папки с фото, то он работает.
Для работы нужно установить Zbar

Использую следующий план:
1. Создаю папки по формуле количество файлов разделить на 3. Таким образом в каждой папке будет по 3 файла.
2. Распознать штрихкод в подкаталогах и присвоить имя папке соответствующее штрихкоду
3. Удалить фото со штрихкодом.

Вот какой код имею.

 import os
import subprocess
import glob
import locale
from math import ceil, floor
 
folder_address = "D:\\Phyton\\IMAGES\\" # адрес папки, где нужно обработать фото
directory = os.fsencode(folder_address)
i = 0
files_in_folder = 3 # можно менять значение, сколько файлов должно быть в папке.
 
 
num_of_files = num_of_files = len([name for name in os.listdir(directory)  if  os.path.isfile(os.path.join(directory, name))])
 
 
 
for x in range(ceil(num_of_files / files_in_folder)):
    
    path = folder_address + "\\" + str(x+1)
    if not os.path.exists(path):
        os.mkdir(path)
 
files = (file for file in os.listdir(directory)
        if os.path.isfile(os.path.join(directory, file)))
 
for file in files:
  
    file_name = os.fsdecode(file)
    file_path = os.path.join(folder_address, file_name)
    new_file_path = os.path.join(folder_address, str(floor(i / files_in_folder) + 1), file_name)
    os.rename(file_path, new_file_path)
    i += 1
 
encoding = locale.getdefaultlocale()[1]
# до этого момента код работает, теперь нужно зайти в подкаталоги, распознать штрихкод и переименовать папку
# Функция распознавания штрихкода
def get_code(file):
 
    try:
        raw_code = subprocess.check_output(["C:\\Program Files (x86)\\ZBar\\bin\\zbarimg", "-q", \
        file])
        raw_code = raw_code.rstrip()
        raw_code = raw_code.decode(encoding)
        code = raw_code.split(':',1)[1]
        return(code)
    except:
        return("unreadable_code")
 
# скорее всего тут нужно использовать рекурсивный обход папок
image_files = glob.glob('*.JPG') + glob.glob('*.png')
 
print(image_files)
 
 
for file in image_files:
 
 file_path = os.path.join(os.getcwd(), file)
 
 code = get_code(file)
 
 # Здесь нужно переименовать существующие папки и присвоить им штрихкод
 folder =  os.path.join(os.getcwd(), code)
 os.makedirs(folder, exist_ok=True)
 
 
 
 # Тут должен быть код, который удалит файлы со штрихкодом
xam1816
Выложите отрывок файла с фотографиями
maxprof90
До запуска скрипта файлы выглядят так. прикрепляю фото.
maxprof90
после обработки на данный момент происходит следующее
maxprof90
а должно быть так, как на следующем фото.
maxprof90
ниже код, который работает, если его отдельно запустить в той же папке ,что и фото. Он распознает штрихкоды с фоток, создает папки с именем штрихкода и переносит в соответствующие папки фотки. В отдельную папку сбрасывает не распознанные
 import subprocess
import os
import locale
import glob
encoding = locale.getdefaultlocale()[1]
def get_code(file):
	
	try:
		raw_code = subprocess.check_output(["C:\\Program Files (x86)\\ZBar\\bin\\zbarimg", "-q", \
		file])
		raw_code = raw_code.rstrip()
		raw_code = raw_code.decode(encoding)
		code = raw_code.split(':',1)[1]
		return(code)
	except:
		return("unreadable_code")
image_files=glob.glob('*.JPG') + glob.glob('*.png')
print(image_files)
for file in image_files:
 file_path = os.path.join(os.getcwd(), file) 
 code = get_code(file)
 folder = os.path.join(os.getcwd(), code)
 os.makedirs(folder, exist_ok=True)
 os.rename(file_path, folder + "\\" + file)
 
xam1816
xam1816
Выложите отрывок файла с фотографиями
я имел ввиду папку с фотографиями товаров - 6 или 9 фоток в папке для теста
maxprof90
Скидываю фото для тестов.
maxprof90
Не учел еще один важный момент. Сейчас у меня просто равномерно фотки падают по 3 шт. в папку. И не всегда это работает правильно. Получается прежде, чем распределить по папкам нужно сначала отсортировать по времени создания, так чтобы фото делились по 3, которые сделанные подряд. Пока ищу способы, как это можно сделать.
xam1816
maxprof90
Получается прежде, чем распределить по папкам нужно сначала отсортировать по времени создания,
в папке фотки с одним названием, время одно и тоже
photo_2022-05-25_11-28-47 (2).jpg
photo_2022-05-25_11-28-47 (3).jpg
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB