Как обучить нейросеть в Teachable Machine и автоматически пройти капчу Amazon

BOOX

Стаж на ФС с 2012 года
Команда форума
Служба безопасности
Private Club
Регистрация
23/1/18
Сообщения
29.223
Репутация
11.695
Реакции
61.957
RUB
50
В этой статье мы создадим и обучим собственную нейросеть с помощью и разработаем для автоматического решения капчи Amazon.

Создать нейросеть и решить капчу Amazon.

Будем решать нашу задачу в несколько этапов:
  • Постановка задачи и анализ входных данных
  • Подготовка данных для обучения нейронной сети
  • Обучение нейронной сети в Teachable Machine
  • Находим контуры на изображении с помощью OpenCV
  • Распознаем текст с помощью Tensoflow
  • API для распознавания капчи Amazon
  • Вопросы, предложения, контакты

webp

Постановка задачи и анализ входных данных

Давайте предположим, что перед нами стоит задача: получить данные об 1 млн товаров размещенных на Амазон.
Чтобы получить доступ к официальному потребуется зарегистрироваться в их , совершить в течении 180 дней 3 продажи и получить одобрение от модераторов Амазон.

Можно воспользоваться . И вот тут мы столкнемся с :
webp

Вот так выглядит капча Amazon

Давайте посмотрим какие есть готовые решения для решения капчи:
  • к Puppeteer: из 20 попыток распознал 1 капчу.
  • Модуль распознавания текста - не распознает искаженный текст.
  • Платные решения предлагают оплату за каждую капчу и имеют низкую скорость решения: 5-25 секунд.
Итак, будем делать собственное решение. Создадим и обучим нейросеть распознавать капчу Амазон на 100% за 200-500 миллисекунд.

Подготовка данных для обучения нейронной сети

Капча Амазон состоит из английских букв, наклон букв произвольный. Задача распознавания капчи сводится к тому, чтобы обучить нашу нейронную сеть распознавать весь английский алфавит состоящий из букв с разным наклоном и искажением.

Скачаем несколько оригинальных капч Амазон. Мы будем их использоваться для создания обучающих данных и для тестирования нашей нейросети. Напишем скрипт на JavaScript для NodeJS:

async function downloadAmazonCaptcha(count, savePath){ let captcha_url="https://www.amazon.com/errors/validateCaptcha"; if (!fs.existsSync(savePath)) return; let response, $, img_url, i, file_name; for(i=0;i<count;i++){ response = await axios.get(captcha_url); if(!(response.status===200 && def(response.data))) return; $ = cheerio.load(response.data); img_url = $('form img').attr("src"); if(img_url==="") return; response = await axios.get(img_url, { responseType: 'arraybuffer' }); if(!(response.status===200 && def(response.data))) return; file_name=String(i+1).padStart(String(count).length, '0'); fs.writeFileSync(savePath+${file_name}.jpg, response.data); }}

Разберем капчи Amzon по буквам:

webp

Подготавливаем весь алфавит: A, B, C ... Z

Также сгенерируем все английские буквы с разным наклоном самостоятельно:

for (let i = 65; i <= 90; i++) {//A - Z let letter = String.fromCharCode(i); let dirPath = ${outputDir}/${letter}; if (!fs.existsSync(dirPath)) { fs.mkdirSync(dirPath); } for (let j = 0; j < tiltAngles.length; j++) { let canvas = createCanvas(canvasWidth, canvasHeight); let ctx = canvas.getContext('2d'); let tilt = tiltAngles[j]; let stretchX = stretchFactorsX[j]; let stretchY = 1; ctx.translate(canvasWidth / 2, canvasHeight / 2); ctx.rotate(tilt); ctx.scale(stretchX, stretchY); ctx.font = ${fontSize}px ${fontFamily}; ctx.fillStyle = 'black'; ctx.textAlign = 'center'; ctx.textBaseline = 'middle'; ctx.fillText(letter, 0, 0); ctx.restore(); let outputPath = ${outputDir}/${letter}/${fontFamily}+ _${letter}_${j.toString().padStart(2, '0')}.png; let out = fs.createWriteStream(outputPath); let stream = canvas.createPNGStream(); stream.pipe(out); }}

webp

И так для каждой буквы от A до Z

Тем больше входящих данных подготовим, чем точнее сможем обучить нашу нейронную сеть.

Обучение нейронной сети в Teachable Machine

Загружаем подготовленные данные для обучения в

webp

Обучение нейронное сети в Teachable Machine

Далее жмём кнопку "Обучить модель" и ждем завершения процесса обучения.
Проверяем, как хорошо наша нейронная модель обучилась:

webp


Скачиваем обученную модель нейросети через "Экспорт модели":

webp


Сохраняем свою модель в файл

Итак, мы создали, обучили и проверили работу нашей нейронной сети. Она со 100% точностью распознает все буквы из Амазон капчи. Переходим к следующему этапу.

Распознаем объекты на изображении с помощью OpenCV

Прежде чем распознать букву нам нужно научиться находить буквы на самом изображении. В этом нам поможет библиотека . Скрипт разработаем на Python:

import cv2def find_contours(image_path): image = cv2.imread(image_path) gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) _, _image = cv2.threshold(gray_image, 5, 255, cv2.THRESH_BINARY_INV) contours, _ = cv2.findContours(_image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) for contour in contours: x, y, w, h = cv2.boundingRect(contour) cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 1) cv2.imwrite('output.jpg', image)find_contours('input.jpg')

В результате мы нашли все контуры букв на изображении:

webp

Найденные буквы на изображении выделены зелёной рамкой.

Распознаем текст с помощью Tensoflow

После того как все буквы найдены на изображении, можно передать их в нашу нейронную сеть для распознавания. Будем использовать библиотеку :

import tensorflow as tfimport numpy as npdef predict_image(image, model_path, class_names): model = tf.saved_model.load(model_path) prediction = model(image) index = np.argmax(prediction) class_name = class_names[index] letter = class_name[2:].strip() return letter

API для распознавания капчи Amazon

Для примера создал . Распознавание занимает 200-500 миллисекунд точность близка к 100%:

const axios = require('axios');const token = 'vcru';const url = ' apiUrl = https://apicase.ru/amazon/resolve/captcha/?token=${token}&url=${url};axios.get(apiUrl) .then(function (response) { console.log(response.data); })
А можно выполнить запрос к API в браузере .



 
  • Теги
    teachable machine нейросеть пройти капчу amazon
  • Сверху Снизу