Модераторы: Snowy, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разрабатываю эмулятор действий пользователя, Эмулятор управляется скриптами 
:(
    Опции темы
oleg1dorozhko
Дата 19.7.2014, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 19.7.2014

Репутация: нет
Всего: нет



Ищу java программистов, которых заинтересует дальнейшее развитие эмулятора.
Основная задача - сделать надежное сравнение картинок-сканов.

Эмулятор управляется скриптами. Вот пример скрипта: 

Код

//ключевое слово
AND

//сворачиваем окна
hit key:WIN+M

//делаем паузу
pause ms:500

//запускаем Блокнот
hit key:WIN+R

pause ms:500 

//очищаем текстовое поле
clear

pause ms:500 

//пишем в текстовом поле
type text notepad

//жмем Enter
hit key:ENTER

//ждем запуска Блокнота
pause ms:2000

//приветствуем мир
type text Привет, мир!


Каждая команда скрипта возвращает логическое значение TRUE или FALSE
Следующая строка скрипта выполняется если предыдущая вернула TRUE

Вот здесь можно почитать подробно и скачать эмулятор с примером


Ссылка не опасная, просто выбрал бесплатный хостинг для сайта пока.

Есть еще исходники - проекты eclipse

Вот кто бы написал надежный класс распознавания скана? 
Алгоритм у find такой: 
Делается принтскрин всего экрана или определенного участка его 
Подгружается образец от пользователя - я называю его картинка-контекст 
Производится сравнение то бишь поиск 
Если найден возвращается true 
если не найден false 
еще можно подумать что делать с частичным соответствием образца скану
Сейчас распознавание (сделанное мной) не кажется мне надежным


PM MAIL   Вверх
oleg1dorozhko
Дата 19.7.2014, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 19.7.2014

Репутация: нет
Всего: нет



Код

package comparator;

import java.awt.image.BufferedImage;
import java.io.File;

import javax.imageio.ImageIO;

public class RGBComparator 
{

    /**
     * @param args
     */
    public static void main(String[] args) 
    {
        
        try
        {
        
            log("Start");
            long time1 = System.currentTimeMillis();
            
            BufferedImage img1 = ImageIO.read(new File("res/guild.png"));
            
            BufferedImage img2 = ImageIO.read(new File("res/scan1.png"));
            
            int[][][] rgb = new int[256][256][256];
            
            int w1 = img1.getWidth();
            int h1 = img1.getHeight();
            
            for(int i=0;i<w1; i++)
            {
                for(int j=0; j<h1; j++)
                {
                    int[] rgb1 = img1.getRaster().getPixel(i, j, new int[3]);
                    
                    rgb[rgb1[0]][rgb1[1]][rgb1[2]] ++;
                    
                    
                }
            }
            
            
            
            
            
            int w2 = img2.getWidth();
            int h2 = img2.getHeight();
            
            for(int x=0; x<(w2-w1)+1;x++)
            {
                for(int y=0;y<(h2-h1)+1;y++)
                {
                    
                    //log("...");
                    
                    int errors = 0;
                    
                    int[][][] c_rgb = copyRGB(rgb);
                    
                    for(int i=0;i<w1; i++)
                    {
                        for(int j=0; j<h1; j++)
                        {
                            
                                int[] rgb2 = img2.getRaster().getPixel((x+i), (y+j), new int[3]);
                                
                                int v = c_rgb[rgb2[0]][rgb2[1]][rgb2[2]];
                                
                                if( v == 0) { errors++; continue; }
                                
                                c_rgb[rgb2[0]][rgb2[1]][rgb2[2]] --;
                        
                        }
                    }
                    
                    int zcounter=0;
                    int pcounter=0;
                    int mcounter=0;
                    
                    for(int r=0;r<256;r++)
                    {
                        for(int g=0;g<256;g++)
                        {
                            for(int b=0;b<256;b++)
                            {
                                if(c_rgb[r][g][b]>0) pcounter++;
                                else if(c_rgb[r][g][b]<0) mcounter++;
                                else zcounter++;
                            }
                        }
                    }
                    
                    
                    
                    if(pcounter < 10 && mcounter < 10)
                    {
                        log("For ["+x+","+y+"]");
                        log("errors= "+errors);
                        log("pcounter= "+pcounter);
                        log("zcounter= "+zcounter);
                        log("mcounter= "+mcounter);
                        
                    }
                    
                    
                    
                }
            }
            
            long time2 = System.currentTimeMillis();
            log("Finish");
            log("ET(ms)= "+(time2-time1));
        
        
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }

    }

    private static int[][][] copyRGB(int[][][] rgb) 
    {
        int[][][] res = new int[256][256][256];
    
        for(int r=0;r<256;r++)
        {
            for(int g=0;g<256;g++)
            {
                for(int b=0;b<256;b++)
                {
                    res[r][g][b] = rgb[r][g][b];
                }
            }
        }
        
        return res;
    }

    private static void log(String s) 
    {
        System.out.println(s);
        
    }

}


Вот результат. Но работает очень медленно. Что тут можно оптимизировать для ускорения работы?
PM MAIL   Вверх
SVN74
Дата 20.7.2014, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 5.5.2008
Где: Комсомольск на Дн епре

Репутация: нет
Всего: 18



Цитата(oleg1dorozhko @  19.7.2014,  23:58 Найти цитируемый пост)
 private static int[][][] copyRGB(int[][][] rgb) 
    {
        int[][][] res = new int[256][256][256];
    
        for(int r=0;r<256;r++)
        {
            for(int g=0;g<256;g++)
            {
                for(int b=0;b<256;b++)
                {
                    res[r][g][b] = rgb[r][g][b];
                }
            }
        }
        
        return res;
    }

может сразу скопируете все одним блоком...

Добавлено @ 11:20
Цитата(oleg1dorozhko @  19.7.2014,  23:58 Найти цитируемый пост)
Вот результат. Но работает очень медленно. Что тут можно оптимизировать для ускорения работы? 

Избавляйтесь от циклов, - очень много вложенных циклов...

Это сообщение отредактировал(а) SVN74 - 21.7.2014, 21:59
PM MAIL WWW   Вверх
SVN74
Дата 20.7.2014, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 5.5.2008
Где: Комсомольск на Дн епре

Репутация: нет
Всего: 18



Цитата(oleg1dorozhko @  19.7.2014,  18:27 Найти цитируемый пост)
Вот здесь можно почитать подробно и скачать эмулятор с примером

Хм. Так это Вы просто создаете свой язык программирования -интерпретатор.
Не знаю, если в этом смысл? 

Это сообщение отредактировал(а) SVN74 - 20.7.2014, 11:43
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Совместные проекты/поиск партнёров"
Snowy
Poseidon

Внимание:
В этом форуме обсуждаются вопросы только по совместным проектам, когда Вы хотите найти партнёров или стать участником проекта.
Запрещается размещение заказов на написание программ, поиск работников (для этого есть раздел "Работа") и реклама своих сетевых ресурсов.

Этот раздел только для проектов в которых Вы будете выступать в качестве исполнителя!

Темы и сообщения, не удовлетворяющие данным правилам, будут удаляться на основании пункта 3 Правил форума!

  • Человек, создающий тему, становится руководителем проекта. Все вопросы о разработке решаются с его согласия.
  • Публикация предложения к сотрудничеству считается защищённым авторскими правами и не может разрабатываться без согласия с руководителем проекта.
  • Конечный продукт должен содержать указание на всех участников и Vingrad.

  • Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, Poseidon

     
    1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
    0 Пользователей:
    « Предыдущая тема | Совместные проекты/поиск партнёров | Следующая тема »


     




    [ Время генерации скрипта: 0.1033 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


    Реклама на сайте     Информационное спонсорство

     
    По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
    Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.