изменно на процентное соотношение

This commit is contained in:
Vlad 2024-02-01 16:33:49 +06:00
parent b2a8f10092
commit a93054997e

View File

@ -13,21 +13,35 @@ def draw_boxes(image, boxes, texts):
cv2.putText(image, texts[i], (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2) cv2.putText(image, texts[i], (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
def process_image(image_path, coordinates_list): def process_image(image_path, percentage_coordinates_list):
image = cv2.imread(image_path) # Загрузка изображения и изменение размера
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) original_image = cv2.imread(image_path)
resized_image = cv2.resize(original_image, (662, 429))
# Преобразование в оттенки серого
gray = cv2.cvtColor(resized_image, cv2.COLOR_BGR2GRAY)
# Применение OCR # Применение OCR
custom_config = r'--oem 3 --psm 6 -l kir+eng+rus' custom_config = r'--oem 3 --psm 6 -l kir+eng+rus'
text = pytesseract.image_to_string(gray, config=custom_config) text = pytesseract.image_to_string(gray, config=custom_config)
# Получение координат и размеров квадратов # Получение размеров изображения
h, w, _ = image.shape h, w, _ = resized_image.shape
boxes = [(int(x), int(h - y_h), int(x_w - x), int(h - y)) for x, y, x_w, y_h in coordinates_list]
# Преобразование процентных координат в абсолютные
coordinates_list = [
(
int(x * w / 100),
int(y * h / 100),
int(x_w * w / 100),
int(y_h * h / 100)
)
for x, y, x_w, y_h in percentage_coordinates_list
]
# Фильтрация квадратов по проценту (если нужно) # Фильтрация квадратов по проценту (если нужно)
percentage_threshold = 1 percentage_threshold = 1
filtered_boxes = [box for box in boxes if (box[2] * box[3]) / (w * h) * 100 >= percentage_threshold] filtered_boxes = [box for box in coordinates_list if (box[2] * box[3]) / (w * h) * 100 >= percentage_threshold]
# Извлечение текста из области каждого квадрата # Извлечение текста из области каждого квадрата
texts = [] texts = []
@ -39,10 +53,10 @@ def process_image(image_path, coordinates_list):
print(f"Text inside the box at ({x}, {y}): {cropped_text}") print(f"Text inside the box at ({x}, {y}): {cropped_text}")
# Рисование квадратов и вывод текста # Рисование квадратов и вывод текста
draw_boxes(image, filtered_boxes, texts) draw_boxes(resized_image, filtered_boxes, texts)
# Отображение изображения с квадратами с использованием matplotlib # Отображение изображения с квадратами с использованием matplotlib
plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB)) plt.imshow(cv2.cvtColor(resized_image, cv2.COLOR_BGR2RGB))
plt.title('Image with Boxes and Text') plt.title('Image with Boxes and Text')
plt.show() plt.show()
@ -50,7 +64,8 @@ def process_image(image_path, coordinates_list):
if __name__ == "__main__": if __name__ == "__main__":
image_path = 'img/img.png' image_path = 'img/img.png'
# Задайте координаты для каждого квадрата в формате (x, y, x_w, y_h) # Задайте координаты для каждого квадрата в процентном соотношении (x, y, x_w, y_h)
coordinates_list = [(248, 399, 480, 330), (248, 399, 480, 282), (248, 399, 480, 230), (282, 399, 480, 190), (248, 399, 600, 160), (248, 399, 430, 120), (452, 399, 600, 103), (450, 395, 600, 60)] percentage_coordinates_list = [(38, 23, 30, 11), (38, 35.5, 30, 10.5), (38, 48, 30, 7), (38, 56.4, 30, 5.5),
(38, 65, 45, 5.5), (38, 73, 20, 6), (68, 75.1, 20, 6.3), (68, 87, 20, 6)]
process_image(image_path, coordinates_list) process_image(image_path, percentage_coordinates_list)