В этой статье мы создадим и обучим собственную нейросеть с помощью
Создать нейросеть и решить капчу Amazon.
Будем решать нашу задачу в несколько этапов:
Чтобы получить доступ к официальному
Можно воспользоваться
Вот так выглядит капча Amazon
Давайте посмотрим какие есть готовые решения для решения капчи:
Скачаем несколько оригинальных капч Амазон. Мы будем их использоваться для создания обучающих данных и для тестирования нашей нейросети. Напишем скрипт на JavaScript для NodeJS:
Разберем капчи Amzon по буквам:
Подготавливаем весь алфавит: A, B, C ... Z
Также сгенерируем все английские буквы с разным наклоном самостоятельно:
И так для каждой буквы от A до Z
Тем больше входящих данных подготовим, чем точнее сможем обучить нашу нейронную сеть.
Обучение нейронное сети в Teachable Machine
Далее жмём кнопку "Обучить модель" и ждем завершения процесса обучения.
Проверяем, как хорошо наша нейронная модель обучилась:
Скачиваем обученную модель нейросети через "Экспорт модели":
Сохраняем свою модель в файл
Итак, мы создали, обучили и проверили работу нашей нейронной сети. Она со 100% точностью распознает все буквы из Амазон капчи. Переходим к следующему этапу.
В результате мы нашли все контуры букв на изображении:
Найденные буквы на изображении выделены зелёной рамкой.
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
Для просмотра ссылки необходимо нажать
Вход или Регистрация
и разработаем
Для просмотра ссылки необходимо нажать
Вход или Регистрация
для автоматического решения капчи Amazon.Создать нейросеть и решить капчу Amazon.
Будем решать нашу задачу в несколько этапов:
- Постановка задачи и анализ входных данных
- Подготовка данных для обучения нейронной сети
- Обучение нейронной сети в Teachable Machine
- Находим контуры на изображении с помощью OpenCV
- Распознаем текст с помощью Tensoflow
- API для распознавания капчи Amazon
- Вопросы, предложения, контакты
Постановка задачи и анализ входных данных
Давайте предположим, что перед нами стоит задача: получить данные об 1 млн товаров размещенных на Амазон.Чтобы получить доступ к официальному
Для просмотра ссылки необходимо нажать
Вход или Регистрация
потребуется зарегистрироваться в их
Для просмотра ссылки необходимо нажать
Вход или Регистрация
, совершить в течении 180 дней 3 продажи и получить одобрение от модераторов Амазон.Можно воспользоваться
Для просмотра ссылки необходимо нажать
Вход или Регистрация
. И вот тут мы столкнемся с
Для просмотра ссылки необходимо нажать
Вход или Регистрация
:Вот так выглядит капча Amazon
Давайте посмотрим какие есть готовые решения для решения капчи:
-
Для просмотра ссылки необходимо нажать Вход или Регистрацияк Puppeteer: из 20 попыток распознал 1 капчу.
- Модуль распознавания текста
Для просмотра ссылки необходимо нажать Вход или Регистрация- не распознает искаженный текст.
- Платные решения предлагают оплату за каждую капчу и имеют низкую скорость решения: 5-25 секунд.
Подготовка данных для обучения нейронной сети
Капча Амазон состоит из английских букв, наклон букв произвольный. Задача распознавания капчи сводится к тому, чтобы обучить нашу нейронную сеть распознавать весь английский алфавит состоящий из букв с разным наклоном и искажением.Скачаем несколько оригинальных капч Амазон. Мы будем их использоваться для создания обучающих данных и для тестирования нашей нейросети. Напишем скрипт на 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
Также сгенерируем все английские буквы с разным наклоном самостоятельно:
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
Тем больше входящих данных подготовим, чем точнее сможем обучить нашу нейронную сеть.
Обучение нейронной сети в Teachable Machine
Загружаем подготовленные данные для обучения в
Для просмотра ссылки необходимо нажать
Вход или Регистрация
Обучение нейронное сети в Teachable Machine
Далее жмём кнопку "Обучить модель" и ждем завершения процесса обучения.
Проверяем, как хорошо наша нейронная модель обучилась:
Скачиваем обученную модель нейросети через "Экспорт модели":
Сохраняем свою модель в файл
Итак, мы создали, обучили и проверили работу нашей нейронной сети. Она со 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')
В результате мы нашли все контуры букв на изображении:
Найденные буквы на изображении выделены зелёной рамкой.
Распознаем текст с помощью 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 в браузереДля просмотра ссылки необходимо нажать Вход или Регистрация.
Для просмотра ссылки необходимо нажать
Вход или Регистрация