Я пытаюсь создать набор данных для задачи OCR, следуя этому руководству.
Я пытаюсь пройти через генератор и сохранить полученные изображения и ограничивающие рамки для создания набора данных. >
Кажется, я неправильно понимаю, как работают генераторы. Разве весь смысл генераторов не в том, чтобы не размещать в памяти весь массив одновременно? Я думал, что только одна пара изображений и строк будет храниться в ОЗУ для каждой итерации, но кажется, что каждый полученный кортеж сохраняется в ОЗУ до тех пор, пока у меня не закончится память.
Как я могу это сделать? что я пытаюсь сделать?
columns = ['character', 'x1', 'y1', 'x2', 'y2', 'x3', 'y3', 'x4', 'y4']
i = 0
for image, lines in image_generators[0]:
lines = list(itertools.chain(*lines))
rows = []
for coord_array, char in lines:
# Flatten the array and convert to a list
coordinates = coord_array.flatten().tolist()
# Append character and coordinates to rows
rows.append([char] + coordinates)
Image.fromarray(image).save(f"../data/generated_images/train/images/image_{i}.png")
df = pd.DataFrame(rows, columns=columns)
df.to_csv(f"../data/generated_images/val/boxes/boxes_{i}.csv")
i += 1
Когда я выполняю это, я получаю следующую ошибку:
{
"name": "OSError",
"message": "stack overflow",
"stack": "---------------------------------------------------------------------------
OSError Traceback (most recent call last)
Cell In[174], line 3
1 columns = ['character', 'x1', 'y1', 'x2', 'y2', 'x3', 'y3', 'x4', 'y4']
2 i = 0
----> 3 for image, lines in image_generators[1]:
4 try:
5 lines = list(itertools.chain(*lines))
File ~/UTN/character_clasification_and_detection/vevn/lib/python3.8/site-packages/keras_ocr/data_generation.py:700, in get_image_generator(height, width, font_groups, text_generator, font_size, backgrounds, background_crop_mode, rotationX, rotationY, rotationZ, margin, use_ligatures, augmenter, draw_contour, draw_contour_text)
694 random_color_values = np.random.randint(low=0, high=50, size=3)
695 text_color = (
696 tuple(np.array([255, 255, 255]) - random_color_values)
697 if isDark
698 else tuple(random_color_values)
699 )
--> 700 text_image, lines = draw_text_image(
701 text=text,
702 width=width,
703 height=height,
704 fontsize=current_font_size,
705 fonts=current_font_groups,
706 thetaX=current_rotation_X,
707 thetaY=current_rotation_Y,
708 thetaZ=current_rotation_Z,
709 use_ligatures=use_ligatures,
710 permitted_contour=permitted_contour,
711 color=text_color,
712 draw_contour=draw_contour_text,
713 )
714 alpha = text_image[..., -1:].astype(\"float32\") / 255
715 image = (alpha * text_image[..., :3] + (1 - alpha) * current_background).astype(
716 \"uint8\"
717 )
File ~/UTN/character_clasification_and_detection/vevn/lib/python3.8/site-packages/keras_ocr/data_generation.py:404, in draw_text_image(text, fontsize, height, width, fonts, use_ligatures, thetaX, thetaY, thetaZ, color, permitted_contour, draw_contour)
399 if permitted_contour is None:
400 permitted_contour = np.array(
401 [[0, 0], [width, 0], [width, height], [0, height]]
402 ).astype(\"float32\")
403 character_sizes = np.array(
--> 404 [font.font.getsize(character) for character, font in character_font_pairs]
405 )
406 min_character_size = character_sizes.sum(axis=1).min()
407 transformed_contour = compute_transformed_contour(
408 width=width,
409 height=height,
(...)
412 contour=permitted_contour,
413 )
File ~/UTN/character_clasification_and_detection/vevn/lib/python3.8/site-packages/keras_ocr/data_generation.py:404, in (.0)
399 if permitted_contour is None:
400 permitted_contour = np.array(
401 [[0, 0], [width, 0], [width, height], [0, height]]
402 ).astype(\"float32\")
403 character_sizes = np.array(
--> 404 [font.font.getsize(character) for character, font in character_font_pairs]
405 )
406 min_character_size = character_sizes.sum(axis=1).min()
407 transformed_contour = compute_transformed_contour(
408 width=width,
409 height=height,
(...)
412 contour=permitted_contour,
413 )
OSError: stack overflow"
}```
Подробнее здесь: https://stackoverflow.com/questions/791 ... fficiently
Как эффективно зациклить генератор? ⇐ Python
Программы на Python
1731424396
Anonymous
Я пытаюсь создать набор данных для задачи OCR, следуя этому руководству.
Я пытаюсь пройти через генератор и сохранить полученные изображения и ограничивающие рамки для создания набора данных. >
Кажется, я неправильно понимаю, как работают генераторы. Разве весь смысл генераторов не в том, чтобы не размещать в памяти весь массив одновременно? Я думал, что только одна пара изображений и строк будет храниться в ОЗУ для каждой итерации, но кажется, что каждый полученный кортеж сохраняется в ОЗУ до тех пор, пока у меня не закончится память.
Как я могу это сделать? что я пытаюсь сделать?
columns = ['character', 'x1', 'y1', 'x2', 'y2', 'x3', 'y3', 'x4', 'y4']
i = 0
for image, lines in image_generators[0]:
lines = list(itertools.chain(*lines))
rows = []
for coord_array, char in lines:
# Flatten the array and convert to a list
coordinates = coord_array.flatten().tolist()
# Append character and coordinates to rows
rows.append([char] + coordinates)
Image.fromarray(image).save(f"../data/generated_images/train/images/image_{i}.png")
df = pd.DataFrame(rows, columns=columns)
df.to_csv(f"../data/generated_images/val/boxes/boxes_{i}.csv")
i += 1
Когда я выполняю это, я получаю следующую ошибку:
{
"name": "OSError",
"message": "stack overflow",
"stack": "---------------------------------------------------------------------------
OSError Traceback (most recent call last)
Cell In[174], line 3
1 columns = ['character', 'x1', 'y1', 'x2', 'y2', 'x3', 'y3', 'x4', 'y4']
2 i = 0
----> 3 for image, lines in image_generators[1]:
4 try:
5 lines = list(itertools.chain(*lines))
File ~/UTN/character_clasification_and_detection/vevn/lib/python3.8/site-packages/keras_ocr/data_generation.py:700, in get_image_generator(height, width, font_groups, text_generator, font_size, backgrounds, background_crop_mode, rotationX, rotationY, rotationZ, margin, use_ligatures, augmenter, draw_contour, draw_contour_text)
694 random_color_values = np.random.randint(low=0, high=50, size=3)
695 text_color = (
696 tuple(np.array([255, 255, 255]) - random_color_values)
697 if isDark
698 else tuple(random_color_values)
699 )
--> 700 text_image, lines = draw_text_image(
701 text=text,
702 width=width,
703 height=height,
704 fontsize=current_font_size,
705 fonts=current_font_groups,
706 thetaX=current_rotation_X,
707 thetaY=current_rotation_Y,
708 thetaZ=current_rotation_Z,
709 use_ligatures=use_ligatures,
710 permitted_contour=permitted_contour,
711 color=text_color,
712 draw_contour=draw_contour_text,
713 )
714 alpha = text_image[..., -1:].astype(\"float32\") / 255
715 image = (alpha * text_image[..., :3] + (1 - alpha) * current_background).astype(
716 \"uint8\"
717 )
File ~/UTN/character_clasification_and_detection/vevn/lib/python3.8/site-packages/keras_ocr/data_generation.py:404, in draw_text_image(text, fontsize, height, width, fonts, use_ligatures, thetaX, thetaY, thetaZ, color, permitted_contour, draw_contour)
399 if permitted_contour is None:
400 permitted_contour = np.array(
401 [[0, 0], [width, 0], [width, height], [0, height]]
402 ).astype(\"float32\")
403 character_sizes = np.array(
--> 404 [font.font.getsize(character) for character, font in character_font_pairs]
405 )
406 min_character_size = character_sizes.sum(axis=1).min()
407 transformed_contour = compute_transformed_contour(
408 width=width,
409 height=height,
(...)
412 contour=permitted_contour,
413 )
File ~/UTN/character_clasification_and_detection/vevn/lib/python3.8/site-packages/keras_ocr/data_generation.py:404, in (.0)
399 if permitted_contour is None:
400 permitted_contour = np.array(
401 [[0, 0], [width, 0], [width, height], [0, height]]
402 ).astype(\"float32\")
403 character_sizes = np.array(
--> 404 [font.font.getsize(character) for character, font in character_font_pairs]
405 )
406 min_character_size = character_sizes.sum(axis=1).min()
407 transformed_contour = compute_transformed_contour(
408 width=width,
409 height=height,
(...)
412 contour=permitted_contour,
413 )
OSError: stack overflow"
}```
Подробнее здесь: [url]https://stackoverflow.com/questions/79181685/how-to-loop-through-generator-efficiently[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия