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

В этой статье мы создадим и обучим собственную нейросеть с помощью Google Teachable Machine и разработаем API для автоматического решения капчи Amazon.

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

Будем решать нашу задачу в несколько этапов:

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

Давайте предположим, что перед нами стоит задача: получить данные об 1 млн товаров размещенных на Амазон.

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

Можно воспользоваться веб-скрейпингом. И вот тут мы столкнемся с капчей Amazon:

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

Давайте посмотрим какие есть готовые решения для решения капчи:

  • Плагин к Puppeteer: из 20 попыток распознал 1 капчу.
  • Модуль распознавания текста Tesseract - не распознает искаженный текст.
  • Платные решения предлагают оплату за каждую капчу и имеют низкую скорость решения: 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 по буквам:

Подготавливаем весь алфавит: A, B, C ... Z
Подготавливаем весь алфавит: 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); } }
И так для каждой буквы от A до Z
И так для каждой буквы от A до Z

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

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

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

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

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

Проверяем, как хорошо наша нейронная модель обучилась:

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

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

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

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

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

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

import cv2 def 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')

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

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

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

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

import tensorflow as tf import numpy as np def 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

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

const axios = require('axios'); const token = 'vcru'; const url = 'https://images-na.ssl-images-amazon.com/captcha/bfhuzdtn/Captcha_atrwlmfpxp.jpg'; const apiUrl = `https://apicase.ru/amazon/resolve/captcha/?token=${token}&url=${url}`; axios.get(apiUrl) .then(function (response) { console.log(response.data); })

А можно выполнить запрос к API в браузере по этой ссылке.

Вопросы, предложения, контакты

Если вам нужна помощь в создании собственной нейронной сети, автоматизации бизнес процессов и по любым другим вопросам, можете написать мне в телеграм или в личку на vc.ru

Также принимаю предложения о сотрудничестве и работе.

29
3 комментария

ну вот уже капчу проходим что дальше, надеюсь он не будет заказывать ее на какой то бирже))

1
Ответить

Yes

1
Ответить

👁️‍🗨️ Благодарю вас за эту статью, посвященную обучению нейросетей в Amazon и автоматическому прохождению капчи. Спасибо руководству.💕💕💕💕💕💕💕💕

Ответить