Я сделал скриншот рынка. Полагаю, это действие доступно всем. Все могут сделать скриншот и все могут прочитать, что на нём написано.
А потом меня затянуло в многочисленные "А что, если?.."
Начнём с простого. Есть скриншот окна рынка, но совершенно неясно, как суммировать товары для оценки объёмов и вычитать разницу между двумя состояниями рынка. В текущем интерфейсе рынка инструментов для определения объёмов движения товаров попросту нет.
Можно ли легко определить букву? Я набросал простенький Proof of Concept на питоне и обнаружил, что поиск шаблонов легчайше определяет буквы с высокой точностью. Я потратил несколько часов на составление алфавита, в результате получил определение следующих букв и не только:
Всего я сделал примерно три тысячи таких скриншотов на три сервера на первую эпоху (в рамках плюс минус часа). Кликать - довольно утомительное занятие, но я превозмог.
Это дало, в частности, большой алфавит для распознавания, в том числе специальных значков для карт в шмотки и пустых слотов в них же.
Были проблемы с символами, которые входят в состав других символов, я решил эту проблему механизмом конкуренции глифов между собой (при пересечении кандидатов в глифы самый массивный пожирает все остальные).
Сами по себе координаты символов на экране - довольно неинформативная штука, поэтому сначала я их сегментировал, потом поделил на линии, отсортировал по координате X и перевёл это в слова.
Ура, теперь есть текст:
По идее, всё это можно сделать гораздо проще на Тессеракте, но я скачал полгига библиотек для обучения, прикинул сколько времени и мощностей займёт разметка и обучение - и решил сделать тупо через pattern search, который очень кстати нашёлся в OpenCV.
Разумеется, были ошибки распознавания. Числа в графе стоимости распознаются практически идеально. Числа в графе количества часто зашумляются иконкой предмета у них в подложке. В результате я стал резать картинку на две части и искать в первой графе только числа с большим допуском, после этого результат на тестовых картинках меня устроил. На всякий случай я сохранил около 60 тестов, которые прогонял после каждого обновления алгоритма распознавания.
Я составил базу предметов на основе неоценимого источника данных RoyalQuest.info. Честь и халва составителям!
Я нашёл мелкие различия в нейминге предметов (регистр букв, ё/ё, отсутствие пары очень редких предметов и прочая шелуха), но решил это ручным дополнением локальной базы айтемов и проверкой расстояния Левенштейна между названием предмета в базе и тем, что дало распознание моим парсером.
В сумме это даёт что?
Исторические данные о рынке, что тогда-то такая-то штука стоила столько-то.
Если сделать два слепка рынка в разное время с разницей в несколько часов, то можно строить гипотезы о том, какие товары продались у каких вендоров.
Я потратил некоторое время на парсинг скриншотов и сохранение данных, во время которого мой комп подозрительно гудел.
В результате из гигабайта скриншотов я получил дистиллят: базу данных sqlite3 на несколько мегабайт, внутри которой можно выполнять SQL-запросы, что уже существенно расширяет манёвр, чем окно рынка. Можно к примеру посмотреть, во сколько игроки оценивают рынок. Или сколько товара выложено на некоторых ашкалотах.
(расшифровка моих id серверов: 1 - Энигма, 3 - Гранас)
Как несложно видеть из иллюстрации выше, игроки на Энигме предложили в эпоху-1 (время первого замера) товаров на почти 136 миллиардов золота. Для сравнения, карта Деструктора предлагалась одним из игроков за 2 миллиарда (то есть вся Энигма с потрохами стоит 68 карт Деструктора).
Из них почти 49 миллиардов золота торгуется у ашкалотов с именем Еропы (т.е. 37% стоимости рынка Энигмы принадлежит одному игроку).
Я затруднюсь оценивать топ-2, топ-3 вендоров, поскольку я не нашёл такого же простого маркера для поиска групп ашкалотов. Вполне возможно, что где-то в тёмных водах рынка плавает более массивный кит.
Гранас к моему удивлению предлагает всего на 2 миллиарда товарняка больше (его рынок примерно на 1.5% крупнее Энигмы). Из них примерно 44% объёма рынка лежат у ашкалотов Еропы.
Я ошибся с sql-запросом, в действительности Гранас предлагал товаров в сумме на 201 328 108 230 золота (на 47% больше Энигмы), из них 59969798708 лежали у Еропы (30% рынка).
Это многое говорит о нашем обществе.
Сейчас я могу закинуть куда-нибудь на Heroku базу исторических цен на предметы (если меня не сглодает лень или у кого-нибудь не появятся веские аргументы против), но меня сильно смущает, что её стоит иногда обновлять. Полный слепок рынка занимает очень много времени.
Сообщение отредактировал Gessereth, 10 July 2021 - 09:37 AM.