Обучение расшифровке captcha

Я создал код для расшифровки капчи на примере этой картинки:

сама капча

Разделил каждую букву и цифру на единицы, создал генератор таких капч, создал больше 30 тысяч изображений в разных вариациях. Начал обучать нейронку для распознавания каждого символа, на что начал получать ошибку по изображениям. Дальше и остановился потому, что перестал понимать, как реализовать обучение и вывод готового результата в текст Использовал библиотеку keras

  1. Деление на буквы и цифры по 1
from tensorflow.keras.models import load_model from tensorflow.keras.preprocessing.image import load_img, img_to_array import numpy as np

def recognize_captcha(model_path, image_path):
    model = load_model(model_path)
    img = load_img(image_path, target_size=(150, 150))
    img_array = img_to_array(img)
    img_array = np.expand_dims(img_array, axis=0) / 255.0

    predictions = model.predict(img_array)
    predicted_class = np.argmax(predictions, axis=1)[0]  # Для демонстрации, используем индекс класса как строку

    class_labels = {i: f'char_{i}' for i in range(36)}  # Подставьте правильные метки классов
    predicted_label = class_labels.get(predicted_class, 'Unknown')

    return predicted_label

if __name__ == "__main__":
    model_path = 'captcha_model.h5'
    test_image_path = '4RCCCK.png'
    result = recognize_captcha(model_path, test_image_path)
    print(f'Recognized captcha: {result}')
  1. сама генерация изображений
from captcha.image import ImageCaptcha
import random
import os

def generate_captchas(output_dir, num_samples):
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)

    image = ImageCaptcha(width=160, height=60)
    characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'

    for i in range(num_samples):
        code = ''.join([random.choice(characters) for _ in range(6)])  # Генерация кода капчи
        image_file = os.path.join(output_dir, f'{code}.png')
        image.generate_image(code).save(image_file)
        print(f'Generated {image_file}')

if __name__ == "__main__":
    output_dir = 'captcha_images'
    num_samples = 1000
    generate_captchas(output_dir, num_samples)
  1. обучалка
⁡⁡import os
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
from tensorflow.keras.optimizers import Adam

def build_model():
    model = Sequential([
        Conv2D(32, (3, 3), activation='relu', input_shape=(150, 150, 3)),
        MaxPooling2D(pool_size=(2, 2)),
        Conv2D(64, (3, 3), activation='relu'),
        MaxPooling2D(pool_size=(2, 2)),
        Conv2D(128, (3, 3), activation='relu'),
        MaxPooling2D(pool_size=(2, 2)),
        Flatten(),
        Dense(128, activation='relu'),
        Dense(36, activation='softmax')  # 36 классов для символов и дефисов
    ])
    model.compile(optimizer=Adam(), loss='categorical_crossentropy', metrics=['accuracy'])
    return model

def train_model(model):
    datagen = ImageDataGenerator(rescale=1./255)
    train_generator = datagen.flow_from_directory(
        'preprocessed_images/parts',
        target_size=(150, 150),
        batch_size=32,
        class_mode='categorical'
    )

    # Выводим информацию для отладки
    print(f'Found {train_generator.samples} samples belonging to {train_generator.num_classes} classes.')

    if train_generator.samples == 0:
        raise ValueError("No images found in the specified directory.")

    model.fit(train_generator, epochs=10)
    model.save('captcha_model.h5')

if __name__ == "__main__":
    model = build_model()
    train_model(model)

Ответы (0 шт):