Уведомления

Группа в Telegram: @pythonsu

#1 Май 25, 2022 12:30:13

maxprof90
Зарегистрирован: 2022-05-25
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Скрипт, который сортирует фото по штрихкоду используя zbar

xam1816
Да. вопрос с сортировкой снимается. Если использовать файлы с правильным именем (формата IMG_20220525_112719), файлы делятся правильно.

Офлайн

#2 Май 25, 2022 13:11:28

maxprof90
Зарегистрирован: 2022-05-25
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Скрипт, который сортирует фото по штрихкоду используя zbar

архив фото с правильными именами

Прикреплённый файлы:
attachment IMAGES.rar (682,8 KБ)

Офлайн

#3 Май 26, 2022 01:46:34

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1394
Репутация: +  124  -
Профиль   Отправить e-mail  

Скрипт, который сортирует фото по штрихкоду используя zbar

maxprof90
архив фото с правильными именами
позже код выложу

Офлайн

#4 Май 26, 2022 13:03:58

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1394
Репутация: +  124  -
Профиль   Отправить e-mail  

Скрипт, который сортирует фото по штрихкоду используя zbar

  
import os
import shutil
from PIL import Image
from pyzbar import pyzbar
 
ROOT_PATH = r"/home/xam/Загрузки/test_folder"
TARGET_PATH = os.path.join(ROOT_PATH, 'IMAGES')
OUT_PATH = os.path.join(ROOT_PATH, 'out')
 
def get_filenames(dir_path):
    return sorted(os.listdir(dir_path))
 
def split_into_blocks(fname_lst):
    return [fname_lst[n:n+3] for n in range(0, len(fname_lst), 3)]
 
def get_code_from_img(image):
    out = pyzbar.decode(Image.open(image))
    if out:
        return out[0].data.decode()
 
def find_code_from_block(block):
    for im in block:
        code = get_code_from_img(os.path.join(TARGET_PATH, im))
        if code:
            return code
 
def create_code_folder(code):
    dir = os.path.join(OUT_PATH, code)
    if not os.path.exists(dir):
        os.makedirs(dir)
    return dir
 
def create_bad_folder():
    dir = os.path.join(OUT_PATH, 'bad')
    if not os.path.exists(dir):
        os.makedirs(dir)
    return dir
 
def copy_img_from_block(block, dir):
    for img in block:
        shutil.copy(os.path.join(TARGET_PATH, img), dir)
 
def main():
    image_blocks = split_into_blocks(get_filenames(TARGET_PATH))
    for block in image_blocks:
        code = find_code_from_block(block)
        if code:
            code_folder_path = create_code_folder(code)
            copy_img_from_block(block, code_folder_path)
        else:
            bad_folder = create_bad_folder()
            copy_img_from_block(block, bad_folder)
 
if __name__ == '__main__':
    main()

у меня линукс на винде не пробовал

Отредактировано xam1816 (Май 26, 2022 13:07:32)

Офлайн

#5 Май 26, 2022 13:20:36

maxprof90
Зарегистрирован: 2022-05-25
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Скрипт, который сортирует фото по штрихкоду используя zbar

Круто, работает! Спасибо!!!
Подскажите, что следует дописать, чтобы фотки со штрихкодами удалить в подкаталогах и осталось только по две чистых фотки. Фотка со штрихкодом у меня была в качестве маркера.

Офлайн

#6 Май 27, 2022 11:22:32

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1394
Репутация: +  124  -
Профиль   Отправить e-mail  

Скрипт, который сортирует фото по штрихкоду используя zbar

maxprof90
только по две чистых фотки.
заменить функции на эти
  
def find_code_from_block(block):
    for img in block:
        code = get_code_from_img(os.path.join(TARGET_PATH, img))
        if code:
            return code, img
    return None, None

  
def copy_img_from_block(block, dir, img_ignore = None):
    for img in block:
        if img != img_ignore:
            shutil.copy(os.path.join(TARGET_PATH, img), dir)

  
def main():
    image_blocks = split_into_blocks(get_filenames(TARGET_PATH))
    for block in image_blocks:
        code, img_name = find_code_from_block(block)
        if code:
            code_folder_path = create_code_folder(code)
            copy_img_from_block(block, code_folder_path, img_name)
        else:
            bad_folder = create_bad_folder()
            copy_img_from_block(block, bad_folder)

Офлайн

#7 Май 27, 2022 12:28:24

maxprof90
Зарегистрирован: 2022-05-25
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Скрипт, который сортирует фото по штрихкоду используя zbar

Спасибо большое!!!

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version