Используйте даркнет, чтобы определить подробный процесс нажатия кода подтверждения (с исходным кодом).

Python

Исходный код проекта:GitHub.com/Ник Ли Цянь/…

darknet_captcha

В рамках проекта была разработана серия сценариев быстрого запуска на основе даркнета, которые предназначены для того, чтобы позволить новичкам или разработчикам распознавания изображений быстро начать проект обнаружения (локации) целей. Если есть что-то непонятное, отправьте вопрос и PR, и надеемся исправить его вместе со всеми!

Этот проект разделен на две части:

  1. Обеспечивает обнаружение двух объектов (Коды подтверждения перехода по клику для одной и нескольких категорий) можно ознакомиться с использованием сети позиционирования yolo3 на примере
  2. Предоставляет серию API на основе даркнета для использованиясобственные данныеОбучите модель обнаружения цели и предоставьте код веб-сервера
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

содержание

Структура проекта

Проект разделен наdarknet、extent、appтри части

  1. даркнет: эта частьdarknetИсходный код проекта не изменился.
  2. объем: расширенная часть, в том числеконфигурация сборки,Создание образцов,тренироваться,Определить демо,программа API.
  3. приложение: Каждое новое требование идентификации отличается приложением, которое включает в себя файлы конфигурации, образцы и файлы этикеток и т. д.

Запустить пример: обнаружение объектов одного типа

В качестве примера возьмем код подтверждения клика.даркнет на самом деле предоставляет нам ряд алгоритмов глубокого обучения, все, что нам нужно сделать, это использовать относительно простые шаги, чтобы вызвать даркнет для обучения нашей модели распознавания.

  • Рекомендуемая операционная системаubuntu, встречающихся ямок будет намного меньше.
  • Если вы используете систему Windows, вам необходимо сначала установить ееcygwin, легко скомпилировать даркнет. (См. мой блог:установить Cygwin)

Пройдены следующие шагиubuntu16.04контрольная работа.

1. Скачать проект

git clone https://github.com/nickliqian/darknet_captcha.git

2. Скомпилируйте даркнет

Входитьdarknet_captchaкаталог, скачатьdarknetпроект, покрытиеdarknetсодержание:

cd darknet_captcha
git clone https://github.com/pjreddie/darknet.git

Входитьdarknetкаталог, изменитьdarknet/Makefileконфигурационный файл

cd darknet
vim Makefile
  • Если используется обучение GPU, то следующий GPU=1
  • Используйте обучение ЦП, затем следующий GPU = 0
GPU=1
CUDNN=0
OPENCV=0
OPENMP=0
DEBUG=0

затем используйтеmakeкомпилироватьdarknet:

make

Не рекомендуется использовать ЦП для обучения, поскольку использование ЦП для обучения и прогнозирования занимает много времени.
Если вам нужно арендовать временный и недорогой хост GPU для тестирования, вот некоторые рекомендуемые облачные сервисы GPU.
Если в процессе компиляции возникает ошибка, вы можете найти решение в вопросе о даркнете или можете отправить мне электронное письмо, чтобы попросить у меня старую версию даркнета.

3. Установите среду python3

Используйте pip для выполнения следующего оператора и убедитесь, что tk установлен в вашей системе:

pip install -r requirement.txt
sudo apt-get install python3-tk

4. Создайте приложение

Перейдите в корневой каталог и запустите следующую программу, чтобы сгенерировать базовую конфигурацию приложения:

cd darknet_captcha
python3 extend/create_app_config.py my_captcha 1

Категории здесь генерируются по умолчаниюclasses_1, вы можете изменить название категории;
Открытымapp/my_captcha/my_captcha.namesИсправлятьclasses_1Просто дайте хосту имя, которое вы хотите.

Как просмотретьcreate_app_config.pyобъяснение аргументов командной строки?
бежать напрямуюpython create_app_config.pyЕго можно посмотреть в консоли, как и программу ниже.

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

5. Генерация образцов

Создайте образец, используя другой проектnickliqian/generate_click_captcha
Здесь я интегрировал его, выполните следующую команду для создания образцов и соответствующих меток для указанного приложения.yoloУказанный каталог:

python3 extend/generate_click_captcha.py my_captcha

бегатьpython generate_click_captcha.pyСм. объяснение параметра.

6. Разделите набор для обучения и набор для проверки

Запустите программу ниже, чтобы разделить обучающие и проверочные наборы при преобразовании значений меток вyoloРаспознанный формат:

python3 extend/output_label.py my_captcha 1

Заполненный здесь тип должен быть таким же, как указано выше. бегатьpython output_label.pyСм. объяснение параметра.

7. Начать обучение

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

wget https://pjreddie.com/media/files/darknet53.conv.74

существуетdarknet_captchaкаталог, выполните следующую команду, чтобы начать обучение:

./darknet/darknet detector train app/my_captcha/my_captcha.data app/my_captcha/my_captcha_train.yolov3.cfg darknet53.conv.74

В процессе обучения модель будет сохраняться каждые сто итераций вapp/my_captcha/backup/ниже вы можете просмотреть его.

8. Определите эффект

использоватьGTX 1060Обучение занимает около 1,5 часов, а итерация обучения достигает 1000 раз, что даст более очевидный эффект.

在这里插入图片描述
Мы находим изображение проверочного набора и используем модель с разным прогрессом для тестирования распознавания и выполняем следующий оператор, чтобы начать распознавание:

python3 extend/rec.py my_captcha 100

100 вот выборapp/my_captcha/images_data/JPEGImagesИдентифицировано 100-е изображение в каталоге.
бегатьpython rec.pyСм. объяснение параметра.

Повторить 300 раз:

在这里插入图片描述
Повторить 800 раз:
在这里插入图片描述
Повторить 1000 раз:
在这里插入图片描述
Повторить 1200 раз:
在这里插入图片描述

9. Резка картинок

Эта часть относительно проста, в интернете есть много кодов с примерами, вы можете позвонитьdarknet_interface.cut_and_saveМетод вырезает позиционированные символы.

在这里插入图片描述

10. Классификатор

Легче перейти к этапу классификации.Вы можете использовать классификатор, который поставляется с даркнетом, или вы можете использоватьcnn_captchaПроект, использующий сверточные нейронные сети для определения капчи.

11. Резюме

Общий процесс для нас, чтобы идентифицировать код подтверждения клика, выглядит следующим образом:

  1. собирать образцы
  2. Маркировка (обозначение координат и символов)
  3. локатор поездов
  4. Определить положение, вырезать изображение
  5. обучить классификатор
  6. Используйте локатор + классификатор, чтобы определить положение и категорию символов символов в коде подтверждения перехода по клику.

Второй пример: обнаружение объектов нескольких типов

Шаги в основном такие же, как и выше, и команды перечислены напрямую:

# 生成配置文件
python3 extend/create_app_config.py dummy_captcha 2
# 生成图片
python3 extend/generate_click_captcha.py dummy_captcha 500 True
# 输出标签到txt
python3 extend/output_label.py dummy_captcha 2
# 开始训练w
./darknet/darknet detector train app/dummy_captcha/dummy_captcha.data app/dummy_captcha/dummy_captcha_train.yolov3.cfg darknet53.conv.74
# 识别测试
python3 extend/rec.py dummy_captcha 100

тренируйте свои собственные данные

Следующая процедура научит вас обучать собственные данные.
Предположим, мы хотим создать приложение, которое распознает машины и людей на дороге, поэтому количество классов равно 2.
Допустим, у вас теперь есть несколько оригинальных картинок, сначала вам нужно пометить эти картинки, рекомендуется использоватьlabelImgВыполнение работ по разметке.
Вы можете использовать учебник для Google самостоятельно Интерфейс программы примерно следующий:

在这里插入图片描述

Пометьте человека и автомобиль на картинке соответственно, и будет создан файл тега xml.
Далее создаем приложение, имя приложенияcar, категория2class при создании некоторых файлов конфигурации:

python3 extend/create_app_config.py car 2

Затем поместите исходное изображение по указанному путиapp/car/JPEGImages, поместите файл тега xml вapp/car/Annotations
Когда yolo тренируется, требуются относительные координаты цели на картинке, поэтому координаты xml здесь должны быть рассчитаны как относительные координаты.
В то же время образцы путей обучающего набора и проверочного набора должны быть определены отдельно в car.data, Здесь обучающий набор и проверочный набор будут разделены, и будут созданы два текстовых файла для записи их путей. .

python3 extend/output_label.py car 2

Следует отметить, что вы можете открыть car.names здесь, и изменить в нем class_1 и class_2 на автомобиль и человека соответственно, и результатом распознавания здесь будет вывод автомобиля и человека. После этого вы можете приступить к обучению:

./darknet/darknet detector train app/car/car.data app/car/car_train.yolov3.cfg darknet53.conv.74

Нет никакой разницы между идентификационным тестом и вышеуказанным:

# 识别测试
python3 extend/rec.py car 100

веб-сервис

Запустите веб-сервис:

python3 extend/web_server.py

Перед запуском необходимо изменить параметры конфигурации по мере необходимости:

# 生成识别对象,需要配置参数
app_name = "car"  # 应用名称
config_file = "app/{}/{}_train.yolov3.cfg".format(app_name, app_name)  # 配置文件路径
model_file = "app/{}/backup/{}_train.backup".format(app_name, app_name)  # 模型路径
data_config_file = "app/{}/{}.data".format(app_name, app_name)  # 数据配置文件路径
dr = DarknetRecognize(
    config_file=config_file,
    model_file=model_file,
    data_config_file=data_config_file
)
save_path = "api_images"  # 保存图片的路径

Используйте скрипт нижеrequest_api.pyВыполните идентификационный тест веб-службы (обратите внимание на изменение пути к изображению):

python3 extend/request_api.py

Вернуть ответ, который содержит целевой класс и местоположение центральной точки:

接口响应: {
  "speed_time(ms)": 16469, 
  "time": "15472704635706885", 
  "value": [
    [
      "word", 
      0.9995613694190979, 
      [
        214.47508239746094, 
        105.97418212890625, 
        24.86412811279297, 
        33.40662384033203
      ]
    ],
    ...
}

Документация API

Нет

другие проблемы

Используйте Alibaba Cloud OSS для ускорения загрузки

Если вы используете чужой облачный хост для обучения, скорость загрузки обученной модели действительно является проблемой.
Рекомендуется использовать Alibaba Cloud OSS, загрузить файл на облачный хост, а затем использовать OSS для его загрузки.
Ключ конфигурации:

# 从环境变量获取密钥
AccessKeyId = os.getenv("AccessKeyId")
AccessKeySecret = os.getenv("AccessKeySecret")
BucketName = os.getenv("BucketName")

загрузить изображение:

python3 extend/upload2oss.py app/my_captcha/images_data/JPEGImages/1_15463317590530567.jpg
python3 extend/upload2oss.py text.jpg

Рекомендации по облачным графическим процессорам

Используйте арендованный облачный хост vectordash GPU, ssh-подключение к системе ubuntu16.04, интегрированной со средой глубокого обучения Nvidia.
Содержит следующие инструменты или платформы:

CUDA 9.0, cuDNN, Tensorflow, PyTorch, Caffe, Keras

vectordash предоставляет клиенту удаленные подключения, загрузку и скачивание файлов, управление несколькими облачными хостами и многое другое.
Вот цены на аренду нескольких видеокарт:

在这里插入图片描述
После создания экземпляра панель предоставит секретный ключ, после ввода секретного ключа вы можете использовать клиент для работы:

# 安装客户端
pip install vectordash --upgrade
# 登录
vectordash login
# 列出主机
vectordash list
# ssh登录
vectordash ssh <instance_id>
# 打开jupyter
vectordash jupyter <instance_id>
# 上传文件
vectordash push <instance_id> <from_path> <to_path>
# 下载文件
vectordash pull <instance_id> <from_path> <to_path>

Поскольку хост vectordash находится за границей, загрузка и выгрузка происходят очень медленно, поэтому рекомендуется временно арендовать экземпляр Alibaba Cloud Bidding Burst (около 7 центов в час) для транзитного использования.

Сравнение скорости распознавания CPU и GPU

GTX 1060, распознавание занимает 1 с

[load model] speed time: 4.691879987716675s
[detect image - i] speed time: 1.002530813217163s

ЦП, распознавание занимает 13 с

[load model] speed time: 3.313053846359253s
[detect image - i] speed time: 13.256595849990845s

Решение ошибки

  1. UnicodeEncodeError: 'ascii' codec can't encode character '\U0001f621' in posit
    Ссылка на ссылку
  2. pip install, locale.Error: unsupported locale setting
    Ссылка на ссылку

TODO

  1. Поддержка распознавания и обучения многоклассовому обнаружениюDone
  2. Вызов API веб-сервераDone
  3. Классификатор