|
|
  |
Помогите освоить LUA |
|
|
sutra |
31.12.2018, 4:54
|
      
Adept
Сообщений: 923
Регистрация: 10.8.2018 Группа: Пользователи Наличность: 0
Пользователь №: 19.007

|
Цитата А не было бы галки... Ну думать надо, в общем мысль я уже высказал. Пока у нас нет такого алгоритма, но идея реализации есть. Цитата короче сидел крутил изображение Ну видишь, надо засунуть конкурентов, значит надо по любому расширять функционал. Из расчёта, что юзер думать не должен. С аккуратностью должен будет искать. Всё равно картинка уникальна. Ничто ведь не мешает задать аккуратность скажем 60% . И найдёт ... аналогичных изображений ведь нет. Уверен - НАЙДЁТ. Собственно говоря - аккуратность - это и есть элемент интеллекта.
|
|
|
|
sutra |
31.12.2018, 16:24
|
      
Adept
Сообщений: 923
Регистрация: 10.8.2018 Группа: Пользователи Наличность: 0
Пользователь №: 19.007

|
Новогодний эскиз поиска. Вместо копий просто подготавливаем массив искомых пикселей (анализируя картинку в соответствии с параметрами). Этот кусочек будем крутить во внешнем цикле. Код -- структура массива искомых пикселей arrpix {x,y,r1,r2,g1,g2,b1,b2} -- x,y координаты пикселя в картинке r1,r2 граничные значения поиска канала (считаются учитывая dev) for i=1,#arrpix do -- цикл просмотра значимых пикселей ind=addrGet + ... arrpix[i].y * ... arrpix[i].x ... -- вычисление индекса в памяти blue=rmem("unsigned char*",addrGet)[0] if blue>=arrpix[i].b1 and blue<=arrpix[i].b2 then green=rmem("unsigned char*",addrGet)[1] if green>=arrpix[i].g1 and green<=arrpix[i].g2 then red=rmem("unsigned char*",addrGet)[2] if red<arrpix[i].r1 or red>arrpix[i].r2 then acc=acc+1 end else acc=acc+1 end else acc=acc+1 -- увеличение параметра пропущенных пикселей end if acc > accuracy then return 0 end -- если число пропущенных превышает допустимое end return 1
Так что с поиском всё предельно просто. А вот грамотно подготовить массив для поиска, вот тут полно вариантов. Как сделать красиво и универсально я даже не знаю.
|
|
|
|
sutra |
31.12.2018, 17:14
|
      
Adept
Сообщений: 923
Регистрация: 10.8.2018 Группа: Пользователи Наличность: 0
Пользователь №: 19.007

|
Короче, надо тщательно готовить картинку. Убирать из неё всё не нужное. Или как вариант задавать не прямоугольную, а чётко описанную область картинки цвета которой попадут в массив искомых пикселей. На примере монеток. Убирать все пиксели вокруг окантовки монеток, иначе эти пиксели всё испортят. В общем тут полно вариантов, начиная от грамотного определения области для картинки и заканчивая её ручным редактированием, либо прямо задавать массив x,y пиксели которых лягут в искомый массив.
Ладно, пора закругляться. Идея ясна, сделать можно, но уж точно не сегодня.
|
|
|
|
sutra |
10.1.2019, 3:57
|
      
Adept
Сообщений: 923
Регистрация: 10.8.2018 Группа: Пользователи Наличность: 0
Пользователь №: 19.007

|
Дарк, продолжая тему про поиск в разных окнах, не засоряя темы других пользователей, перешёл в свою. Используя твой опыт по обработке памяти, переделал весь свой код, даже в мелочах, результаты просто супер. Раньше перезагруз браузера, анализ начальных условий, выполнялся до 10 секунд. Сейчас на порядок всё быстрее, как говорил, даже клики мышкой теперь используют анализ изображений в памяти. Вот ЧИСТО ДЛЯ ПРИМЕРА маленький кусочек кода... Код local WrM=1 -- Объявление и инициализация параметра № рабочего монитора if x>1900 then WrM=2 end -- Если начальная абсцисса окна браузера соответствует отображению на 2-ом мониторе local mic=findwindow("Микшер") -- Поиск хендла окна Микшера громкости if mic==nil then -- Если окно Микшера громкости не найдено f.LeftWait(1810,1060,1830,1025,1840,1030,0) -- Клик на пиктограмму динамика в системном трее (анализ появления изображения шкалы громкости) f.LeftWait(1810,1005,1830,1025,1840,1030,0) -- Клик на надпись "микшер", для вывода на экран окна Микшера громкости (анализ исчезновения изображения шкалы громкости) mic=findwindow("Микшер") -- Поиск хендла окна Микшера громкости windowpos(100,100,800,0,mic[1][1]) -- Растягивание окна Микшера громкости, для гарантии отображения всех устройств local x,y=f.FindImage(235,30,800,145,[[СКРИНЫ\_mic.bmp]],mic[1][1],10) -- Поиск нужного устройства звука в окне Микшера громкости, для определения его позиционирования (погрешность 10) if x~=-1 then -- На всякий случай, во избежание ошибки скрипта windowpos(WrM*1920-292-math.modf((x-245)/110)*110,810,800,0,mic[1][1]) -- Позиционирование окна микшера громкости в соответствии с найденной позицией картинки end end
|
|
|
|
|
  |
7 чел. читают эту тему (гостей: 7, скрытых пользователей: 0)
Пользователей: 0
|
|