KR102297355B1 - 텍스트 검출, 캐럿 추적, 및 활성 엘리먼트 검출 - Google Patents

텍스트 검출, 캐럿 추적, 및 활성 엘리먼트 검출 Download PDF

Info

Publication number
KR102297355B1
KR102297355B1 KR1020207028239A KR20207028239A KR102297355B1 KR 102297355 B1 KR102297355 B1 KR 102297355B1 KR 1020207028239 A KR1020207028239 A KR 1020207028239A KR 20207028239 A KR20207028239 A KR 20207028239A KR 102297355 B1 KR102297355 B1 KR 102297355B1
Authority
KR
South Korea
Prior art keywords
screenshot frame
frame
previous
current
readable medium
Prior art date
Application number
KR1020207028239A
Other languages
English (en)
Inventor
바클라브 스카다
Original Assignee
유아이패스, 인크.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US16/864,629 external-priority patent/US11080548B1/en
Application filed by 유아이패스, 인크. filed Critical 유아이패스, 인크.
Application granted granted Critical
Publication of KR102297355B1 publication Critical patent/KR102297355B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/01Input arrangements or combined input and output arrangements for interaction between user and computer
    • G06F3/02Input arrangements using manually operated switches, e.g. using keyboards or dials
    • G06F3/023Arrangements for converting discrete items of information into a coded form, e.g. arrangements for interpreting keyboard generated codes as alphanumeric codes, operand codes or instruction codes
    • G06F3/0233Character input methods
    • G06F3/0236Character input methods using selection techniques to select from displayed items
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/01Input arrangements or combined input and output arrangements for interaction between user and computer
    • G06F3/048Interaction techniques based on graphical user interfaces [GUI]
    • G06F3/0481Interaction techniques based on graphical user interfaces [GUI] based on specific properties of the displayed interaction object or a metaphor-based environment, e.g. interaction with desktop elements like windows or icons, or assisted by a cursor's changing behaviour or appearance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/01Input arrangements or combined input and output arrangements for interaction between user and computer
    • G06F3/017Gesture based interaction, e.g. based on a set of recognized hand gestures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/01Input arrangements or combined input and output arrangements for interaction between user and computer
    • G06F3/02Input arrangements using manually operated switches, e.g. using keyboards or dials
    • G06F3/023Arrangements for converting discrete items of information into a coded form, e.g. arrangements for interpreting keyboard generated codes as alphanumeric codes, operand codes or instruction codes
    • G06F3/0233Character input methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/01Input arrangements or combined input and output arrangements for interaction between user and computer
    • G06F3/048Interaction techniques based on graphical user interfaces [GUI]
    • G06F3/0481Interaction techniques based on graphical user interfaces [GUI] based on specific properties of the displayed interaction object or a metaphor-based environment, e.g. interaction with desktop elements like windows or icons, or assisted by a cursor's changing behaviour or appearance
    • G06F3/04812Interaction techniques based on cursor appearance or behaviour, e.g. being affected by the presence of displayed objects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/543User-generated data transfer, e.g. clipboards, dynamic data exchange [DDE], object linking and embedding [OLE]
    • G06K9/20
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/10Image acquisition
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/20Image preprocessing
    • G06V10/25Determination of region of interest [ROI] or a volume of interest [VOI]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/40Extraction of image or video features
    • G06V10/44Local feature extraction by analysis of parts of the pattern, e.g. by detecting edges, contours, loops, corners, strokes or intersections; Connectivity analysis, e.g. of connected components
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/70Arrangements for image or video recognition or understanding using pattern recognition or machine learning
    • G06V10/74Image or video pattern matching; Proximity measures in feature spaces
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V20/00Scenes; Scene-specific elements
    • G06V20/40Scenes; Scene-specific elements in video content
    • G06V20/46Extracting features or characteristics from the video content, e.g. video fingerprints, representative shots or key frames
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V30/00Character recognition; Recognising digital ink; Document-oriented image-based pattern recognition
    • G06V30/10Character recognition
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V30/00Character recognition; Recognising digital ink; Document-oriented image-based pattern recognition
    • G06V30/10Character recognition
    • G06V30/19Recognition using electronic means
    • G06V30/19007Matching; Proximity measures
    • G06V30/19013Comparing pixel values or logical combinations thereof, or feature values having positional relevance, e.g. template matching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V30/00Character recognition; Recognising digital ink; Document-oriented image-based pattern recognition
    • G06V30/40Document-oriented image-based pattern recognition
    • G06V30/41Analysis of document content
    • G06K2209/01
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V2201/00Indexing scheme relating to image or video recognition or understanding
    • G06V2201/02Recognising information on displays, dials, clocks

Abstract

컴퓨팅 시스템을 위한 타이핑된 및/또는 페이스팅된 텍스트의 검출, 캐럿 추적, 및 활성 엘리먼트 검출이 개시된다. 사용자가 가시적인 문자들이 나타나게 하지 않는 핫 키들 또는 다른 키들을 잠재적으로 포함하는 텍스트를 타이핑하거나 페이스팅하는 컴퓨팅 시스템과 연관된 스크린 상의 위치가 식별될 수 있고, 타이핑 또는 페이스팅이 발생한 스크린 상의 물리적 포지션은 하나 이상의 문자들이 나타난 곳, 커서가 점멸한 곳, 또는 양자 모두의 현재의 해상도에 기초하여 제공될 수 있다. 이것은 변경들이 발생한 스크린 상의 위치들을 식별함으로써, 그리고 이 위치들 상에서 텍스트 인식 및/또는 캐럿 검출을 수행함으로써 행해질 수 있다. 타이핑 또는 페이스팅 활동의 물리적 포지션은 스크린 상에 디스플레이된 애플리케이션에서의 활성 또는 포커싱된 엘리먼트의 결정을 허용한다.

Description

텍스트 검출, 캐럿 추적, 및 활성 엘리먼트 검출
관련 출원에 대한 상호-참조
이 출원은, 2020년 5월 1일자로 출원된 미국 정규 특허 출원 제16/864,629호의 계속이며 이의 이익을 주장하는, 2020년 5월 4일자로 출원된 미국 정규 특허 출원 제16/865,886호의 이익을 주장한다. 이 선출원된 출원들의 발명 요지는 이로써 그 전체적으로 참조에 의해 편입된다.
분야
본 발명은 일반적으로 컴퓨팅 시스템 동작 검출에 관한 것으로, 더 구체적으로, 컴퓨팅 시스템을 위한 타이핑된(typed) 및/또는 페이스팅된(pasted) 텍스트의 검출, 캐럿 추적(caret tracking), 및 활성 엘리먼트 검출(active element detection)에 관한 것이다.
사용자들이 컴퓨팅 시스템을 위한 입력 디바이스들과 상호작용할 때, 키 누름(key press)들은 키 후킹(key hooking)에 의해 결정될 수 있지만, 사용자가 스크린 상의 어느 엘리먼트를 타이핑 입력하고 있는지는 알려지지 않을 수 있다. 이에 따라, 활성 엘리먼트가 스크린 상에서 무엇인지가 알려지지 않을 수 있다. 따라서, 컴퓨팅 시스템과의 사용자 상호작용들의 모니터링을 위한 개선된 접근법이 유익할 수 있다.
본 발명의 소정의 실시예들은 현재의 검출 기술들에 의해 완전히 식별되거나, 인식되거나, 해결되지 않은 종래 기술에서의 문제들 및 필요성들에 대한 해결책들을 제공할 수 있다. 예를 들어, 본 발명의 일부 실시예들은 컴퓨팅 시스템을 위한 타이핑된 및/또는 페이스팅된 텍스트의 검출, 캐럿 추적, 및 활성 엘리먼트 검출에 속한다.
실시예에서, 타이핑된 텍스트 검출 로직을 포함하는 컴퓨터 프로그램은 비-일시적 컴퓨터-판독가능 매체 상에 수록(embody)된다. 프로그램은, 적어도 하나의 프로세서로 하여금, 시간 윈도우(timw window) 동안에 발생한 키 누름 이벤트(key press event)들을 포함하는 키보드 문자 큐(keyboard character queue)를 생성하게 하고, 현재의 스크린샷 프레임(screenshot frame)이 이전의 스크린샷 프레임과 상이한 하나 이상의 영역을 결정하게 하도록 구성된다. 현재의 스크린샷 프레임 및 이전의 스크린샷 프레임은 디스플레이의 전체 스크린 또는 그 일부분을 포함한다. 프로그램은 또한, 적어도 하나의 프로세서로 하여금, 하나 이상의 결정된 영역에서의 하나 이상의 접속된 부재(member)를 추출하고 추출된 하나 이상의 접속된 부재 상에서 OCR을 수행하여, 하나 이상의 인식된 문자, 하나 이상의 인식된 문자 시퀀스(character sequence), 또는 양자 모두와, 개개의 포지션(position)들을 생성하게 하도록 구성된다. 프로그램은 또한, 적어도 하나의 프로세서로 하여금, 하나 이상의 인식된 문자, 하나 이상의 인식된 문자 시퀀스, 또는 양자 모두를 키보드 문자 큐와 비교하게 하고, 문자 또는 문자 시퀀스가 키보드 문자 큐의 문자 또는 문자 시퀀스와 매칭될 때, 키보드 문자 큐로부터 문자 또는 문자 시퀀스를 제거하게 하도록 구성된다.
또 다른 실시예에서, 로봇 프로세스 자동화를 위한 타이핑된 텍스트 검출을 위한 컴퓨터-구현 방법은 RPA 로봇(robot)에 의해, 시간 윈도우 동안에 발생한 키 누름 이벤트들을 포함하는 키보드 문자 큐를 생성하는 단계를 포함한다. 키 누름 이벤트들은 눌러진 키의 문자 및 키가 눌러진 시간을 포함한다. 컴퓨터-구현 방법은 또한, RPA 로봇에 의해, 현재의 스크린샷 프레임이 이전의 스크린샷 프레임과 상이한 하나 이상의 영역을 결정하는 단계를 포함한다. 현재의 스크린샷 프레임 및 이전의 스크린샷 프레임은 디스플레이의 전체 스크린 또는 그 일부분을 포함한다. 컴퓨터-구현 방법은 RPA 로봇에 의해, 하나 이상의 결정된 영역에서의 하나 이상의 접속된 부재를 추출하고 추출된 하나 이상의 접속된 부재 상에서 OCR을 수행하여, 하나 이상의 인식된 문자, 하나 이상의 인식된 문자 시퀀스, 또는 양자 모두와, 개개의 포지션들을 생성하는 단계를 더 포함한다. 추가적으로, 컴퓨터-구현 방법은 RPA 로봇에 의해, 하나 이상의 인식된 문자, 하나 이상의 인식된 문자 시퀀스, 또는 양자 모두를 키보드 문자 큐와 비교하는 단계를 포함한다. 문자 또는 문자 시퀀스가 키보드 문자 큐의 문자 또는 문자 시퀀스와 매칭될 때, 컴퓨터-구현 방법은 RPA 로봇에 의해, 키보드 문자 큐로부터 문자 또는 문자 시퀀스를 제거하는 단계, 및 RPA 로봇에 의해, 매칭된 문자 또는 문자 시퀀스의 포지션을 포함하는 포지션을 갖는 현재의 스크린샷 프레임에서의 그래픽 엘리먼트를 활성 엘리먼트로서 설정하는 단계를 포함한다.
또 다른 실시예에서, 컴퓨터 프로그램은 비-일시적 컴퓨터-판독가능 매체 상에 수록된다. 프로그램은, 적어도 하나의 프로세서로 하여금, 현재의 스크린샷 프레임이 이전의 스크린샷 프레임과 상이한 하나 이상의 영역을 결정하게 하도록 구성된다. 현재의 스크린샷 프레임 및 이전의 스크린샷 프레임은 디스플레이의 전체 스크린 또는 그 일부분을 포함한다. 프로그램은 또한, 적어도 하나의 프로세서로 하여금, 하나 이상의 결정된 영역에서의 하나 이상의 접속된 부재를 추출하고 추출된 하나 이상의 접속된 부재 상에서 OCR을 수행하여, 하나 이상의 인식된 문자, 하나 이상의 인식된 문자 시퀀스, 또는 양자 모두와, 개개의 포지션들을 생성하게 하도록 구성된다. 프로그램은 또한, 적어도 하나의 프로세서로 하여금, 하나 이상의 인식된 문자, 하나 이상의 인식된 문자 시퀀스, 또는 양자 모두를 키보드 문자 큐와 비교하게 하도록 구성된다. 문자 또는 문자 시퀀스가 키보드 문자 큐의 문자 또는 문자 시퀀스와 매칭될 때, 프로그램은, 적어도 하나의 프로세서로 하여금, 키보드 문자 큐로부터 문자 또는 문자 시퀀스를 제거하게 하고, 매칭된 문자 또는 문자 시퀀스의 포지션을 포함하는 포지션을 갖는 현재의 스크린샷 프레임에서의 그래픽 엘리먼트를 활성 엘리먼트로서 설정하게 하도록 구성된다.
또 다른 실시예에서, 캐럿 추적 로직을 포함하는 컴퓨터 프로그램은 비-일시적 컴퓨터-판독가능 매체 상에 수록된다. 프로그램은, 적어도 하나의 프로세서로 하여금, 현재의 스크린샷 프레임이 이전의 스크린샷 프레임과 상이한 하나 이상의 영역을 결정하게 하도록 구성된다. 현재의 스크린샷 프레임 및 이전의 스크린샷 프레임은 디스플레이의 전체 스크린 또는 그 일부분을 포함한다. 프로그램은 또한, 적어도 하나의 프로세서로 하여금, 하나 이상의 영역에 대한 픽셀 변경들을 계산하게 하고, 계산된 픽셀 변경들을 하나 이상의 영역의 각각에 대한 2진 행렬(binary matrix)로 투사(project)하도록 구성된다. 프로그램은 또한, 적어도 하나의 프로세서로 하여금, 각각의 2진 행렬에 대하여, 점멸하는 캐럿 영역 후보들을 추출하고 2진 행렬에서의 부재들을 병합(join)하게 하도록 구성된다. 추가적으로, 프로그램은, 적어도 하나의 프로세서로 하여금, 부재들로부터 형상(shape)들을 추출하고 캐럿의 형상에 대하여 부재들의 형상들을 유효성확인(validate)하게 하도록 구성된다.
또 다른 실시예에서, 컴퓨터 프로그램은 비-일시적 컴퓨터-판독가능 매체 상에 수록된다. 프로그램은, 적어도 하나의 프로세서로 하여금, 현재의 스크린샷 프레임이 이전의 스크린샷 프레임과 상이한 하나 이상의 영역을 분석하게 하도록 구성된다. 현재의 스크린샷 프레임 및 이전의 스크린샷 프레임은 디스플레이의 전체 스크린 또는 그 일부분을 포함한다. 프로그램은 또한, 적어도 하나의 프로세서로 하여금, 분석에 기초하여 하나 이상의 캐럿 후보를 식별하게 하고, 하나 이상의 캐럿 후보 중의 캐럿 후보가 점멸하고 있다는 것을 식별하기 위하여 유효성확인을 수행하게 하도록 구성된다. 프로그램은 또한, 적어도 하나의 프로세서로 하여금, 유효성확인에 기초하여 캐럿의 위치를 식별하게 하고, 캐럿의 위치를 갖는 현재의 스크린샷 프레임에서의 그래픽 엘리먼트를 활성 엘리먼트로서 설정하게 하도록 구성된다.
또 다른 실시예에서, RPA를 위한 캐럿 추적을 수행하기 위한 컴퓨터-구현 방법은 RPA 로봇에 의해, 현재의 스크린샷 프레임이 이전의 스크린샷 프레임과 상이한 하나 이상의 영역을 분석하는 단계를 포함한다. 현재의 스크린샷 프레임 및 이전의 스크린샷 프레임은 디스플레이의 전체 스크린 또는 그 일부분을 포함한다. 컴퓨터-구현 방법은 또한, RPA 로봇에 의해, 분석에 기초하여 하나 이상의 캐럿 후보를 식별하는 단계, 및 RPA 로봇에 의해, 하나 이상의 캐럿 후보 중의 캐럿 후보가 점멸하고 있다는 것을 식별하기 위하여 유효성확인을 수행하는 단계를 포함한다. 컴퓨터-구현 방법은 RPA 로봇에 의해, 유효성확인에 기초하여 캐럿의 위치를 식별하는 단계, 및 RPA 로봇에 의해, 캐럿의 위치를 갖는 현재의 스크린샷 프레임에서의 그래픽 엘리먼트를 활성 엘리먼트로서 설정하는 단계를 더 포함한다.
또 다른 실시예에서, 페이스팅된 텍스트 검출 로직을 포함하는 컴퓨터 프로그램은 비-일시적 컴퓨터-판독가능 매체 상에 수록된다. 프로그램은, 적어도 하나의 프로세서로 하여금, 컨텐츠(content)가 시간 윈도우 내에서 오퍼레이팅 시스템(operating system)을 위한 클립보드(clipboard)에 추가되었는지 여부를 결정하기 위하여 클립보드를 모니터링하게 하도록 구성된다. 컨텐츠가 시간 윈도우 내에서 클립보드에 추가되었을 때, 프로그램은, 적어도 하나의 프로세서로 하여금, 현재의 스크린샷 프레임이 이전의 스크린샷 프레임과 상이한 하나 이상의 영역을 결정하게 하고 - 현재의 스크린샷 프레임 및 이전의 스크린샷 프레임은 디스플레이의 전체 스크린 또는 그 일부분을 포함함 -, 하나 이상의 결정된 영역에서의 하나 이상의 접속된 부재를 추출하고 추출된 하나 이상의 접속된 부재 상에서 OCR을 수행하여, 하나 이상의 인식된 문자, 하나 이상의 인식된 문자 시퀀스, 또는 양자 모두와, 개개의 포지션들을 생성하게 하고, 하나 이상의 인식된 문자, 하나 이상의 인식된 문자 시퀀스, 또는 양자 모두를 클립보드 컨텐츠와 비교하게 하고, 문자 또는 문자 시퀀스가 클립보드 컨텐츠의 문자 또는 문자 시퀀스와 매칭될 때, 페이스팅된 텍스트의 좌표들을 획득하고, 페이스팅된 텍스트의 좌표들을 포함하는 그래픽 엘리먼트를 활성 엘리먼트로서 설정하게 하도록 구성된다.
또 다른 실시예에서, 페이스팅된 텍스트 검출 로직을 포함하는 컴퓨터 프로그램은 비-일시적 컴퓨터-판독가능 매체 상에 수록된다. 프로그램은, 적어도 하나의 프로세서로 하여금, 클립보드 컨텐츠가 존재하는지 여부를 결정하게 하도록 구성된다. 클립보드 컨텐츠가 존재하고 클립보드 컨텐츠가 시간 윈도우 동안에 추가되었을 때, 프로그램은, 적어도 하나의 프로세서로 하여금, 현재의 스크린샷 프레임이 이전의 스크린샷 프레임과 상이한 하나 이상의 영역을 결정하게 하고 - 현재의 스크린샷 프레임 및 이전의 스크린샷 프레임은 디스플레이의 전체 스크린 또는 그 일부분을 포함함 -, 하나 이상의 결정된 영역에서의 하나 이상의 접속된 부재를 추출하고 추출된 하나 이상의 접속된 부재 상에서 OCR을 수행하여, 하나 이상의 인식된 문자, 하나 이상의 인식된 문자 시퀀스, 또는 양자 모두와, 개개의 포지션들을 생성하게 하고, 클립보드 컨텐츠를 하나 이상의 인식된 문자, 하나 이상의 인식된 문자 시퀀스, 또는 양자 모두와 비교하게 하고, 클립보드 컨텐츠가 하나 이상의 인식된 문자, 하나 이상의 인식된 문자 시퀀스, 또는 양자 모두와 매칭될 때, 하나 이상의 인식된 문자, 하나 이상의 인식된 문자 시퀀스, 또는 양자 모두를 포함하는 포지션을 갖는 현재의 스크린샷 프레임에서의 그래픽 엘리먼트를 활성 엘리먼트로서 설정하게 하도록 구성된다.
또 다른 실시예에서, 로봇 프로세스 자동화(robotic process automation) RPA를 위한 페이스팅 텍스트 검출을 위한 컴퓨터-구현 방법은, 클립보드 컨텐츠가 존재하고 시간 윈도우 동안에 추가되었을 때, RPA 로봇에 의해, 현재의 스크린샷 프레임이 이전의 스크린샷 프레임과 상이한 하나 이상의 영역을 결정하는 단계를 포함한다. 현재의 스크린샷 프레임 및 이전의 스크린샷 프레임은 디스플레이의 전체 스크린 또는 그 일부분을 포함한다. 컴퓨터-구현 방법은 또한, RPA 로봇에 의해, 하나 이상의 결정된 영역에서의 하나 이상의 접속된 부재를 추출하고 추출된 하나 이상의 접속된 부재 상에서 OCR을 수행하여, 하나 이상의 인식된 문자, 하나 이상의 인식된 문자 시퀀스, 또는 양자 모두와, 개개의 포지션들을 생성하는 단계를 포함한다. 컴퓨터-구현 방법은 RPA 로봇에 의해, 클립보드 컨텐츠를 하나 이상의 인식된 문자, 하나 이상의 인식된 문자 시퀀스, 또는 양자 모두와 비교하는 단계를 더 포함한다. 클립보드 컨텐츠가 하나 이상의 인식된 문자, 하나 이상의 인식된 문자 시퀀스, 또는 양자 모두와 매칭될 때, 컴퓨터-구현 방법은 추가적으로, RPA 로봇에 의해, 하나 이상의 인식된 문자, 하나 이상의 인식된 문자 시퀀스, 또는 양자 모두를 포함하는 포지션을 갖는 현재의 스크린샷 프레임에서의 그래픽 엘리먼트를 활성 엘리먼트로서 설정하는 단계를 포함한다.
또 다른 실시예에서, 스크린샷 프레임들을 프리프로세싱(preprocessing)하고 활성 엘리먼트들을 검출하기 위한 컴퓨터 프로그램은 비-일시적 컴퓨터-판독가능 매체 상에 수록된다. 프로그램은, 적어도 하나의 프로세서로 하여금, 이전의 스크린샷 프레임 상에서 컴퓨터 비전(computer vision; CV) 프리프로세싱을 작동시키도록 구성된다. 컴퓨터 프로그램은 또한, 적어도 하나의 프로세서로 하여금, 이전의 스크린샷 프레임에서의 그래픽 엘리먼트들의 유형들 및 위치들을 결정하게 하고, 현재의 스크린샷 프레임이 이전의 스크린샷 프레임과 상이한 영역에서 변경이 발생한 것으로 결정하게 하도록 구성된다. 영역은 텍스트 기입(text entry)을 허용하는 하나 이상의 그래픽 엘리먼트의 에어리어(area) 내에 적어도 부분적으로 포함된다. 텍스트 기입을 허용하는 하나의 그래픽 엘리먼트에서 변경이 발생하였을 때, 프로그램은 또한, 적어도 하나의 프로세서로 하여금, 변경이 발생한 그래픽 엘리먼트를 활성 엘리먼트로서 설정하게 하도록 구성된다.
또 다른 실시예에서, 스크린샷 프레임들을 프리프로세싱하고 활성 엘리먼트들을 검출하기 위한 컴퓨터 프로그램은 비-일시적 컴퓨터-판독가능 매체 상에 수록된다. 프로그램은, 적어도 하나의 프로세서로 하여금, 이전의 스크린샷 프레임 상에서 CV 프리프로세싱을 작동시키도록 구성된다. 프로그램은 또한, 적어도 하나의 프로세서로 하여금, 이전의 스크린샷 프레임에서의 그래픽 엘리먼트들의 유형들 및 위치들을 결정하게 하고, 현재의 스크린샷 프레임이 이전의 스크린샷 프레임과 상이한 영역에서 변경이 발생한 것으로 결정하게 하도록 구성된다. 영역은 텍스트 기입을 허용하는 하나 이상의 그래픽 엘리먼트의 에어리어 내에 적어도 부분적으로 포함된다. 텍스트 기입을 허용하는 하나의 그래픽 엘리먼트에서 변경이 발생하였을 때, 프로그램은, 적어도 하나의 프로세서로 하여금, 변경이 발생한 그래픽 엘리먼트를 활성 엘리먼트로서 설정하게 하도록 구성된다. 텍스트 기입을 허용하는 하나 초과의 그래픽 엘리먼트에서 변경이 발생하였을 때, 프로그램은, 적어도 하나의 프로세서로 하여금, 시간 윈도우 동안에 발생한 키 누름 이벤트들의 키보드 문자 큐를 생성하게 하고, 이전의 스크린샷 프레임과 현재의 스크린샷 프레임 사이에서 발생한 새롭게 추가된 키 누름 이벤트들을 결정하게 하고, 변경들이 발생한 2 개 이상의 그래픽 엘리먼트들의 영역들 상에서 OCR을 수행하게 하고, 새롭게 추가된 키 누름 이벤트들을, 변경들이 발생한 2 개 이상의 그래픽 엘리먼트들 중의 하나로 매칭시키고, 매칭된 그래픽 엘리먼트를 활성 엘리먼트로서 설정하게 하도록 구성된다.
또 다른 실시예에서, 스크린샷 프레임들을 프리프로세싱하고 RPA를 위한 활성 엘리먼트들을 검출하기 위한 컴퓨터-구현 방법은 RPA 로봇에 의해, 이전의 스크린샷 프레임 상에서 CV 프리프로세싱을 작동시키는 단계를 포함한다. 컴퓨터-구현 방법은 또한, RPA 로봇에 의해, 이전의 스크린샷 프레임에서의 그래픽 엘리먼트들의 유형들 및 위치들을 결정하는 단계, 및 RPA 로봇에 의해, 현재의 스크린샷 프레임이 이전의 스크린샷 프레임과 상이한 영역에서 변경이 발생한 것으로 결정하는 단계를 포함한다. 영역은 텍스트 기입을 허용하는 하나 이상의 그래픽 엘리먼트의 에어리어 내에 적어도 부분적으로 포함된다. 텍스트 기입을 허용하는 하나의 그래픽 엘리먼트에서 변경이 발생하였을 때, 컴퓨터-구현 방법은 RPA 로봇에 의해, 변경이 발생한 그래픽 엘리먼트를 활성 엘리먼트로서 설정하는 단계를 더 포함한다.
발명의 소정의 실시예들의 장점들이 용이하게 이해되도록 하기 위하여, 위에서 간략하게 설명된 발명의 더 특정한 설명은 첨부된 도면들에서 예시되는 특정 실시예들을 참조하게 될 것이다. 이 도면들은 발명의 오직 전형적인 실시예들을 도시하고, 그러므로, 그 범위의 제한인 것으로 고려되지 않아야 한다는 것이 이해되어야 하지만, 발명은 동반 도면들의 이용을 통해 추가적인 구체성 및 상세함으로 설명되고 기술될 것이다:
도 1은 본 발명의 실시예에 따라, 로봇 프로세스 자동화(robotic process automation; RPA) 시스템을 예시하는 아키텍처 다이어그램이다.
도 2는 본 발명의 실시예에 따라, 전개된 RPA 시스템을 예시하는 아키텍처 다이어그램이다.
도 3은 본 발명의 실시예에 따라, 설계자, 활동들, 및 구동기들 사이의 관계를 예시하는 아키텍처 다이어그램이다.
도 4는 본 발명의 실시예에 따라, RPA 시스템을 예시하는 아키텍처 다이어그램이다.
도 5는 본 발명의 실시예에 따라, 타이핑된 및/또는 페이스팅된 텍스트의 검출, 캐럿 추적, 및 활성 엘리먼트 검출을 수행하도록 구성된 컴퓨팅 시스템을 예시하는 아키텍처 다이어그램이다.
도 6은 본 발명의 실시예에 따라, 타이핑된 텍스트 검출, 캐럿 추적, 및 활성 엘리먼트 검출을 수행하기 위한 일반적인 프로세스를 예시하는 아키텍처 다이어그램이다.
도 7은 본 발명의 실시예에 따라, 타이핑된 텍스트 검출 및 캐럿 추적을 수행하기 위한 프로세스를 예시하는 아키텍처 다이어그램이다.
도 8a는 본 발명의 실시예에 따라, 각각 프레임들 N-1 및 N에 대한 동문 기부 윈도우를 포함하는 스크린샷들의 일부분들을 예시한다.
도 8b는 본 발명의 실시예에 따라, 정사각형 격자로 분할된 스크린샷 N-1을 예시한다.
도 8c는 본 발명의 실시예에 따라, 정사각형 격자로 분할된 스크린샷 N을 예시한다.
도 8d는 본 발명의 실시예에 따라, 스크린샷 N-1로부터의 변경을 포함하는 강조표시된 행(highlighted row)을 갖는 스크린샷 N을 예시한다.
도 8e는 본 발명의 실시예에 따라, 스크린샷 N-1로부터의 변경을 포함하는 강조표시된 행세어의 강조표시된 셀(highlighted cell)을 갖는 스크린샷 N을 예시한다.
도 8f는 본 발명의 실시예에 따라, 스크린샷 N-1로부터의 변경을 포함하는 강조표시된 영역을 갖는 스크린샷 N을 예시한다.
도 9는 본 발명의 실시예에 따라, 해상도 변경들에 대하여 체크하고, 접속된 디스플레이들의 범위에서의 변경들에 대해 체크하고, 변경들을 수용하기 위하여 캐럿 추적 비디오 로직을 셋업(set up)하기 위한 프로세스를 예시하는 플로우차트이다.
도 10은 본 발명의 실시예에 따라, 비디오 레코더(video recoder)를 위한 프로세스를 예시하는 플로우차트이다.
도 11은 본 발명의 실시예에 따라, 캐럿 추적을 수행하기 위한 프로세스를 예시하는 플로우차트이다.
도 12a 내지 도 12d는 본 발명의 실시예에 따라, 타이핑된 문자 추적, 캐럿 추적, 및 활성 엘리먼트 검출을 위한 비디오 프로세싱을 수행하기 위한 프로세스를 예시하는 플로우차트들이다.
도 13a 및 도 13b는 본 발명의 실시예에 따라, 페이스팅된 텍스트 추적을 수행하기 위한 프로세스를 예시하는 플로우차트들이다.
도 14a는 본 발명의 실시예에 따라, 32x32 영역으로 조합된 4 개의 16x16 블록들 내에 포함된 글자 "E"에 대한 일 예의 2진 행렬을 예시한다.
도 14b는 본 발명의 실시예에 따라, 도 14a의 영역에 대한 2진 행렬 내에 포함된 부재(글자 "E")에 대한 크롭핑된(cropped) 7x9 2진 행렬을 예시한다.
도 15는 본 발명의 실시예에 따라, 활성 엘리먼트들을 결정하기 위하여 CV 및 키보드 큐를 이용하기 위한 프로세스를 예시하는 플로우차트이다.
도 16은 본 발명의 실시예에 따라, 타이핑된 및/또는 페이스팅된 텍스트의 검출, 캐럿 추적, 및 활성 엘리먼트 검출을 수행하도록 구성된 시스템을 예시하는 아키텍처 다이어그램이다.
도 17은 본 발명의 실시예에 따라, 프리프로세싱, 타이핑된 텍스트 검출, 캐럿 추적, 및 활성 엘리먼트 검출을 수행하기 위한 프로세스를 예시하는 플로우차트이다.
달리 표시되지 않는 한, 유사한 참조 문자들은 첨부된 도면들 전반에 걸쳐 대응하는 특징들을 나타낸다.
일부 실시예들은 컴퓨팅 시스템을 위한 타이핑된 및/또는 페이스팅된 텍스트의 검출, 캐럿 추적, 및 활성 엘리먼트 검출에 속한다. 일부 실시예들은 사용자가 가시적인 문자들이 나타나게 하지 않는 핫 키(hot key)들 또는 다른 키들을 잠재적으로 포함하는 텍스트를 타이핑하거나 페이스팅하는 곳이 컴퓨팅 시스템과 연관된 스크린 상의 어디인지를 인식하고, 하나 이상의 문자들이 나타난 곳, 커서(cursor)가 점멸한 곳, 또는 양자 모두의 (예컨대, 좌표들에서의) 현재의 해상도에 기초하여 스크린 상의 물리적 포지션을 제공한다. 타이핑 또는 페이스팅 활동 및/또는 캐럿의 물리적 포지션은 사용자가 어느 필드(들)를 타이핑 입력하고 있고 어느 필드(들)에 포커싱되는지와, 애플리케이션이 프로세스 탐지 또는 다른 애플리케이션들을 위하여 무엇인지의 결정을 허용할 수 있다.
일부 실시예들은 변경들을 식별하기 위하여 현재의 스크린샷을 이전의 스크린샷과 연속적으로 또는 주기적으로 비교하는 피드백 루프 프로세스에서 구현된다. 시각적 변경들이 스크린 상에서 발생한 위치들이 식별될 수 있고, 광학적 문자 인식(optical character recognition; OCR)은 변경이 발생한 위치 상에서 수행될 수 있다. OCR의 결과들은 그 다음으로, 매칭이 존재하는지 여부를 결정하기 위하여 (예컨대, 키 후킹에 의해 결정된 바와 같은) 키보드 큐의 컨텐츠와 비교될 수 있다. 변경이 발생한 위치들은 현재의 스크린샷으로부터의 픽셀들의 박스를 이전의 스크린샷으로부터의 동일한 위치에서의 픽셀들의 박스와 비교함으로써 결정될 수 있다.
소정의 실시예들이 로봇 프로세스 자동화(RPA)에 채용될 수 있다. 도 1은 본 발명의 실시예에 따라, RPA 시스템(100)을 예시하는 아키텍처 다이어그램이다. RPA 시스템(100)은 개발자가 작업흐름(workflow)들을 설계하고 구현하는 것을 허용하는 설계자(designer)(110)를 포함한다. 설계자(110)는 애플리케이션 통합뿐만 아니라, 자동화 제3자 애플리케이션들, 행정적인 정보 기술(Information Technology; IT) 태스크들, 및 비지니스 IT 프로세스들을 위한 해결책을 제공할 수 있다. 설계자(110)는 비지니스 프로세스의 그래픽 표현인 자동화 프로젝트(automation project)의 개발을 용이하게 할 수 있다. 간단하게 말하면, 설계자(110)는 작업흐름들 및 로봇들의 개발 및 전개(deployment)를 용이하게 한다.
자동화 프로젝트는 실행 순서의 개발자 제어, 및 "활동(activity)들"로서 본원에서 정의된, 작업흐름에서 개발된 단계들의 맞춤형 세트(custom set) 사이의 관계를 제공함으로써 규칙-기반 프로세스들의 자동화를 가능하게 한다. 설계자(110)의 실시예의 하나의 상업적인 예는 UiPath Studio™이다. 각각의 활동은 버튼을 클릭하는 것, 파일을 판독하는 것, 로그 패널(log panel)로 기록하는 것 등과 같은 액션(action)을 포함할 수 있다. 일부 실시예들에서, 작업흐름들은 네스팅(nest)될 수 있거나 내장될 수 있다.
일부 유형들의 작업흐름들은 시퀀스들, 플로우차트들, FSM들, 및/또는 전역적 예외 핸들러(global exception handler)들을 포함할 수 있지만, 이것으로 제한되지는 않는다. 시퀀스들은 선형 프로세스들을 위하여 특히 적당할 수 있어서, 작업흐름을 혼란스럽게 하지 않으면서, 하나의 활동으로부터 또 다른 것으로의 흐름을 가능하게 할 수 있다. 플로우차트들은 더 복잡한 비지니스 로직에 특히 적당할 수 있어서, 다수의 분기 로직 조작자들을 통해 더 다양한 방식으로 판정들의 통합 및 활동들의 접속을 가능하게 할 수 있다. FSM들은 큰 작업흐름들을 위하여 특히 적당할 수 있다. FSM들은 그 실행에서 유한한 수의 상태(state)들을 이용할 수 있고, 상태들은 조건(즉, 전이) 또는 활동에 의해 트리거링된다. 전역적 예외 핸들러들은 실행 에러(execution error)를 조우할 때에 작업흐름 거동(workflow behavior)을 결정하기 위하여, 그리고 디버깅 프로세스들을 위하여 특히 적당할 수 있다.
일단 작업흐름이 설계자(110)에서 개발되면, 비지니스 프로세스들의 실행은 설계자(110)에서 개발된 작업흐름들을 실행하는 하나 이상의 로봇들(130)을 편성(orchestrate)하는 지휘자(conductor)(120)에 의해 편성된다. 지휘자(120)의 실시예의 하나의 상업적인 예는 UiPath Orchestrator™이다. 지휘자(120)는 환경에서 자원들의 생성, 모니터링, 및 전개의 관리를 용이하게 한다. 지휘자(120)는 제3자 해결책들 및 애플리케이션들과의 통합 포인트(integration point) 또는 응집 포인트(aggregation point)들 중의 하나로서 작용할 수 있다.
지휘자(120)는 로봇들(130)의 함대(fleet)를 관리할 수 있어서, 중앙집중화된 포인트로부터 로봇들(130)을 접속하고 실행할 수 있다. 관리될 수 있는 로봇들(130)의 유형들은 유인 로봇(attended robot)들(132), 무인 로봇(unattended robot)들(134), (무인 로봇들(134)과 유사하지만, 개발 및 테스팅 목적들을 위하여 이용된) 개발 로봇들, 및 (유인 로봇들(132)과 유사하지만, 개발 및 테스팅 목적들을 위하여 이용된) 비생산 로봇들을 포함하지만, 이것으로 제한되지는 않는다. 유인 로봇들(132)은 사용자 이벤트들에 의해 트리거링되고, 동일한 컴퓨팅 시스템 상에서 인간과 함께 동작한다. 유인 로봇들(132)은 중앙집중화된 프로세스 전개 및 로깅 매체를 위한 지휘자(120)와 함께 이용될 수 있다. 유인 로봇들(132)은 인간 사용자가 다양한 태스크들을 달성하는 것을 도울 수 있고, 사용자 이벤트들에 의해 트리거링될 수 있다. 일부 실시예들에서, 프로세스들은 이 유형의 로봇에 대한 지휘자(120)로부터 시작될 수 없고, 및/또는 프로세스들은 록킹된 스크린 하에서 작동할 수 없다. 소정의 실시예들에서, 유인 로봇들(132)은 로봇 트레이(robot tray)로부터 또는 커맨드 프롬프트(command prompt)로부터 오직 시작될 수 있다. 유인 로봇들(132)은 일부 실시예들에서 인간 감독 하에서 작동해야 한다.
무인 로봇들(134)은 가상적 환경들에서 무인으로 작동하고, 많은 프로세스들을 자동화할 수 있다. 무인 로봇들(134)은 원격 실행, 모니터링, 스케줄링, 및 작업 큐들에 대한 지원을 제공하는 것을 담당할 수 있다. 모든 로봇 유형들에 대한 디버깅(debugging)은 일부 실시예들에서 설계자(110) 내에서 작동될 수 있다. 양자의 유인 및 무인 로봇들은, 메인프레임(mainframe)들, 웹 애플리케이션들, VM들, 기업 애플리케이션들(예컨대, SAP®, SalesForce®, Oracle® 등에 의해 생산된 것들), 및 컴퓨팅 시스템 애플리케이션들(예컨대, 데스크톱 및 랩톱 애플리케이션들, 이동 디바이스 애플리케이션들, 웨어러블 컴퓨터 애플리케이션들 등)을 포함하지만 이것으로 제한되지는 않는 다양한 시스템들 및 애플리케이션들을 자동화할 수 있다.
지휘자(120)는 프로비저닝(provisioning), 전개, 버저닝(versioining), 구성, 큐잉(queueing), 모니터링(monitoring), 로깅(logging), 및/또는 상호접속성 제공을 포함하지만 이것으로 제한되지는 않는 다양한 능력들을 가질 수 있다. 프로비저닝은 로봇들(130)과 지휘자(120)(예컨대, 웹 애플리케이션) 사이의 접속들의 생성 및 유지보수를 포함할 수 있다. 전개는 실행을 위한 배정된 로봇들(130)로의 패키지 버전들의 올바른 전달을 보장하는 것을 포함할 수 있다. 버저닝은 일부 실시예들에서 일부 프로세스 또는 구성의 고유한 인스턴스(instance)들의 관리를 포함할 수 있다. 구성은 로봇 환경들 및 프로세스 구성들의 유지보수 및 전달을 포함할 수 있다. 큐잉은 큐들 및 큐 항목들의 관리를 제공하는 것을 포함할 수 있다. 모니터링은 로봇 식별 데이터를 추적하는 것 및 사용자 허가들을 유지하는 것을 포함할 수 있다. 로깅은 로그들을 데이터베이스(예컨대, SQL 데이터베이스) 및/또는 또 다른 저장 메커니즘(예컨대, 큰 데이터세트들을 저장하고 신속하게 질의하기 위한 능력을 제공하는 ElasticSearch®)으로 저장하고 인덱싱하는 것을 포함할 수 있다. 지휘자(120)는 제3자 해결책들 및/또는 애플리케이션들을 위한 통신의 중앙집중화된 포인트로서 작용함으로써 상호접속성을 제공할 수 있다.
로봇들(130)은 설계자(110) 내에 구축된 작업흐름들을 작동시키는 실행 에이전트(execution agent)들이다. 로봇(들)(130)의 일부 실시예들의 하나의 상업적인 예는 UiPath Robots™이다. 일부 실시예들에서, 로봇들(130)은 Microsoft Windows® 서비스 제어 관리자(Service Control Manager; SCM)-관리된 서비스를 디폴트(default)로 설치한다. 그 결과, 이러한 로봇들(130)은 로컬 시스템 계정(local system account) 하에서 대화형(interactive) Windows® 세션들을 개방할 수 있고, Windows® 서비스의 권리들을 가질 수 있다.
일부 실시예들에서, 로봇들(130)은 사용자 모드에서 설치될 수 있다. 이러한 로봇들(130)에 대하여, 이것은 로봇들이 주어진 로봇(130)이 설치된 사용자와 동일한 권리들을 가진다는 것을 의미한다. 이 특징은 또한, 그 최대 잠재력에서 각각의 머신의 전체 사용을 보장하는 고밀도(High Density; HD) 로봇들을 위하여 이용가능할 수 있다. 일부 실시예들에서, 임의의 유형의 로봇(130)은 HD 환경에서 구성될 수 있다.
일부 실시예들에서의 로봇들(130)은 몇몇 컴포넌트들로 분할되고, 각각은 특정한 자동화 태스크에 전용된다. 일부 실시예들에서의 로봇 컴포넌트들은 SCM-관리된 로봇 서비스들, 사용자 모드 로봇 서비스들, 실행자(executor)들, 에이전트들, 및 커맨드 라인(command line)을 포함하지만, 이것으로 제한되지는 않는다. SCM-관리된 로봇 서비스들은 Windows® 세션들을 관리 및 모니터링하고, 지휘자(120)와 실행 호스트들(즉, 로봇들(130)이 그 상에서 실행되는 컴퓨팅 시스템들) 사이의 프록시(proxy)로서 작용한다. 이 서비스들은 로봇들(130)을 위한 크리덴셜(credential)들로 신뢰되고, 로봇들(130)을 위한 크리덴셜들을 관리한다. 콘솔 애플리케이션은 로컬 시스템 하에서 SCM에 의해 기동된다.
일부 실시예들에서의 사용자 모드 로봇 서비스들은 Windows® 세션들을 관리 및 모니터링하고, 지휘자(120)와 실행 호스트들 사이의 프록시로서 작용한다. 사용자 모드 로봇 서비스들은 로봇들(130)을 위한 크리덴셜들로 신뢰될 수 있고, 로봇들(130)을 위한 크리덴셜들을 관리할 수 있다. Windows® 애플리케이션은 SCM-관리된 로봇 서비스가 설치되지 않을 경우에 자동적으로 기동될 수 있다.
실행자들은 Windows® 세션 하에서 주어진 잡(job)들을 작동시킬 수 있다(즉, 실행자들은 작업흐름들을 실행할 수 있음). 실행자들은 모니터-당(per-monitor) 인치 당 도트들(dots per inch; DPI) 설정들을 인지할 수 있다. 에이전트들은 시스템 트레이 윈도우(system tray window)에서 이용가능한 잡들을 디스플레이하는 Windows® 프리젠테이션 파운데이션(Windows® Presentation Foundation; WPF) 애플리케이션들일 수 있다. 에이전트들은 서비스의 클라이언트일 수 있다. 에이전트들은 잡들을 시작하거나 정지시키고 설정들을 변경하도록 요청할 수 있다. 커맨드 라인은 서비스의 클라이언트이다. 커맨드 라인은 잡들을 시작하도록 요청할 수 있고 그 출력을 대기하는 콘솔 애플리케이션(console application)이다.
위에서 설명된 바와 같이 분할된 로봇들(130)의 컴포넌트들을 가지는 것은 개발자들, 지원 사용자들, 및 컴퓨팅 시스템들이 각각의 컴포넌트가 실행하고 있는 것을 더 용이하게 작동시키고, 식별하고, 추적하는 것을 돕는다. 특수한 거동들은 실행자 및 서비스를 위한 상이한 방화벽 규칙(firewall rule)들을 셋업하는 것과 같이, 컴포넌트 당 이러한 방식으로 구성될 수 있다. 실행자는 일부 실시예들에서 모니터 당 DPI 설정들을 항상 인지할 수 있다. 그 결과, 작업흐름들은 작업흐름들이 생성된 컴퓨팅 시스템의 구성에 관계 없이, 임의의 DPI에서 실행될 수 있다. 설계자(110)로부터의 프로젝트들은 또한, 일부 실시예들에서 브라우저 줌 레벨(browser zoom level)에 독립적일 수 있다. DPI-비인지적(unaware)이거나 의도적으로 비인지적인 것으로서 표기되는 애플리케이션들에 대하여, DPI는 일부 실시예들에서 디스에이블될 수 있다.
도 2는 본 발명의 실시예에 따라, 전개된 RPA 시스템(200)을 예시하는 아키텍처 다이어그램이다. 일부 실시예들에서, RPA 시스템(200)은 도 1의 RPA 시스템(100)일 수 있거나 그 일부일 수 있다. 클라이언트 측, 서버 측, 또는 양자 모두는 발명의 범위로부터 이탈하지 않으면서, 임의의 희망된 수의 컴퓨팅 시스템들을 포함할 수 있다는 것이 주목되어야 한다. 클라이언트 측 상에서, 로봇 애플리케이션(210)은 실행자들(212), 에이전트(214), 및 설계자(216)를 포함한다. 그러나, 일부 실시예들에서, 설계자(216)는 컴퓨팅 시스템(210) 상에서 작동하고 있지 않을 수 있다. 실행자들(212)은 프로세스들을 작동시키고 있다. 몇몇 비지니스 프로젝트들은 도 2에서 도시된 바와 같이 동시에 작동할 수 있다. 에이전트(214)(예컨대, Windows® 서비스)는 이 실시예에서 모든 실행자들(212)을 위한 단일 접촉 포인트이다. 이 실시예에서의 모든 메시지들은 지휘자(230)로 로깅되고, 지휘자(230)는 데이터베이스 서버(240, 인덱서 서버(indexer server)(250), 또는 양자 모두를 통해 메시지들을 추가로 프로세싱한다. 도 1에 대하여 위에서 논의된 바와 같이, 실행자들(212)은 로봇 컴포넌트들일 수 있다.
일부 실시예들에서, 로봇은 머신 명칭과 사용자명(username) 사이의 연관성을 표현한다. 로봇은 다수의 실행자들을 동시에 관리할 수 있다. 동시에 작동하는 다수의 대화형 세션들을 지원하는 컴퓨팅 시스템들(예컨대, Windows® 서버 2012) 상에서, 다수의 로봇들은 각각 고유한 사용자명을 이용하는 별도의 Windows® 세션에서 동시에 작동하고 있을 수 있다. 이것은 위의 HD 로봇들로서 지칭된다.
에이전트(214)는 또한, 로봇의 스테이터스(status)를 전송하고(예컨대, 로봇이 여전히 기능하고 있다는 것을 표시하는 "하트비트(heartbeat)" 메시지를 주기적으로 전송함) 실행되어야 할 패키지의 요구된 버전을 다운로딩하는 것을 담당한다. 에이전트(214)와 지휘자(230) 사이의 통신은 일부 실시예들에서 에이전트(214)에 의해 항상 개시된다. 통지 시나리오에서, 에이전트(214)는 커맨드들을 로봇으로 전송하기 위하여(예컨대, 시작, 정지 등) 지휘자(230)에 의해 나중에 이용되는 웹소켓(WebSocket) 채널을 개방할 수 있다.
서버 측 상에서, 프리젠테이션 계층(웹 애플리케이션(232), 개방 데이터 프로토콜(Open Data Protocol; OData) 대표 상태 전송(Representative State Transfer; REST) 애플리케이션 프로그래밍 인터페이스(Application Programming Interface; API) 엔드포인트(endpoint)들(234), 및 통지 및 모니터링(236)), 서비스 계층(API 구현/비지니스 로직(238)), 및 지속 계층(persistence layer)(데이터베이스 서버(240) 및 인덱서 서버(250))이 포함된다. 지휘자(230)는 웹 애플리케이션(232), ODATA REST API 엔드포인트들(234), 통지 및 모니터링(236), 및 API 구현/비지니스 로직(238)을 포함한다. 일부 실시예들에서, 사용자가 (예컨대, 브라우저(220)를 통해) 지휘자(220)의 인터페이스에서 수행하는 대부분의 액션들은 다양한 API들을 호출함으로써 수행된다. 이러한 액션들은 발명의 범위로부터 이탈하지 않으면서, 로봇들 상에서 잡들을 시작하는 것, 큐들에서 데이터를 추가/제거하는 것, 무인으로 작동시키기 위한 잡들을 스케줄링하는 것 등을 포함할 수 있지만, 이것으로 제한되지는 않는다. 웹 애플리케이션(232)은 서버 플랫폼의 시각적 계층이다. 이 실시예에서, 웹 애플리케이션(232)은 하이퍼텍스트 마크업 언어(Hypertext Markup Language; HTML) 및 자바스크립트(JavaScript; JS)를 이용한다. 그러나, 임의의 희망된 마크업 언어들, 스크립트 언어(script language)들, 또는 임의의 다른 포맷들은 발명의 범위로부터 이탈하지 않으면서 이용될 수 있다. 사용자는 지휘자(230)를 제어하기 위한 다양한 액션들을 수행하기 위하여 이 실시예에서 브라우저(220)를 통해 웹 애플리케이션(232)으로부터의 웹 페이지들과 상호작용한다. 예를 들어, 사용자는 로봇 그룹들을 생성할 수 있고, 패키지들을 로봇들에 배정할 수 있고, 로봇 당 및/또는 프로세스 당 로그들을 분석할 수 있고, 로봇들을 시작 및 정지시킬 수 있는 등과 같다.
웹 애플리케이션(232)에 추가적으로, 지휘자(230)는 또한, OData REST API 엔드포인트들(234)을 노출시키는 서비스 계층을 포함한다. 그러나, 다른 엔드포인트들이 발명의 범위를 이탈하지 않으면서 포함될 수 있다. REST API는 양자의 웹 애플리케이션(232) 및 에이전트(214)에 의해 소비된다. 에이전트(214)는 이 실시예에서 클라이언트 컴퓨터 상의 하나 이상의 로봇들의 감독자이다.
이 실시예에서의 REST API는 구성, 로깅, 모니터링, 및 큐잉 기능성을 커버한다. 구성 엔드포인트들은 일부 실시예들에서 애플리케이션 사용자들, 허가들, 로봇들, 자산(asset)들, 배포(release)들, 및 환경들을 정의하고 구성하기 위하여 이용될 수 있다. 로깅 REST 엔드포인트들은 예를 들어, 에러들, 로봇들에 의해 전송된 명시적 메시지들, 및 다른 환경-특정 정보와 같은 상이한 정보를 로깅하기 위하여 이용될 수 있다. 전개 REST 엔드포인트들은 시작 잡 커맨드가 지휘자(230)에서 이용될 경우에 실행되어야 하는 패키지 버전을 질의하기 위하여 로봇들에 의해 이용될 수 있다. 큐잉 REST 엔드포인트들은 데이터를 큐에 추가하는 것, 큐로부터 트랜잭션(transaction)을 획득하는 것, 트랜잭션의 스테이터스를 설정하는 것 등과 같은, 큐들 및 큐 항목 관리를 담당할 수 있다.
모니터링 REST 엔드포인트들은 웹 애플리케이션(232) 및 에이전트(214)를 모니터링할 수 있다. 통지 및 모니터링 API(236)는, 에이전트(214)를 등록하고, 구성 설정들을 에이전트(214)로 전달하고, 서버 및 에이전트(214)로부터 통지들을 전송/수신하기 위하여 이용되는 REST 엔드포인트들일 수 있다. 통지 및 모니터링 API(236)는 또한, 일부 실시예들에서 웹소켓 통신을 이용할 수 있다.
지속 계층은 이 실시예에서 한 쌍의 서버들 - 데이터베이스 서버(240)(예컨대, SQL 서버) 및 인덱서 서버(250) - 을 포함한다. 이 실시예에서의 데이터베이스 서버(240)는 로봇들의 구성들, 로봇 그룹들, 연관된 프로세스들, 사용자들, 역할들, 스케줄들 등을 저장한다. 이 정보는 일부 실시예들에서 웹 애플리케이션(232)을 통해 관리된다. 데이터베이스 서버(240)는 큐들 및 큐 항목들을 관리할 수 있다. 일부 실시예들에서, 데이터베이스 서버(240)는 (인덱서 서버(250)에 추가적으로 또는 그 대신에) 로봇들에 의해 로깅된 메시지들을 저장할 수 있다.
일부 실시예들에서 임의적인 인덱서 서버(250)는 로봇들에 의해 로깅된 정보를 저장하고 인덱싱한다. 소정의 실시예들에서, 인덱서 서버(250)는 구성 설정들을 통해 디스에이블될 수 있다. 일부 실시예들에서, 인덱서 서버(250)는 개방 소스 프로젝트 전체-텍스트 검색 엔진(open source project full-text search engine)인 ElasticSearch®를 이용한다. (예컨대, 로그 메시지 또는 기록 라인과 같은 활동들을 이용하는) 로봇들에 의해 로깅된 메시지들은 로깅 REST 엔드포인트(들)를 통해 인덱서 서버(250)로 전송될 수 있고, 여기서, 메시지들은 미래의 사용을 위하여 인덱싱된다.
도 3은 본 발명의 실시예에 따라, 설계자(310), 활동들(320, 330), 및 구동기들(340) 사이의 관계(300)를 예시하는 아키텍처 다이어그램이다. 상기에 따라, 개발자는 로봇들에 의해 실행되는 작업흐름들을 개발하기 위하여 설계자(310)를 이용한다. 작업흐름들은 사용자-정의된 활동들(320) 및 UI 자동화 활동들(330)을 포함할 수 있다. 일부 실시예들은 이미지에서의 비-텍스트 시각적 컴포넌트들을 식별할 수 있고, 이것은 본원에서 컴퓨터 비전(CV)으로 칭해진다. 이러한 컴포넌트들에 속하는 일부 CV 활동들은 클릭(click), 타이핑(type), 텍스트 얻기(get text), 호버(hover), 엘리먼트 존재, 범위 리프레시(refresh scope), 강조표시 등을 포함할 수 있지만, 이것으로 제한되지는 않는다. 일부 실시예들에서의 클릭은 예를 들어, CV, 광학적 문자 인식(OCR), 퍼지 텍스트 매칭(fuzzy text matching), 및 멀티-앵커(multi-anchor)를 이용하여 엘리먼트를 식별하고, 그것을 클릭한다. 타이핑은 상기한 것을 이용하여 엘리먼트를 식별할 수 있고, 엘리먼트에서 타이핑한다. 텍스트 얻기는 특정 텍스트의 위치를 식별할 수 있고, OCR을 이용하여 그 텍스를 스캔할 수 있다. 호버는 엘리먼트를 식별할 수 있고, 엘리먼트 상에서 호버링할 수 있다. 엘리먼트 존재는 위에서 설명된 기법들을 이용하여 스크린 상에 엘리먼트가 존재하는지 여부를 체크할 수 있다. 일부 실시예들에서는, 설계자(310) 내에 구현될 수 있는 수백 또는 심지어 수천 개의 활동들이 있을 수 있다. 그러나, 임의의 수 및/또는 유형의 활동들은 발명의 범위로부터 이탈하지 않으면서 이용가능할 수 있다.
UI 자동화 활동들(330)은, 더 낮은 레벨의 코드로 기록되는 특수한 더 낮은 레벨의 활동들(예컨대, CV 활동들)의 서브세트(subset)이고, 스크린과의 상호작용들을 용이하게 한다. UI 자동화 활동들(330)은 로봇이 희망된 소프트웨어와 상호작용하는 것을 허용하는 구동기들(340)을 통해 이 상호작용들을 용이하게 한다. 예를 들어, 구동기들(340)은 OS 구동기들(342), 브라우저 구동기들(344), VM 구동기들(346), 기업 애플리케이션 구동기들(348) 등을 포함할 수 있다.
구동기들(340)은 후크들을 검색하고, 키들에 대해 모니터링하는 등의 낮은 레벨에서 OS와 상호작용할 수 있다. 구동기들은 Chrome®, IE®, Citrix®, SAP® 등과의 상호작용을 용이하게 할 수 있다. 예를 들어, "클릭" 활동은 구동기들(340)을 통해 이 상이한 애플리케이션들에서 동일한 역할을 수행한다.
도 4는 본 발명의 실시예에 따라, RPA 시스템(400)을 예시하는 아키텍처 다이어그램이다. 일부 실시예들에서, RPA 시스템(400)은 도 1 및/또는 도 2의 RPA 시스템들(100 및/또는 200)일 수 있거나 이들을 포함할 수 있다. RPA 시스템(400)은 로봇들을 작동시키는 다수의 클라이언트 컴퓨팅 시스템들(410)을 포함한다. 컴퓨팅 시스템들(410)은 그 상에서 작동하는 웹 애플리케이션을 통해 지휘자 컴퓨팅 시스템(420)과 통신할 수 있다. 지휘자 컴퓨팅 시스템(420)은 궁극적으로, 데이터베이스 서버(430) 및 임의적인 인덱서 서버(440)와 통신할 수 있다.
도 1 및 도 3에 대하여, 웹 애플리케이션이 이 실시예들에서 이용되지만, 임의의 적당한 클라이언트/서버 소프트웨어는 발명의 범위로부터 이탈하지 않으면서 이용될 수 있다는 것이 주목되어야 한다. 예를 들어, 지휘자는 클라이언트 컴퓨팅 시스템들 상에서 비-웹-기반(non-web-based) 클라이언트 소프트웨어 애플리케이션들과 통신하는 서버-측 애플리케이션을 작동시킬 수 있다.
도 5는 본 발명의 실시예에 따라, 타이핑된 및/또는 페이스팅된 텍스트의 검출, 캐럿 추적, 및 활성 엘리먼트 검출을 수행하도록 구성된 컴퓨팅 시스템(500)을 예시하는 아키텍처 다이어그램이다. 일부 실시예들에서, 컴퓨팅 시스템(500)은 본원에서 도시되고 및/또는 설명된 컴퓨팅 시스템들 중의 하나 이상일 수 있다. 컴퓨팅 시스템(500)은 정보를 통신하기 위한 버스(505) 또는 다른 통신 메커니즘, 및 정보를 프로세싱하기 위하여 버스(505)에 결합된 프로세서(들)(510)를 포함한다. 프로세서(들)(510)는 중앙 프로세싱 유닛(Central Processing Unit; CPU), 애플리케이션 특정 집적 회로(Application Specific Integrated Circuit; ASIC), 필드 프로그래밍가능 게이트 어레이(Field Programmable Gate Array; FPGA), 그래픽 프로세싱 유닛(Graphics Processing Unit; GPU), 그 다수의 인스턴스들, 및/또는 그 임의의 조합을 포함하는 임의의 유형의 일반 또는 특정 목적 프로세서일 수 있다. 프로세서(들)(510)는 또한, 다수의 프로세싱 코어들을 가질 수 있고, 코어들의 적어도 일부는 특정 기능들을 수행하도록 구성될 수 있다. 멀티-병렬(multi-parallel) 프로세싱은 일부 실시예들에서 이용될 수 있다. 소정의 실시예들에서, 프로세서(들)(510) 중의 적어도 하나는 생물학적 뉴런(neuron)들을 모방하는 프로세싱 엘리먼트들을 포함하는 뉴로모픽 회로(neuromorphic circuit)일 수 있다. 일부 실시예들에서, 뉴로모픽 회로들은 폰 노이만(Von Neumann) 컴퓨팅 아키텍처의 전형적인 컴포넌트들을 요구하지 않을 수 있다.
컴퓨팅 시스템(500)은 프로세서(들)(510)에 의해 실행되어야 할 명령어들 및 정보를 저장하기 위한 메모리(515)를 더 포함한다. 메모리(515)는 랜덤 액세스 메모리(Random Access Memory; RAM), 판독 전용 메모리(Read Only Memory; ROM), 플래시 메모리, 캐시, 자기적 또는 광학 디스크와 같은 정적 스토리지, 또는 임의의 다른 유형들의 비-일시적 컴퓨터-판독가능 매체들의 임의의 조합 또는 그 조합들로 이루어질 수 있다. 비-일시적 컴퓨터-판독가능 매체들은 프로세서(들)(510)에 의해 액세스될 수 있고 휘발성 매체들, 비-휘발성 매체들, 또는 양자 모두를 포함할 수 있는 임의의 이용가능한 매체들일 수 있다. 매체들은 또한, 분리가능, 비-분리가능, 또는 양자 모두일 수 있다.
추가적으로, 컴퓨팅 시스템(500)은 무선 및/또는 유선 접속을 통해 통신 네트워크에 대한 액세스를 제공하기 위한, 트랜시버(transceiver)와 같은 통신 디바이스(520)를 포함한다. 일부 실시예들에서, 통신 디바이스(520)는 발명의 범위로부터 이탈하지 않으면서, 주파수 분할 다중 액세스(Frequency Division Multiple Access; FDMA), 단일 캐리어 FDMA(Single Carrier FDMA; SC-FDMA), 시간 분할 다중 액세스(Time Division Multiple Access; TDMA), 코드 분할 다중 액세스(Code Division Multiple Access; CDMA), 직교 주파수 분할 멀티플렉싱(Orthogonal Frequency Division Multiplexing; OFDM), 직교 주파수 분할 다중 액세스(Orthogonal Frequency Division Multiple Access; OFDMA), 이동 통신들을 위한 글로벌 시스템(Global System for Mobile communications; GSM), 범용 패킷 라디오 서비스(General Packet Radio Service; GPRS), 유니버셜 이동 전기통신 시스템(Universal Mobile Telecommunications System; UMTS), cdma2000, 광대역 CDMA(Wideband CDMA; W-CDMA), 고속 다운링크 패킷 액세스(High-Speed Downlink Packet Access; HSDPA), 고속 업링크 패킷 액세스(High-Speed Uplink Packet Access; HSUPA), 고속 패킷 액세스(High-Speed Packet Access; HSPA), 롱텀 에볼루션(Long Term Evolution; LTE), LTE 어드밴스드(LTE Advanced; LTE-A), 802.11x, Wi-Fi, 지그비(Zigbee), 초광대역(Ultra-WideBand; UWB), 802.16x, 802.15, 홈 노드-B(Home Node-B; HnB), 블루투스(Bluetooth), 라디오 주파수 식별(Radio Frequency Identification; RFID), 적외선 데이터 연계(Infrared Data Association; IrDA), 근접장 통신(Near-Field Communications; NFC), 제5 세대(fifth generation; 5G), 뉴 라디오(New Radio; NR), 그 임의의 조합, 및/또는 임의의 다른 현재 현존하거나 미래-구현된 통신 표준 및/또는 프로토콜을 이용하도록 구성될 수 있다. 일부 실시예들에서, 통신 디바이스(520)는 발명의 범위로부터 이탈하지 않으면서, 단일체, 어레이(array)되고, 페이징(phase)되고, 스위칭되고, 빔포밍(beamforming), 빔조향(beamsteering), 그 조합, 및/또는 임의의 다른 안테나 구성인 하나 이상의 안테나들을 포함할 수 있다.
프로세서(들)(510)는 플라즈마 디스플레이, 액정 디스플레이(Liquid Crystal Display; LCD), 발광 다이오드(Light Emitting Diode; LED) 디스플레이, 필드 방출 디스플레이(Field Emission Display; FED), 유기 발광 다이오드(Organic Light Emitting Diode; OLED) 디스플레이, 플렉시블 OLED 디스플레이, 플렉시블 기판 디스플레이, 투사 디스플레이(projection display), 4K 디스플레이, 고해상도 디스플레이(high definition display), Retina® 디스플레이, 평면내 스위칭(In-Plane Switching; IPS) 디스플레이, 또는 정보를 사용자에게 디스플레이하기 위한 임의의 다른 적당한 디스플레이와 같은 디스플레이(525)에 버스(505)를 통해 추가로 결합된다. 디스플레이(525)는 저항성, 용량성, 표면-음향파(surface-acoustic wave; SAW) 용량성, 적외선, 광학적 이미징, 분산 신호 기술, 음향 펄스 인식, 전반사 장애(frustrated total internal reflection) 등을 이용하여 터치(햅틱(haptic)) 디스플레이, 3 차원(3D) 터치 디스플레이, 멀티-입력 터치 디스플레이, 멀티-터치 디스플레이 등으로서 구성될 수 있다. 임의의 적당한 디스플레이 디바이스 및 햅틱 I/O는 발명의 범위로부터 이탈하지 않으면서 이용될 수 있다.
키보드(530) 및, 컴퓨터 마우스, 터치패드 등과 같은 커서 제어 디바이스(535)는 사용자가 컴퓨팅 시스템(500)과 인터페이싱하는 것을 가능하게 하기 위하여 버스(505)에 추가로 결합된다. 그러나, 소정의 실시예들에서, 물리적 키보드 및 마우스는 존재하지 않을 수 있고, 사용자는 전적으로 디스플레이(525) 및/또는 터치패드(도시되지 않음)를 통해 디바이스와 상호작용할 수 있다. 입력 디바이스들의 임의의 유형 및 조합은 설계 선택의 문제로서 이용될 수 있다. 소정의 실시예들에서, 물리적 입력 디바이스 및/또는 디스플레이는 존재하지 않는다. 예를 들어, 사용자는 그 통신하는 또 다른 컴퓨팅 시스템을 통해 원격으로 컴퓨팅 시스템(500)과 상호작용할 수 있거나, 컴퓨팅 시스템(500)은 자율적으로 동작할 수 있다.
메모리(515)는 프로세서(들)(510)에 의해 실행될 때에 기능성을 제공하는 소프트웨어 모듈들을 저장한다. 모듈들은 컴퓨팅 시스템(500)을 위한 오퍼레이팅 시스템(540)을 포함한다. 모듈들은 본원에서 설명된 프로세스들의 전부 또는 일부 또는 그 파생부들을 수행하도록 구성되는 비디오 프로세싱 모듈(545)을 더 포함한다. 컴퓨팅 시스템(500)은 추가적인 기능성을 포함하는 하나 이상의 추가적인 기능적 모듈들(550)을 포함할 수 있다.
당해 분야의 당업자는 발명의 범위로부터 이탈하지 않으면서, "시스템"이 서버, 내장된 컴퓨팅 시스템, 개인용 컴퓨터, 콘솔, 개인 정보 단말(personal digital assistant; PDA), 셀 전화, 태블릿 컴퓨팅 디바이스, 퀀텀(quantum) 컴퓨팅 시스템, 또는 임의의 다른 적당한 컴퓨팅 디바이스, 또는 디바이스들의 조합으로서 구체화될 수 있다는 것을 인식할 것이다. 위에서 설명된 기능들을 "시스템"에 의해 수행되는 것으로서 제시하는 것은 본 발명의 범위를 임의의 방식으로 제한하도록 의도된 것이 아니라, 본 발명의 많은 실시예들 중의 하나의 예를 제공하도록 의도된다. 실제로, 본원에서 개시된 방법들, 시스템들, 및 장치들은 클라우드 컴퓨팅 시스템들을 포함하는 컴퓨팅 기술과 부합하는 국소화된 및 분산된 형태들로 구현될 수 있다.
이 명세서에서 설명된 시스템 특징들의 일부는 그 구현 독립성을 더 상세하게 강조하기 위하여 모듈들로서 제시되었다는 것이 주목되어야 한다. 예를 들어, 모듈은 맞춤형 초고밀도 집적(very large scale integration; VLSI) 회로들 또는 게이트 어레이들, 로직 칩들과 같은 기성품(off-the-shelf) 반도체들, 트랜지스터들, 또는 다른 개별 컴포넌트들을 포함하는 하드웨어 회로로서 구현될 수 있다. 모듈은 또한, 필드 프로그래밍가능 게이트 어레이들, 프로그래밍가능 어레이 로직, 프로그래밍가능 로직 디바이스들, 그래픽 프로세싱 유닛들 등과 같은 프로그래밍가능 하드웨어 디바이스들로 구현될 수 있다.
모듈은 또한, 다양한 유형들의 프로세서들에 의한 실행을 위하여 소프트웨어로 적어도 부분적으로 구현될 수 있다. 예를 들어, 실행가능 코드의 식별된 유닛은, 예를 들어, 오브젝트(object), 프로시저(procedure), 또는 함수(function)로서 조직화(organize)될 수 있는 컴퓨터 명령어들의 하나 이상의 물리적 또는 논리적 블록들을 포함할 수 있다. 그럼에도 불구하고, 식별된 모듈의 익스큐터블(executable)들은 함께 물리적으로 위치될 필요가 없지만, 함께 논리적으로 병합될 때, 모듈을 포함하고 모듈을 위한 기재된 목적을 달성하는 상이한 위치들에서 저장된 이질적인 명령어들을 포함할 수 있다. 또한, 모듈들은 예를 들어, 발명의 범위로부터 이탈하지 않으면서, 하드 디스크 드라이브, 플래시 디바이스, RAM, 테이프, 및/또는 데이터를 저장하기 위하여 이용된 임의의 다른 이러한 비-일시적 컴퓨터-판독가능 매체일 수 있는 컴퓨터-판독가능 매체 상에서 저장될 수 있다.
실제로, 실행가능 코드의 모듈은 단일 명령어 또는 다수의 명령어들일 수 있고, 몇몇 상이한 코드 세그먼트들 상에서, 상이한 프로그램 사이에서, 그리고 몇몇 메모리 디바이스들에 걸쳐 심지어 분산될 수 있다. 유사하게, 동작 데이터는 모듈들 내에서 본원에서 식별 및 예시될 수 있고, 임의의 적당한 형태로 구체화될 수 있고, 임의의 적당한 유형의 데이터 구조 내에서 조직화될 수 있다. 동작 데이터는 단일 데이터 세트로서 수집될 수 있거나, 상이한 저장 디바이스들 상부를 포함하는 상이한 위치들 상에서 분산될 수 있고, 적어도 부분적으로, 시스템 또는 네트워크 상의 단지 전자 신호들로서 존재할 수 있다.
도 6은 본 발명의 실시예에 따라, 타이핑된 텍스트 검출, 캐럿 추적, 및 활성 엘리먼트 검출을 수행하기 위한 일반적인 프로세스(600)를 예시하는 아키텍처 다이어그램이다. 키보드 레코딩(610) 및 스크린 비디오 레코딩(620)은 각각 눌러진 키들, 및 그래픽 변경들이 발생한 스크린 상의 위치(들)를 결정하기 위하여 수행된다. 일부 실시예들에서는, 텍스트의 페이스팅이 모니터링될 수 있다. 예를 들어, 도 13a 및 도 13b를 참조한다. 키보드 레코딩(610)은 오퍼레이팅 시스템으로부터의 키 누름 이벤트들을 모니터링함으로써 수행될 수 있다. 예를 들어, Windows®에서, 이것은 user32.dll 방법 "SetWindowsHookEx"을 통해 낮은 레벨 키보드 후크(WH_KEYBOARD_LL = 13)를 등록함으로써 이전에 정의된 낮은 레벨 후킹 델리게이트(hooking delegate)일 수 있다. 그러나, 임의의 프로그래밍 언어 및 임의의 오퍼레이팅 시스템(예컨대, 이동기기, PC, Mac 등)을 위한 키 누름 정보를 제공하는 임의의 키 누름 이벤트 또는 기능성은 발명의 범위로부터 이탈하지 않으면서 이용될 수 있다. 일부 실시예들에서, 키 누름들은 하드웨어를 통해 검출될 수 있다. 예를 들어, 유니버셜 직렬 버스(universal serial bus; USB) 디바이스는 컴퓨팅 시스템과 외부 키보드 사이에서 배치될 수 있다. 추가적으로 또는 대안적으로, 비디오 캡처 및 프로세싱은 소정의 실시예들에서 하드웨어를 통해 수행될 수 있다. 이러한 실시예들에서, 제1 디바이스는 비디오를 캡처할 수 있고, 제2 디바이스는 키 누름들을 캡처할 수 있고, 제3 디바이스(예컨대, 컴퓨팅 시스템)는 비디오 및 키 누름들을 프로세싱할 수 있다.
키 누름 이벤트는 어느 문자가 눌러진 키(예컨대, 글자 "a", 숫자 "2", "%" 부호 등)와 연관되는지, 키 누름 이벤트가 발생한 시간 등에 관한 정보를 포함할 수 있다. 키 문자들의 큐(예컨대, 선입-선출(first in - first out; FIFO) 큐)는 키가 눌러졌을 때와 대응하는 문자가 스크린 상에서 나타날 때 사이의 지연들을 참작하기 위하여 시간 윈도우(예컨대, 500 밀리초(milliseconds; ms), 1 초 등)에 대하여 저장될 수 있다. 시간 윈도우는 사용자가 키를 누를 때와 키가 스크린 상에 나타날 때 사이의 전형적인 시간 지연(예컨대, 50 ms 문자 발생 지연 및 500 ms 버퍼 윈도우)보다 통상적으로 더 길다.
큐는 또한, 스크린 상에서 모두 한 번에 나타나는 다수의 문자들을 캡처하는 목적을 서빙(serve)할 수 있다. 예를 들어, 사용자가 매우 급속하게 연속으로(예컨대, 15 ms 내에) "abc"를 누르지만, 초 당 오직 25 개의 프레임들이 캡처될(즉, 매 40 ms에 하나의 프레임) 경우에, 텍스트 "abc"는 다음 스크린샷에서 모두 한 번에 나타날 수 있다. 큐에서 "a", "b", 및 "c"를 가짐으로써, 텍스트 인식이 이 문자들 및/또는 시퀀스들을 발견할 때, 알고리즘은 이 문자들 및/또는 그 시퀀스들의 각각에 대하여 검색할 수 있다. 예를 들어, 일부 실시예들에서, 사용자 타이핑들 "abc" 및 "ab"가 다음 프레임에서 나타날 경우에, 키 누름 큐에서의 순서는 스크린 상에서 나타나는 것과 동일하다는 것이 간주될 수 있다.
스크린 비디오 레코딩(620)은 발명의 범위로부터 이탈하지 않으면서, 임의의 적당한 하드웨어, 소프트웨어, 또는 그 임의의 조합에 의해 수행될 수 있다. 예를 들어, 비디오 레코딩은 외부 비디오 카메라, 내부 그래픽 카드, (접속된 컴퓨팅 시스템을 통한 또는 이를 통하지 않는) 디스플레이로부터의 비디오 스트림을 모니터링하는 원격 컴퓨팅 시스템 등에 의해 수행될 수 있다. 레코딩된 스크린샷들은 픽셀이 완벽하든지 또는 그렇지 않든지 간에 임의의 희망된 포맷으로 저장될 수 있다(예컨대, JPEG, BMP, PNG 등).
하나의 구현예에서, 스크린샷들은 Format16bppRgb555 포맷인 16-비트 컬러 심도(color depth)로 BitmapData로서 저장된다. 하나 이상의 픽셀들에서의 변경들은 일부 포맷들로 전체 이미지로 전파되는 컬러 맵을 변경시킬 수 있거나, 컬러 심도에 영향을 줄 수 있거나, 전체적인 세부사항을 감소/시프팅(shift)할 수 있거나, (예컨대, JPEG 포맷에서의) 압축 아티팩트(artifact)들의 존재에 의해 이미지 픽셀들에 영향을 줄 수 있으므로, 스크린샷들을 손실 포맷으로 압축하는 것은 정확성을 감소시킬 수 있다. 이것을 수용하기 위하여, 공차(tolerance)들이 이용될 수 있다. 스크린 비디오 레코딩(620)은 컴퓨팅 시스템의 현재의 프로세싱 부하에 따라 변동될 수 있는 어떤 프레임 레이트로 프레임들을 생성한다(예컨대, 초 당 30 프레임들).
현재의 스크린샷 프레임 및 직전의 프레임이 그 다음으로, 그 사이의 차이들 및 그 안의 문자들을 결정하기 위하여 서로 비교되는 것은 630에서 결정된다. 그러나, 소정의 실시예들에서, 다수의 프레임들은 정확성을 추가로 증가시키기 위하여 이용될 수 있다. 예를 들어, 문자가 타이핑될 때와 문자가 스크린 상에서 나타날 때 사이의 변동되는 비동기화(desynchronization)(예컨대, 30 ms로부터 42 ms로, 24 ms로 등으로 변동됨)가 있을 경우에, 다수의 프레임들을 이용하는 것은 타이핑된 텍스트를 식별하는 것을 보조할 수 있다. 이것은 OCR이 하나 또는 약간의 문자들이 아니라 전체 워드를 포함할 수 있는 더 폭넓은 추출된 영역에 적용되는 것을 허용할 수 있다. 일부 OCR 엔진들은 문자들이 아니라 워드들을 인식하기 위하여 더 양호하게 조율된다. 자동정정(autocorrection)을 OCR 결과에 적용함으로써, OCR을 개별적인 문자들에 적용할 때에 발생할 수 있는 부정확성들만이 오직 제거될 수 있다. 예를 들어, 자동정정 알고리즘은 OCR 워드 "slpck"가 키보드 큐에서 발견되는 "slack"이어야 하는 것으로 결정할 수 있다.
시각적 변경들의 위치(들)는 그 다음으로 격리될 수 있고, 알고리즘은 문자들을 인식하기 위하여 변경이 발생한 위치 상에서 작동된다. 이 알고리즘은 OCR, 어떤 폰트들인 문자들의 불리언 어레이 맵(Boolean array map)들에 대한 픽셀 영역 비교들 등을 이용할 수 있다. 일부 실시예들에서, 문자 인식은 발생한 변경들이 격리되고 분석되는 상대적으로 작은 영역들 상에서 오직 작동되고, 나머지 영역들은 폐기된다. 이것은 알고리즘이 전체 스크린(예컨대, 3840x2160 픽셀 해상도) 상에서 OCR을 작동시키는 것이 컴퓨팅 시스템이 문자들이 스크린 상에서 나타나는 속도를 따라잡기 위해 너무 연산적으로 고가일 수 있는 컴퓨팅 시스템들 상에서 실시간으로 작동할 수 있다는 것을 보장하는 것을 돕는다. 그러나, 충분한 프로세싱 파워를 가지는 컴퓨팅 시스템들을 위하여, 전체 스크린은 변경이 먼저 발생하지 않은 영역들을 파싱 아웃(parse out) 하지 않으면서 분석될 수 있다.
상기에 따라, 소정의 실시예들에서는, 픽셀이 완벽한 것이 아니라, 비디오 프레임 비교 연산들이 공차를 이용한다. 컬러 강도(color intensity)들, 밝기(brightness), 및/또는 다른 인자들은 이들이 어떤 공차 내에 속할 경우에 동일하게 고려될 수 있다. 예를 들어, 픽셀들은 그 값들 중의 하나 이상에서의 변경들이 어떤 수, 어떤 백분율 등보다 더 작을 경우에 동일한 것으로 고려될 수 있다. 5 미만, 1 % 미만 등만큼의 적색, 녹색, 청색, 및 밝기에서의 변경은 동일한 것으로 고려될 수 있다. 소정의 실시예들에서, 이 변수들 중의 하나 이상은 상이한 공차들을 가질 수 있다. 예를 들어, 아마도 밝기 변경들은 진정한 픽셀 변경들을 표시하기 위하여 컬러 변경들보다 더 크거나 더 작을 필요가 있을 수 있다. 퍼지 이미지 매칭은 유사성들/차이들을 식별하기 위하여 소정의 실시예들에서 수행될 수 있다.
일부 실시예들에서, 퍼지 이미지 매칭은 매칭들을 더 정확하게 식별하기 위하여 밝기, 이미지 템플릿(image template)들, 에지 비교(edge comparison)들, 2진화(binarization), 다운스케일 및 비트 감소, 팽창(dilation), 커널 블러링(kernel blurring) 적용, 그 조합 등을 참작한다. 공차를 RGB 값들에 적용하는 픽셀-대-픽셀(pixel-to-pixel) RGB 매칭은 정확하게 동일하지는 않은 근접한 값들이 매칭들로서 식별될 수 있도록 이용될 수 있다. 비트 심도 및/또는 컬러 스케일(color scale)은 감소될 수 있고, 픽셀-대-픽셀 RGB 또는 그레이스케일 매칭이 적용될 수 있다. 이미지들로부터의 에지들은 검출될 수 있고 비교될 수 있다. 2진화는 이미지들에 적용될 수 있고(예컨대, 2진 임계치, 오츠(Otsu) 임계치, 적응적 임계치 등), 픽셀-대-픽셀 매칭은 2진 이미지들에 대해 적용될 수 있다. 이미지들의 스케일(scale)은 감소될 수 있고, 픽셀-대-픽셀 매칭이 수행될 수 있다. 이미지들의 팽창이 수행될 수 있고, 픽셀-대-픽셀 매칭이 그 다음으로 적용될 수 있다. 키 포인트(key point)들은 이미지들(예컨대, 최대 안정적 극단 영역(maximally stable extremal region; MSER) 디스크립터(descriptor)들)로부터 추출될 수 있고, 추출된 키 포인트들은 특징 매칭기(feature matcher)들(예컨대, 브루트 포스 매칭(brute force matching), k-최근접 이웃들(k-nearest neighbors; kNN) 매칭 등)을 이용하여 비교될 수 있다.
공차-기반 연산들이 유익할 수 있다는 다양한 이유들이 있다. 예를 들어, 이미지가 프레임이 캡처된 후에 압축될 경우에, 손실 압축이 픽셀 값들에 영향을 줄 수 있으므로, 공차는 연산들에 관여되어야 한다. 또한, 원래의 시각적 소스(visual source)는 (예컨대, 가상적 컴퓨팅 시스템이 에뮬레이터(emulator)를 통해 기동되고 에뮬레이터가 가상적 컴퓨터 스크린 컨텐츠를 압축할 때) 손실 압축을 이용하여 캡처 전에 압축될 수 있다. 이것은 이미지들이 원격 머신(예컨대, 서버)로부터 로컬 컴퓨팅 시스템으로 브로드캐스팅되기 때문에 발생할 수 있다.
일단 변경들이 발생한 스크린 영역(들)의 문자들이 630에서 식별되면, 문자들은 키 누름 이벤트들과 대응하는 저장된 문자들의 큐에 대하여 비교된다. 매칭이 발견될 경우에, 매칭 위치의 스크린 좌표들이 640에서 추출된다. 그러나, 일부 경우들에는, 문자 인식 알고리즘은 문자가 실제적으로 존재하는 것에 대하여 스크린 상에서 문자를 인식하는 것에 실패할 수 있다. 예를 들어, OCR 알고리즘은 스크린 상의 글자 "O"를 숫자 "0"으로서 인식할 수 있다. 그 경우에, 일부 실시예들에서는, 알고리즘이 스크린 상에서 캐럿의 위치를 추적한다. 이것은 이미지 검출(예컨대, CV) 등을 이용하여 다양한 캐럿 형상들의 이미지 패턴들을 스크린과 비교함으로써 결정될 수 있다. 일부 실시예들에서, 알고리즘이 그렇게 행할 경우에, 알고리즘은 캐럿 점멸을 참작할 수 있다.
소정의 실시예들에서, 퍼지 매칭(fuzzy matching)은 OCR 결과들을 큐에서의 문자들과 비교하기 위하여 이용될 수 있다. 퍼지 매칭 로직은 글자 "O"가 숫자 "0"과 유사하게 보인다는 것을 인식할 수 있고, 이 문자들을 매칭으로서 식별할 수 있다. 큐에서 다른 유사한 문자들이 없을 경우에, 매칭이 확인될 수 있다.
소정의 실시예들에서는, 캐럿 추적이 수행된다. 이미지의 변경된 영역(들)의 분석은 캐럿에 대응할 수 있는 후보들의 리스트를 생성하기 위하여 수행될 수 있다(예컨대, 후보들은 얇은 수직 라인 또는 유사한 어떤 것으로서 보임). 유효성확인은 후보가 시간 경과에 따라 점멸하고 있다는 것을 식별하기 위하여 수행될 수 있고, 진정한 캐럿이 그 다음으로 식별될 수 있다. 추가의 유효성확인은 캐럿이 텍스트 기입이 가능한 그래픽 엘리먼트(예컨대, 텍스트 박스, 워드 프로세서 문서, 텍스트 필드 등) 내에서 나타난다는 것을 검증하기 위하여 수행될 수 있다.
스크린 상의 어디에서도 변경들이 발생하지 않았거나, 누락되고 있는 것 외에, 다른 변경들이 큐에서의 문자들과 매칭될 경우에, 알고리즘은 그 다음으로, 이것은 오직 미식별된 변경이기 때문에, 이 변경은 누락 문자이어야 한다는 것을 추론할 수 있다. 알고리즘은 그 다음으로, 인식된 글자 "O"가 실제적으로, 예를 들어, 문자 큐에서의 이와 다르게 미식별된 "0"인 것을 추론할 수 있고, 640에서, 매칭 위치의 스크린 좌표들을 추출할 수 있다. 이것은 알고리즘의 정확성을 개선시킬 수 있다.
일부 실시예들에서, 문자들 또는 문자 시퀀스가 스크린 상에서 발견되고 고유하게 식별될 때, 미리 결정된 시간이 경과한 후(예컨대, 500 ms, 1 초 등), 미리 결정된 크기(예컨대, 20 문자들)의 큐에 기초한 큐의 종료부에서의 문자들의 팝오프(pop off) 등일 때, 문자들은 큐로부터 제거될 수 있다. 시간 윈도우의 외부에 속하는 문자들을 제거하기 위하여, 큐는 타이핑된 문자 및 시간 스탬프(time stamp)를 가지는 변수들을 저장할 수 있다. 알고리즘은 (잠재적으로 "선입(first in) 종료부로 시작하는) 큐에서의 키 누름 변수들의 시간 스탬프들을 현재의 시간과 주기적으로 비교할 수 있다. 키 누름 변수가 시간 윈도우보다 더 오래된 큐에서 발견될 경우에, 변수는 제거될 수 있다. 소정의 실시예들에서, 일단 시간 윈도우 내에 속하는 키 누름 변수가 발견되면, 큐에서의 모든 다른 변수들이 시간 윈도우 내에 있는 것으로 가정될 수 있고, 프로세싱은 그 반복을 위하여 정지될 수 있다.
최근에 타이핑된 문자들을 갖는 스크린 영역의 좌표들이 640에서 추출된 후에, 좌표들은 작동하는 애플리케이션(들)과 비교되고, 활성 엘리먼트는 650에서, 추출된 좌표들이 어느 엘리먼트 아래에 속하는지에 기초하여 결정된다. 활성 엘리먼트는 그 다음으로, 660에서, 사용자가 수행하고 있는 프로세스들을 학습하기 위한 개별적인 사용자 활동들(예컨대, 프로세스 추출, 프로세스 전달 등)을 재구성하기 위하여 이용될 수 있다. 이것은 사용자가 컴퓨팅 시스템과 상호작용하고 있을 때에 실시간으로 추출될 수 있거나 나중에 수행될 수 있다(예컨대, 비디오 및 키스트로크(keystroke)들은 서버에 의해 추후에 분석될 수 있음). 일부 실시간 실시예들에서, 프레임 차이들은 현장에서(on the fly) 계산될 수 있으므로, 비디오 데이터는 레코딩되고 저장되지 않을 수 있다.
일부 실시예들에서, 비디오 레코딩, 키보드 기입 레코딩, 및/또는 그 프로세싱은 RPA 로봇에 의해 수행된다. 소정의 실시예들에서, 레코더 애플리케이션은 사용자 활동을 스크린샷들 또는 비디오 및 일련의 키 누름들로서 레코딩하고, 이것을 나중의 프로세싱을 위하여 저장하거나, 이 정보를 실시간 또는 실시간 근접 프로세싱을 위하여 컴퓨팅 시스템 또는 또 다른 컴퓨팅 시스템 상에서 작동하는 또 다른 애플리케이션으로 전달한다. 그 경계설정 직사각형(bounding rectangle)들을 포함하는 인식된 그래픽 엘리먼트들의 세트(set)를 제공하기 위하여, CV는 비디오 및 키 누름들의 프로세싱 직후에 적용될 수 있거나 나중에 적용될 수 있다. 그 다음으로, 교차점이 그래픽 엘리먼트 경계설정 직사각형과 캐럿/텍스트의 좌표들 사이에서 발견될 경우에, 특정한 엘리먼트는 현재 활성이거나, "포커싱된(focused)" 것이다.
일부 경우들에는, 하나의 프레임으로부터 다음의 것으로 스크린에 대한 변경들이 상당할 수 있다. 예를 들어, 사용자가 윈도우를 폐쇄할 때, 스크린의 대부분은 변경될 수 있다. 그러므로, 일부 실시예들에서, 변경 임계치가 결정되고, 시간-인접한 스크린샷들을 적어도 비교할 것인지 여부(예컨대, 스크린의 2 % 초과 변경, 5 %, 10 %, 30 %, 50 %, 70 % 초과 등)를 결정하기 위하여 적용된다. 이 임계치가 충족되거나 초과될 때, 프레임 비교 프로세스는 2 개의 시간-인접한 프레임들 사이의 차이가 임계치 미만으로 될 때까지 스킵(skip)될 수 있다.
도 7은 본 발명의 실시예에 따라, 타이핑된 텍스트 검출 및 캐럿 추적을 수행하기 위한 프로세스(700)를 예시하는 아키텍처 다이어그램이다. 스크린 비디오 레코딩(710)은 비디오 프레임들 N(712), N-1(714), N-2(716), 및 N-3(718)을 생성하기 위하여 수행된다. 비디오 프레임들은 전체 스크린, 작동하는 애플리케이션과 연관된 윈도우 등일 수 있다. 소정의 실시예들에서는, 다수의 작동하는 윈도우잉된 애플리케이션(windowed application)들을 위한 프레임 세트들이 저장 및 비교될 수 있거나, 이 프레임들은 스크린샷들로부터 빼내어질 수 있다. 키보드 후킹(720)은 또한, 키 누름들과 연관된 문자들(732)을 포함하는 시간 윈도우잉된 키보드 문자 큐(730)를 생성하기 위하여 수행된다. 일부 실시예들에서는, 문자들과 연관된 키 누름이 미리 결정된 시기를 초과할 때, 문자들은 문자 큐로부터 제거된다. 소정의 실시예들에서, 문자들이 고유한 경우에 스크린 상에서 발견된 후에, 문자들은 큐로부터 제거된다. 그러나, 고유하지 않을 경우에(예컨대, 사용자가 급속하게 연속으로 "a a a a a"를 누름), "a"의 가장 오래된 인스턴스는 큐로부터 제거될 수 있다.
코어 로직(740)은 현재의 프레임 및 직전의 프레임(이 경우에, 프레임들(712, 714)) 뿐만 아니라, 키보드 문자 큐를 수신한다. 코어 로직(740)은 도 6에 대하여 위에서 설명된 다양한 로직을 수행할 수 있다. 예를 들어, 코어 로직(740)은 프레임들(712, 714)을 서로 비교할 수 있고, 시각적 변경들이 그 안에서 발생한 영역(들)을 결정할 수 있다. 이것은 예를 들어, 개개의 픽셀들의 적색/녹색/청색(RGB) 값들이 서로에 대한 임계치를 초과하는지 여부를 비교함으로써 결정될 수 있다.
코어 로직(740)은 시각적 변경들의 위치(들)를 격리시킬 수 있고, 위치(들)에서의 문자들을 인식하기 위하여 문자 인식을 수행할 수 있다. 코어 로직(740)은 또한, 인식된 문자들을 키보드 문자 큐(730)에서의 문자들(732)로 매칭시킬 수 있다. 매칭들이 발견될 때, 매칭 위치의 스크린 좌표들이 추출될 수 있고 문자 타이핑 영역들(750)로서 제공될 수 있다.
문자 인식을 이용하는 것에 대해 추가적으로 또는 대안적으로, 일부 실시예들에서, 이미지 인식(예컨대, CV)은 새롭게 나타나거나 사라지는 이미지들 또는 아이콘(icon)들을 검출하기 위하여 이용될 수 있다. 영역 차이 분석 스테이지에서의 대체 또는 보충 로직을 제외하고는, 프로세스는 이와 달리 위에서 설명된 것과 동일할 수 있다. 이것은 예를 들어, 사용자가 어디에서 이미지들 또는 텍스트를 문서 또는 필드로 절단-및-페이스팅(cutting-and-pasting)하고 있는지를 결정하기 위하여 유용할 수 있다.
텍스트를 절단-및-페이스팅할 경우에, 텍스트가 클립보드들로부터 플러싱(flush)될 때, 개별적인 문자들은 키 누름 이벤트들로서 캡처되지 않는다. 이러한 경우에, 클립보드의 컨텐츠 및 사용자가 CTRL+V를 누르고 있는 시간이 캡처될 수 있다. 개별적인 문자들 및 문자 시퀀스들이 어떻게 식별되는지와 유사하게, 클립보드의 컨텐츠는 그 다음으로, OCR 결과들과 비교될 수 있다. 그러나, 타이핑된 문자 큐를 검토하는 것이 아니라, 알고리즘은 CTRL+V가 발생하기 전에 클립보드에서 저장된 문자들의 스트링(string)으로 작동할 것이다.
도 8a는 본 발명의 실시예에 따라, 각각 프레임들 N-1 및 N에 대한 동문 기부 윈도우를 포함하는 스크린샷들(800, 810)의 일부분들(802, 812)을 예시한다. 도 8a에서 보여질 수 있는 바와 같이, 프레임 N-1에서의 모든 필드들은 비어 있지만, 프레임 N에서는, 사용자가 성(first name) 필드에서 글자 "E"를 타이핑하였다. 변경들이 발생하였는지 여부를 결정하기 위하여, 일부 실시예들의 알고리즘은 스크린샷들을 스케일링(scale)하고, 스크린샷들을 정사각형들로 정규화한다. 이 경우에, 스크린샷(800)(도 8b 참조) 및 스크린샷(810)(도 8c 참조)은, 그 27x24 부분이 도 8b 내지 도 8f에서 도시되는 64 개의 정사각형들 x 48 개의 정사각형들의 그리드로 정규화된다. 이 정사각형들 또는 영역들은 64x48 2진 행렬로서 표현될 수 있다.
각각의 스크린샷에 대한 행(row)은 그 다음으로, 그 안에 포함된 임의의 픽셀들이 변경되었는지 여부를 알아보기 위하여 서로 비교될 수 있고, 행렬의 값들은 변경을 갖는 각각의 행에 대하여 "1"로 설정될 수 있다. 이것은 비-제로(non-zero) 엘리먼트가 각각의 행에서 존재하는지 여부를 체크함으로써 행해질 수 있다. 도 8d에서 보여진 바와 같이, 알고리즘이 본원에서 814로 지정된, 행렬의 행 4를 체크할 때, 변경이 그 안에서 검출된다. 알고리즘은 그 다음으로, 도 8e에서 보여진 바와 같이, 행 4로 전진하고, 열(column) 7에서 816으로 나타내어진 정사각형은 새롭게 기입된 글자 "E"의 일부분을 포함한다. 알고리즘은 변경들을 포함하는 정사각형들을 식별하는 것을 계속하고, OCR이 이 일부분 상에서 작동되도록 하기 위하여 제출되어야 할 영역으로서 인접한 정사각형들(818)을 함께 봉합(stitch)한다. 도 8f를 참조한다. 이것은 본원에서 "영역(region)"으로 나타내어진다. 일부 실시예들에서, 영역을 구성하는 하나 또는 일부 정사각형들이 변경들을 가지지 않을 경우에, 이 정사각형들은 예를 들어, OCR 프로세싱이 더 고속으로 작동되게 하기 위하여, 완전히 하나의 컬러인 것으로 설정될 수 있다. 소정의 실시예들에서, 충분한 프로세싱 자원들이 이용가능할 경우에, OCR은 텍스트를 인식하기 위하여 스크린샷들의 전체 쌍 상에서 작동될 수 있다. 텍스트 및 포지션이 스크린샷들 사이에서 동일하거나 유사한 경계설정 박스들은 제거될 수 있고, 새롭게 나타나는 OCR 영역(들)이 식별된다. 이 식별된 텍스트는 매칭들을 검색하기 위하여 키보드 문자 큐와 비교될 수 있다.
때때로, 사용자들은 디스플레이 해상도를 변경할 수 있고, 추가적인 모니터를 후크 업(hook up)할 수 있는 등과 같다. 일부 실시예들은 타이핑된 문자 추적, 캐럿 추적, 및/또는 활성 엘리먼트 검출이 정확하게 유지되도록, 이 변경들을 검출하고 수용한다. 도 9는 본 발명의 실시예에 따라, 해상도 변경들에 대하여 체크하고, 접속된 디스플레이들의 범위에서의 변경들에 대해 체크하고, 변경들을 수용하기 위하여 캐럿 추적 비디오 로직을 셋업하기 위한 프로세스(900)를 예시하는 플로우차트이다. 프로세스는 910에서, 컴퓨팅 시스템을 위한 하나 이상의 접속된 디스플레이들을 체크함으로써, 그리고 920에서, 접속된 디스플레이(들)를 이전에 접속된 디스플레이(들)와 비교함으로써 시작된다. 이것은 상이한 디스플레이 디바이스가 존재하는지 여부를 체크하는 것, 디스플레이 디바이스의 해상도가 변경되었는지 여부를 체크하는 것 등을 수반할 수 있다. 일부 실시예들에서, "접속된" 디스플레이는 (예컨대, 일반적으로 스마트폰들, 랩톱 컴퓨터들 등의 경우에서와 같이) 컴퓨팅 시스템과 통합된 디스플레이일 수 있다.
접속된 디스플레이 디바이스(들) 및/또는 해상도가 930에서 번경되었을 경우에, 해상도 및 스케일은 940에서, 각각의 접속된 디스플레이에 대하여 획득된다. 캡처될 스크린샷들에 대한 스크린샷 에어리어는 950에서, 스케일에 의해 승산되고 희망된 크기(예컨대, 8, 16 등)의 배수들로 정렬된 전체 디스플레이 치수들로 설정된다. 배수들은 본원에서 이하에 추가로 상세하게 논의된 바와 같이, 스크린샷들을 정사각형들로 분할하는 것을 용이하게 할 수 있다. 타이핑된 문자 추적, 캐럿 추적, 및/또는 활성 엘리먼트 검출을 위한 비디오 로직은 그 다음으로, 960에서 설정된다(예컨대, 재시작되고, 재초기화되고, 새로운 디스플레이 설정들이 제공되는 등).
도 10은 본 발명의 실시예에 따라, 비디오 레코더를 위한 프로세스(1000)를 예시하는 플로우차트이다. 프로세스는 1010에서 스크린샷을 촬영함으로써 시작한다. 일부 실시예들에서, 이것은 Windows®를 위한 그래픽 디바이스 인터페이스(Graphics Device Interface; GDI) CopyFromScreen() 명령어를 이용하여 C#로 달성될 수 있다. 스크린샷은 그 다음으로, 1020에서, 프레임으로서 버퍼에 추가된다. 이것은 스크린샷을 예를 들어, C#인 Bitmap 오브젝트로서 버퍼에 추가함으로써 달성될 수 있다. 프로세스가 1030에서 여전히 작동하고 있을 경우에(예컨대, 프로세스는 애플리케이션을 폐쇄하는 것, 스크린 해상도 변경 등에 의해 정지되지 않았음), 스크린샷 캡처는 다음 스크린샷에 대하여 반복될 수 있다. C# 예들이 프로세스(1000) 및 본원에서 개시된 다른 프로세스들에 대하여 제공되지만, 발명의 범위로부터 이탈하지 않으면서, 임의의 적당한 프로그래밍 언어, 오퍼레이팅 시스템, API들, 및 함수들이 이용될 수 있다는 것이 주목되어야 한다.
일부 실시예들은 사용자가 스크린의 어느 엘리먼트에 포커싱하고 있는지를 더 정확하게 식별하기 위하여 캐럿 추적을 수행한다. 예를 들어, 캐럿이 텍스트가 나타나고 있는 그래픽 엘리먼트에서 나타날 경우에, 키보드 큐에서의 새롭게 추가된 텍스트가 이 그래픽 엘리먼트에서 나타나고 있는 것일 가능성이 있다. 도 11은 본 발명의 실시예에 따라, 캐럿 추적을 수행하기 위한 프로세스(1100)를 예시하는 플로우차트이다. 전형적으로, 캐럿이 나타날 것이고, 사용자가 가장 최근에 클릭한 위치에서 또는 위치 근처에서 점멸을 시작할 것이다. 따라서, 일부 실시예들은 최후의 마우스 클릭의 좌표들을 저장하고, 이 위치에 인접한 캐럿을 검색한다. 이것은 캐럿을 위치시키기 위하여 프로세싱되는 스크린샷의 양을 감소시킬 수 있고, 정확성을 추가로 증가시킬 수 있다. 일부 실시예들에서는, 마우스 클릭들의 이력 버퍼 또는 단일의 가장 최근 클릭 위치가 이용된다. 소정의 실시예들에서, 사용자가 예를 들어, 탭 키(tab key)를 누를 경우에, 시스템은 캐럿이 스크린 상의 다음 그래픽 엘리먼트로 이동하였을 수 있는 것으로 가정하였을 수 있고, 알려진 경우에, 검색을 그 위치로 리포커싱(refocus)할 수 있거나, 그렇지 않으면, 전체 스크린샷을 검색할 수 있다.
픽셀 변경들은 변경들이 발생한 스크린샷에서의 각각의 영역에 대하여 계산되고, 영역들은 1105에서, 2진 행렬로 투사된다. 2진 행렬은 영역의 픽셀들이 변경되었는지 여부의 표현이고, 스크린샷들 사이의 변경이 없는 픽셀들에 대한 "0", 및 변경된 픽셀들에 대한 "1"을 포함할 수 있다. "영역"은 일부 실시예들에서 스크린샷으로부터의 다수의 정사각형들을 포함할 수 있는, 변경들이 발생한 정사각형이다. 그러나, 임의의 다른 적당한 형상(예컨대, 직사각형, 육각형 등)이 발명의 범위로부터 이탈하지 않으면서 이용될 수 있다. 일부 실시예들에서, 고정된 수의 영역들은 컴퓨팅 시스템의 프로세싱 파워에 따라, 분석을 위하여 지원된다. 예를 들어, 일부 실시예들은 2 개의 영역들, 3 개의 영역들, 10 개의 영역들 등의 추출 및 OCR을 지원한다. 일부 실시예들은 양자의 캐럿 및 타이핑된 또는 페이스팅된 텍스트를 검색할 수 있다. 수 L 초과의 변경 영역들이 현재의 스크린샷과 이전의 스크린샷 사이에서 발견될 때, 발견된 최초의 L 개의 영역들이 프로세싱될 수 있거나, 스크린샷이 완전히 무시될 수 있다. 이것은 사용자가 상이한 윈도우를 기동시킨 스크린들을 무시하는 것을 도울 수 있거나, 스크린의 충분한 부분은 그렇지 않을 경우에, OCR이 다음 스크린샷이 캡처되기 전에 시간 내에 완료되지 않을 수도 있도록 변경된다.
각각의 2진 행렬에 대하여, 점멸하는 캐럿 영역 후보들은 1110에서 추출되고, 2진 행렬 부재들은 1115에서 병합된다. 본원에서 이용된 바와 같이, "부재들"은 글자, 커서 등을 표현하는 형상들과 같은, 2진 행렬에서 존재하는 접속된 형상들이다. 행렬 부재들의 병합은 컴포넌트들이 예를 들어, 8-접속되는 접속된 컴포넌트들 알고리즘을 이용하여 수행될 수 있다. 접속된 컴포넌트들은 각각의 픽셀이 모든 다른 픽셀들에 접속되는 픽셀들의 세트이다.
형상들은 1120에서, 행렬 부재 병합 결과들로부터 추출되고, 형상들은 1125에서 유효성확인된다. 형상은 전형적으로, 라인을 포함할 수 있는, 예를 들어, 완벽한 직사각형이어야 한다. 유효성확인된 형상 후보들은 1130에서 저장되고 확인 큐와 비교된다. 캐럿 후보들의 포지션, 크기, 및 형상은 시간 스탬프와 함께 저장될 수 있다. 캐럿이 점멸하는 빈도는 공차(예컨대, 5 %) 내에서 일관적이어야 한다. 캐럿이 점멸하므로, 후보들은 후보들이 캐럿의 예상된 성질들(즉, 포지션, 크기, 및 빈도)과 매칭되는 여부를 알아보기 위하여 분석을 위해 저장되어야 한다. 이것은 캐럿 후보가 다수의 스크린샷들(예컨대, 20)에 걸쳐 비교될 때에 어떤 빈도로 점멸하고 있는지 여부를 결정하는 것을 도울 수 있다. 이 정보는 또한, 사용자가 새로운 필드 상에서 마우스를 클릭하고, 탭 키를 누르는 등을 행한 후에 캐럿이 어디에선가 다시 나타날 경우에, 캐럿을 식별하는 것을 도울 수 있다. 당연히, 프로세스의 시작부에서, 확인 큐는 비어 있다.
주어진 캐럿 후보가 캐럿 후보의 등장/소멸, 크기, 및 포지션에 기초하여 1135에서 점멸하고 있는 것으로 확인될 경우에, 캐럿 추적 데이터는 1140에서 점멸하는 캐럿에 대하여 생성된다. 이것은 스크린 상의 캐럿의 포지션, 캐럿이 상주하는 그래픽 엘리먼트(즉, 활성 엘리먼트) 등을 포함할 수 있다. 유효성확인된 후보 영역들 및 대응하는 수의 2진 행렬 데이터는 그 다음으로, 예를 들어, 나중의 유효성확인을 위하여 1145에서 확인 큐로 저장된다. 도 11의 프로세스는 일부 실시예들에서 각각의 새로운 스크린샷에 대하여 반복될 수 있다.
도 12a 내지 도 12d는 본 발명의 실시예에 따라, 타이핑된 문자 추적, 캐럿 추적, 및 활성 엘리먼트 검출을 위한 비디오 프로세싱을 수행하기 위한 프로세스(1200)를 예시하는 플로우차트들이다. 프로세스(1200) 이전에, 해상도 변경들에 대하여 체크가 행해질 수 있고, 캐럿 추적 비디오 로직은 변경들을 수용하기 위하여 셋업될 수 있다. 예를 들어, 도 9를 참조한다. 소정의 실시예들에서, 프로세스(1200)는 비디오 레코더와 동시에 작동할 수 있다. 예를 들어, 도 10을 참조한다. 프로세스(1200)는 C# 및 Windows® 오퍼레이팅 시스템을 이용하는 예이다. 그러나, 임의의 적당한 프로그래밍 언어, 오퍼레이팅 시스템, 연관된 API들, 포맷들, 및 함수들은 발명의 범위로부터 이탈하지 않으면서 이용될 수 있다.
프로세스는 1202에서, N에 대한 BitmapData 오브젝트(object)를 생성하기 위하여 포맷 Format16bppRgb555을 이용하여 비디오 항목 N(예컨대, 스크린샷, 스크린의 일부분, 애플리케이션 윈도우 등) 상에서 LockBits를 수행함으로써 시작된다. LockBits는 비트맵(bitmap)의 직사각형 부분을 록킹(lock)하고, 특정된 포맷으로 픽셀 데이터를 판독하거나 기록하기 위하여 이용될 수 있는 임시 버퍼를 제공한다. BitmapData는 비트맵의 속성들을 저장한다.
BitmapData N 및 BitmapData N-1(즉, 이전의 항목에 대한 BitmapData 오브젝트)은 그 다음으로, 1204에서, 16 픽셀들의 높이를 갖는 수평 행들로 분할된다. 그러나, 프로세스(1200)의 이 단계 및 다른 단계들을 위한 임의의 희망된 높이(예컨대, 8 픽셀들, 32 픽셀들 등)는 발명의 범위로부터 이탈하지 않으면서 이용될 수 있다. 동일한 수직 포지션에서의(즉, 동일한 "행"에서의 - 도 8a 내지 도 8f 참조) BitmapData N 및 BitmapData N-1의 각각의 수평 행에 대하여, 바이트 어레이(byte array)들의 고속 비교를 수행하는 MPCMP 명령은 1206에서 실행된다. MEMCMP는 행들이 동일한지 여부의 표시를 제공한다.
MEMCMP 결과가 0과 동일하지 않은 동일한 행에서의 BitmapData N 및 BitmapData N-1에 대한 수평 행들은 그 다음으로, 1208에서 추출되고, 추출된 수평 행들은 그 다음으로, 1210에서 크기 16x16 픽셀들로 분할된다. 예를 들어, 도 8c를 참조한다. BitmapData N 및 BitmapData N-1의 각각의 16x16 픽셀 블록에 대하여, 이들 사이의 차이가 있는 블록들은 그 다음으로, 1212에서 추출된다. 예를 들어, 도 8f를 참조한다. 이것은 Intel Intrinsics® 명령어들을 루핑(looping)하는 긴 XOR 함수들 또는 일부 다른 적당한 능력의 조합을 이용하여 수행될 수 있다.
상기에 따라, 일부 실시예들에서, 프로세싱될 수 있는 영역들의 수는 미리 결정된 수 L로 제한된다. 소정의 실시예들에서, 각각의 영역 내에 포함될 수 있는 블록들의 수는 제한될 수 있다. 예를 들어, 4 개의 정사각형들, 9 개의 정사각형들, 16 개의 정사각형들 등의 제한은 OCR이 다음 스크린샷이 획득되기 전에 각각의 영역 상에서 작동될 수 있다는 것을 보장하기 위하여 부과될 수 있다. 이것은 변경된 영역들의 수에 대한 제한, 주어진 변경된 영역 내에 포함된 정사각형들의 수에 대한 제한, 또는 양자 모두를 포함할 수 있는 "최적화 임계치"일 수 있다.
각각의 영역에서의 추출된 16x16 픽셀 블록들의 총 카운트, 영역들의 수, 또는 양자 모두는 1214에서 최적화 임계치와 비교된다. 최적화 임계치가 1214에서 충족될 경우에, 프로세스는 단계(1246)로, 그리고 다음 스크린 캡처로 진행한다. 임계치가 단계(1214)에서 초과되지 않을 경우에, 인접한 16x16 픽셀 블록들은 일부 실시예들에서 8-접속된 접속된 컴포넌트들 알고리즘일 수 있는 접속된 컴포넌트들 알고리즘을 이용하여 1216에서 병합된다. 이것은 어느 블록들이 이웃들인지를 결정한다.
일단 접속된 이웃들이 결정되면, 인접한 블록들의 각각의 세트에 대한 경계설정 직사각형이 1218에서 결정되어, 영역을 형성한다. 이것은 최고 및 최저 x-값들(즉, 가장 좌측 및 가장 우측 블록(들)) 및 최고 및 최저 y-값들(즉, 가장 상부 및 가장 하부 블록(들))을 가지는 블록들이 포함되는 극단 알고리즘(extremal algorithm)에 의해 결정될 수 있다. 이러한 예는 도 8f에서 보여질 수 있다.
영역에 대한 각각의 경계설정 직사각형에 대하여, 픽셀 변경들은 1220에서, 계산되고 2진 행렬로 투사된다. 32x32 영역으로 조합된 4 개의 16x16 블록들 내에 포함된 글자 "E"에 대한 일 예의 2진 행렬(1400)은 예를 들어, 도 14a에서 도시된다.
대부분의 경우들에는, 영역은 그 안에 포함된 부재(들)(예컨대, 글자들, 캐럿, 픽셀들을 변경시킨 다른 형상들 등)보다 더 클 것이다. OCR 알고리즘의 속력을 증가시키기 위하여, 1222에서, 각각의 2진 행렬에 대하여, 각각의 영역 내에 포함된 부재(들)가 (예컨대, 접속된 컴포넌트들 알고리즘을 이용하여) 결정되고, 2진 행렬이 각각의 부재에 대하여 크롭핑된다. 이것은 각각의 영역에서의 각각의 부재에 대한 크롭핑된 행렬들을 생성한다. 2진 행렬(1400)로부터 생성된 글자 "E"에 대한 일 예의 크롭핑된 부재 행렬(1410)이 도 14b에서 도시된다. 크롭핑은 또한, 일부 실시예들에서 극단 알고리즘을 이용하여 수행될 수 있다.
점멸하는 캐럿 영역 후보들은 그 다음으로, 1224에서, 부재 행렬들로부터 추출된다. 예를 들어, 후보들은 일부 실시예들에서 단일 픽셀의 폭을 갖는 수직 라인을 잠재적으로 포함하는 직사각형 형상을 가질 수 있다. 추출된 점멸하는 캐럿 영역 후보들 및 대응하는 부재 행렬 데이터는 그 다음으로, 1226에서, 확인 큐와 비교되어, 크기, 위치, 및 점멸의 빈도를 잠재적으로 분석한다. 1228에서 점멸할 경우에, 캐럿 추적 데이터는 1230에서, 점멸하는 캐럿에 대하여 생성된다. 점멸하는 캐럿 영역들 및 그 대응하는 부재 행렬 데이터는 1232에서, 확인 큐로 저장된다. 일부 실시예들에서, 프로세스(1200)의 이 부분은 도 11의 프로세스(1100)와 동일할 수 있거나 유사할 수 있다.
부재 2진 행렬들은 주어진 픽셀이 스크린 캡처 N-1로부터 스크린 캡처 N으로 변경되었는지 여부를 오직 표시한다. 따라서, 픽셀 데이터는 1234에서, 변경된 각각의 픽셀에 대한 BitmapData N으로부터 리트리빙(retrieve)된다. 부재 직사각형들은 그 다음으로, 1236에서 생성되고 OCR을 위하여 준비된다. 이것은 각각의 변경된 픽셀에 대한 픽셀 데이터를 파퓰레이팅(populating)하는 것, 캐럿 픽셀들을 제거하는 것, 배경을 프로세싱하는 것(예컨대, 미변경된 픽셀들을 널(null) 또는 고도로 수축되는 값으로 설정하는 것) 등을 포함할 수 있다. 캐럿 픽셀들이 제거된 경우에, 캐럿 자체는 2진 행렬 부재들의 어떤 포지션, 형상, 및 세트로 이 때에 검출되었다는 것이 가정될 수 있다. 이 정보는 캐럿 추적 목적들을 위하여 저장될 수 있다. OCR은 그 다음으로, 1238에서, 준비된 부재 직사각형 픽셀 데이터에 대하여 수행되고, 키보드 큐로의 퍼지 매칭은 1240에서, 각각의 OCR 결과에 대하여 수행된다. 타이핑된 텍스트 추적 데이터는 1242에서, 매칭된 OCR 영역들에 대하여 생성된다.
일단 위치되면, OCR 영역들과 매칭된 키보드 큐 항목들은 1244에서, 키보드 큐로부터 제거된다. 문자의 다수의 인스턴스들이 존재할 경우에, 키보드 큐에서의 그 문자의 가장 오래된 인스턴스는 예를 들어, 제거될 수 있다. UnlockBits는 그 다음으로, 시스템 메모리로부터 이 비트맵을 언록킹(unlock)하는 1246에서, BitmapData N-1에 대해 수행되고, BitmapData N은 1248에서, 포지션 N-1로 이동된다. 프로세스(1200)는 그 다음으로, 다음 캡처된 항목에 대한 시작으로 복귀할 수 있다.
도 13a 및 도 13b는 본 발명의 실시예에 따라, 페이스팅된 텍스트 추적을 수행하기 위한 프로세스(1300)를 예시하는 플로우차트들이다. 프로세스는 눌러진 키들 및 그래픽 변경들이 발생한 스크린 상의 위치(들)를 각각 결정하기 위하여, 1305에서의 키보드 레코딩 및 1310에서의 스크린 비디오 레코딩을 수행함으로써 시작된다. 사용자 제스처(user gesture)는 그 다음으로, 1315에서 해석된다. 사용자 제스처들은 마우스 클릭들, CTRL+V를 누르는 것, 우측 클릭 플러스 메뉴로부터 페이스트를 선택하는 것, 홈 버튼을 클릭하고 애플리케이션에서 페이스팅하는 것 등을 포함할 수 있지만, 이것으로 제한되지는 않는다. 사용자가 위치를 클릭하고 클립보드로부터 신속하게 페이스팅할 경우에, 캐럿은 누락될 수 있고, 사용자의 액션들은 상이하게 재구성될 필요가 있을 수 있다. 클립보드로부터의 페이스트가 1320에서 발생하지 않았을 경우에, 타이핑된 텍스트 검출 및 캐럿 추적 로직은 일부 실시예들에서 도 12a 내지 도 12d의 프로세스(1200)의 라인들을 따라 잠재적으로, 1325에서 수행된다.
그러나, 클립보드가 1320에서, 사용자로부터의 최근에 페이스팅된 데이터를 포함할 경우에(예컨대, 최후의 500 ms, 최후의 초 등 내에서 페이스팅됨), 프레임들 N 및 N-1 사이의 픽셀 차이들은 1330에서 계산된다. 프레임들 N 및 N-1 사이에서 변경들이 발생한 예측된 동일한 포지션 영역들은 그 다음으로, 1335에서 추출된다. 각각의 영역에 대하여, 1340에서, 픽셀 변경들이 계산되고 변경들은 2진 행렬로 투사된다.
각각의 2진 행렬에 대하여, 1345에서, 부재들은 예를 들어, 접속된 컴포넌트들 알고리즘을 이용하여 결정되고, 부재 행렬들은 각각의 부재에 대하여 결정된다. 1350에서, 픽셀 데이터는 부재 행렬들에서의 각각의 변경된 픽셀에 대하여 추출되고, 부재 직사각형들이 생성된다. 각각의 부재 직사각형은 1355에서, OCR을 위하여 준비되고, OCR은 1360에서, 각각의 준비된 부재 직사각형 상에서 작동된다. 클립보드 컨텐츠와의 OCR 결과들의 퍼지 매칭 비교는 1370에서 클립보드 모니터에 의해 제공된 클립보드 컨텐츠를 이용하여, 1365에서, 각각의 OCR 결과에 대하여 수행된다. 일부 실시예들에서, 클립보드 텍스트 컨텐츠는 Clipboard.GetText()를 이용하여 System.Windows.Forms.dll로부터 획득될 수 있다. 매칭이 1375에서 발견될 경우에, 1380에서, (예컨대, 직사각형의 형태인) 페이스팅된 텍스트의 좌표들이 생성되고 클립보드가 플러싱(flushing)되고, 프로세스는 다음 프레임을 위하여 단계들(1305 및 1310)로 복귀한다.
일부 실시예들에서, 현재의 활성 엘리먼트는 사용자가 스크린 변경을 야기시키는 어떤 키를 누를 경우를 위하여 저장될 수 있다. 예를 들어, 사용자가 엔터 키(enter key)를 누를 경우에, 그것은 형태가 제출되게 하고 윈도우가 폐쇄되게 할 수 있다. 또 다른 예에서, 사용자가 웹 브라우저를 위한 URL 입력 필드에서 엔터를 누를 경우에, 이것은 웹 브라우저가 웹사이트에 대한 탐색을 시작하게 할 수 있다. 알고리즘은 이것을 인식할 수 있고, 상당한 스크린 변경들이 발생하고 있을 가능성이 있으므로, 활성 엘리먼트가 이 시나리오들에서 어디에 있는지를 찾기 전에 일정 시간량을 대기할 수 있다. 일단 스크린이 상대적으로 정적으로 되면(예컨대, 스크린의 오직 상대적으로 작은 부분이 하나의 스크린샷으로부터 다음의 것으로 변경됨), 타이핑된 텍스트 검출 및 캐럿 추적은 새로운 활성 엘리먼트를 발견하기 위하여 다시 재개될 수 있다. 사용자가 엔터, 탈출(escape) 등을 눌렀을 때에 어느 엘리먼트가 포커싱되었는지를 아는 것은 이에 따라 도움이 될 수 있다. 또한, 현재의 오퍼레이팅 시스템이 현재의 전경 윈도우(예컨대, Windows®에서의 user32.dll에서 이용가능한 "GetForegroundWindow")의 윈도우 경계설정 직사각형을 태생적으로 획득하기 위한 신뢰성 있는 방법을 제공할 경우, 전경 윈도우 경계설정 직사각형은 스크린 캡처 및 프레임 프로세싱을 위하여 이용될 에어리어를 제한하기 위하여 이용될 수 있다.
일부 실시예들에서, 포커싱된 또는 활성 엘리먼트가 결정될 경우에, 텍스트가 나타나는 것을 야기시키지 않는 키들(예컨대, 엔터, 탈출, 제어, 제어 및/또는 alt 및 하나 이상의 문자들의 조합 등)을 누르는 것으로부터의 거동은 활성 엘리먼트의 본성(nature)에 기초하여 결정될 수 있다. 예를 들어, 이러한 "핫 키"(비가시적인 키 또는 키들의 조합)가 눌러질 때, "핫 키"가 트리거링한 액션이 분류될 수 있다. 예를 들어, 포커싱된 엘리먼트가 "패스워드(password)"로 표기되고 사용자가 "엔터"를 누를 경우에, "엔터"를 누르는 것은 "로그인(Login)" 액션을 표현한다는 것이 추론될 수 있다. 이것은 프로세스 탐지의 목적을 위하여 유용할 수 있고, 여기서, 사용자가 "로그인"을 수행하였다는 것을 아는 것은 사용자가 "엔터"를 눌렀다는 것을 단지 아는 것보다 비지니스 프로세스 모델링의 목적을 위하여 더 서술적이다.
일부 실시예들에서, CV는 스크린에서의 그래픽 엘리먼트들의 유형들 및 위치들을 결정하여 활성 엘리먼트들을 더 용이하게 결정하기 위하여 이용될 수 있다. 예를 들어, CV는 주어진 그래픽 엘리먼트가 텍스트 필드, 텍스트 박스 등인지 여부를 결정하기 위하여 이용될 수 있다. 스크린이 상대적으로 작은 양을 변경시키거나 변경들이 그래픽 엘리먼트 내에서 국소화될 경우에, 변경들은 주어진 프레임에서의 새롭게 나타나는 텍스트에 대응한다는 것이 가정될 수 있다.
도 15는 본 발명의 실시예에 따라, 활성 엘리먼트들을 결정하기 위하여 CV 및 키보드 큐를 이용하기 위한 프로세스(1500)를 예시하는 플로우차트이다. 프로세스는 1510에서, 프레임이 미리 결정된 임계치 초과만큼 이전의 프레임으로부터 변경되었는지 여부를 결정함으로써 시작된다. 이것은 프레임의 어떤 부분 초과만큼 변경되었는지 여부(예컨대, 2 % 초과), 픽셀들의 미리 결정된 수 초과만큼 변경되었는지 여부(예컨대, 200 초과), 변경들이 텍스트 기입을 허용하는 프레임에서의 그래픽 엘리먼트들의 위치들의 외부에서 발생하는지 여부 등을 체크하는 것을 포함할 수 있다.
임계치가 1520에서 초과될 경우에, 스크린 상의 그래픽 엘리먼트들의 적어도 일부가 또한 변경되었을 가능성이 있다. CV 프리프로세싱은 메모리에서 저장될 수 있는 그래픽 엘리먼트 유형들 및 위치들을 식별하기 위하여 1530에서 수행된다. 프레임 비교 프로세스는 일부 실시형태들에서 CV 프리프로세싱이 수행되는 동안에 일시정지될 수 있다.
임계치가 1520에서 초과되지 않았을 경우에, 또는 CV 프리프로세싱이 1530에서 완료된 후에, 이전의 프레임과 현재의 프레임 사이에서 추가된 키보드 큐에서의 새롭게 나타나는 엘리먼트들은 1540에서 결정된다. 키보드 큐에서 새롭게 나타나는 엘리먼트들이 있을 경우에, 이것들은 스크린 상의 적당한 그래픽 엘리먼트에서 나타났다는 것이 가정될 수 있다. 스크린이 현재의 프레임에서 변경된 위치(들)는 그 다음으로, 1550에서 결정되고, 1560에서, 변경들을 그래픽 엘리먼트들의 위치들로 매칭시키기 위한 시도가 행해진다. 변경들이 그래픽 엘리먼트들 중의 오직 하나 내에서 발생한 경우에, 매칭된 그래픽 엘리먼트는 1570에서, 활성 엘리먼트로서 설정된다. 그러나, 변경들이 다수의 그래픽 엘리먼트들 내에서 발생하였거나 변경들이 그래픽 엘리먼트에서 발견되지 않았을 경우에, OCR-기반 프로세싱은 1580에서 수행된다. 다음 프레임은 1590에서 페치(fetch)되고, 프로세스가 반복된다.
도 16은 본 발명의 실시예에 따라, 타이핑된 및/또는 페이스팅된 텍스트의 검출, 캐럿 추적, 및 활성 엘리먼트 검출을 수행하도록 구성된 시스템(1600)을 예시하는 아키텍처 다이어그램이다. 시스템(1600)은 데스크톱 컴퓨터(1602), 태블릿(1604), 및 스마트폰(1606)과 같은 사용자 컴퓨팅 시스템들을 포함한다. 그러나, 스마트 시계들, 랩톱 컴퓨터들, 사물 인터넷(Internet-of-Things; IoT) 디바이스들, 차량 컴퓨팅 시스템들 등을 포함하지만 이것으로 제한되지는 않는 임의의 희망된 컴퓨팅 시스템이 발명의 범위로부터 이탈하지 않으면서 이용될 수 있다.
각각의 컴퓨팅 시스템(1602, 1604, 1606)은 스크린샷들, 키스트로크들, 작동되는 애플리케이션들, 애플리케이션 시각적 엘리먼트들, 시각적 엘리먼트 위치들, 애플리케이션 위치들, 클립보드 컨텐츠 등을 레코딩하는, 그 상에서 작동되는 디지털 프로세스(1610)를 가진다. 실제로, 스크린 그래픽들, 사용자 입력들, 디스플레이 엘리먼트들 등에 속하는 임의의 희망된 정보는 발명의 범위로부터 이탈하지 않으면서 레코딩될 수 있다. 소정의 실시예들에서, 오직 비디오 및 키스트로크 레코딩들이 초기에 캡처되고, 다른 정보는 CV를 이용하여 추후에 결정된다. 그러나, 추가적인 정보는 CV 프로세스를 포커싱하고 개선시키는 것을 도울 수 있다. 디지털 프로세스들(1610)은 발명의 범위로부터 이탈하지 않으면서, RPA 설계자 애플리케이션, 오퍼레이팅 시스템의 일부, 개인용 컴퓨터(PC) 또는 스마트폰을 위한 다운로딩가능한 애플리케이션을 통해 생성된 로봇들일 수 있거나, 임의의 다른 소프트웨어 및/또는 하드웨어일 수 있다. 실제로, 일부 실시예들에서, 디지털 프로세스들(1610) 중의 하나 이상의 로직은 물리적 하드웨어를 통해 부분적으로 또는 완전히 구현된다.
디지털 프로세스들(1610)은 레코딩된 스크린샷들, 키스트로크들, 작동되는 애플리케이션들, 애플리케이션 엘리먼트들, 및 위치들 등을 네트워크(1620)(예컨대, 로컬 영역 네트워크(local area network; LAN), 이동 통신 네트워크, 위성 통신 네트워크, 인터넷, 그 임의의 조합 등)를 통해 서버(1630)로 전송한다. 일부 실시예들에서, 서버(1630)는 지휘자 애플리케이션을 작동시킬 수 있고, 데이터는 하트비트 메시지의 일부로서 주기적으로 전송될 수 있다. 소정의 실시예들에서, 일단 재훈련 데이터의 미리 결정된 양이 수집되었으면, 미리 결정된 시간 주기가 경과한 후에, 또는 양자 모두의 경우에, 요청들은 서버(1630)로 전송될 수 있다. 서버(1630)는 디지털 프로세스들(1610)로부터의 정보를 데이터베이스(1640) 내에 저장한다.
인간 사용자(예컨대, RPA 개발자 컴퓨팅 시스템(1650)의 설계자 애플리케이션(1652)을 이용하는 RPA 공학자)에 의해 명령될 때, 미리 결정된 데이터의 양이 데이터베이스(1640)에서 수집되었을 때, 데이터가 디지털 프로세스들(1610)로부터 수신되자 마자 등의 경우에, 서버(1630)는 서버(1630)가 그로부터 데이터를 수신하는 컴퓨팅 시스템들을 위한 검출된 타이핑된 및/또는 페이스팅된 텍스트, 캐럿 추적, 및 활성 엘리먼트 검출 프로세스의 인스턴스들(1632)을 작동시킨다. 서버는 그 컴퓨팅 시스템들과 상호작용할 때에 사용자들이 행하고 있는 것을 결정하기 위하여 인스턴스들(1632)로부터의 결과들을 분석할 수 있다.
도 17은 본 발명의 실시예에 따라, 프리프로세싱, 텍스트 검출, 캐럿 추적, 및 활성 엘리먼트 검출을 수행하기 위한 프로세스(1700)를 예시하는 플로우차트이다. 프로세스는 1705에서, 현재의 스크린샷 프레임과 이전의 스크린샷 프레임(및 잠재적으로 적어도 하나의 다른 이전의 스크린샷 프레임) 사이의 변경들을 결정함으로써 시작된다. 임계치가 1710에서 초과될 경우에(예컨대, 어떤 수 초과의 픽셀들이 변경되었음, 어떤 수 초과의 영역들이 변경되었음, 영역이 어떤 수 초과의 블록들을 가짐 등), 스크린이 실질적으로 변경되었고 새로운 그래픽 엘리먼트들이 존재할 수 있을 가능성이 있다. 이에 따라, CV 프리프로세싱은 현재의 스크린샷 프레임에서의 그래픽 엘리먼트들의 유형들 및 위치들을 결정하기 위하여 1715에서 현재의 스크린샷 프레임 상에서 수행되고, 프로세스는 1720에서 다음 프레임으로 진행한다. "현재의 스크린샷 프레임" 및 "이전의 스크린샷 프레임"은 상대적이라는 것이 주목되어야 한다. 프로세스가 다음 스크린샷 프레임으로 전진할 때, 그 스크린샷 프레임은 현재의 스크린샷 프레임이 되고, 과거의 현재의 스크린샷 프레임은 이전의 스크린샷 프레임이 된다.
임계치가 1710에서 초과되지 않았을 경우에, 시스템은 1725에서, OCR을 수행하지 않으면서 활성 엘리먼트를 식별하는 것을 시도한다. 일부 실시예들에서, CV 프리프로세싱 및 OCR 없이 활성 엘리먼트를 식별하는 것을 시도하기 위한 프로세스는 도 15의 전부 또는 일부에 따라 수행된다. 1730에서 성공적일 경우에, 프로세스는 1720에서 다음 프레임으로 진행한다. 그렇지 않을 경우에, 프로세스는 본원에서 설명된 실시예들에 따라 타이핑된 텍스트 검출, 캐럿 추적, 및/또는 클립보드 컨텐츠 검출을 수행하는 것을 진행한다. 일부 실시예들에서, 타이핑된 텍스트 검출, 캐럿 추적, 및/또는 클립보드 컨텐츠 검출을 수행하기 위한 프로세스(들)는 도 6, 도 7, 및 도 9 내지 도 13b에 대하여 설명된 것들의 전부 또는 일부에 따를 수 있다.
도 6, 도 7, 도 9 내지 도 13b, 도 15, 및 도 17에서 수행된 프로세스 단계들은 프로세서(들)가 본 발명의 실시예들에 따라 도 6, 도 7, 도 9 내지 도 13b, 도 15, 및 도 17에서 설명된 프로세스(들)의 적어도 일부를 수행하기 위한 명령어들을 인코딩하는 컴퓨터 프로그램에 의해 수행될 수 있다. 컴퓨터 프로그램은 비-일시적 컴퓨터-판독가능 매체 상에 수록될 수 있다. 컴퓨터-판독가능 매체는 하드 디스크 드라이브, 플래시 디바이스, RAM, 테이프, 및/또는 데이터를 저장하기 위하여 이용된 임의의 다른 이러한 매체 또는 매체들의 조합일 수 있지만, 이것으로 제한되지는 않는다. 컴퓨터 프로그램은 컴퓨터-판독가능 매체 상에서 또한 저장될 수 있는, 도 6, 도 7, 도 9 내지 도 13b, 도 15, 및 도 17에서 설명된 프로세스 단계들의 전부 또는 일부를 구현하기 위하여 컴퓨팅 시스템의 프로세서(들)(예컨대, 도 5의 컴퓨팅 시스템(500)의 프로세서(들)(510))를 제어하기 위한 인코딩된 명령어들을 포함할 수 있다.
컴퓨터 프로그램은 하드웨어, 소프트웨어, 또는 하이브리드 구현예로 구현될 수 있다. 컴퓨터 프로그램은, 서로 동작 가능하게 통신하고 있고, 정보 또는 명령어들을 디스플레이로 전달하도록 설계되는 모듈들로 구성될 수 있다. 컴퓨터 프로그램은 범용 컴퓨터, ASIC, 또는 임의의 다른 적당한 디바이스 상에서 동작하도록 구성될 수 있다.
본 발명의 다양한 실시예들의 컴포넌트들은 본원에서의 도면들에서 일반적으로 설명되고 예시된 바와 같이, 폭넓게 다양한 상이한 구성들로 배열 및 설계될 수 있다는 것이 용이하게 이해될 것이다. 이에 따라, 본 발명의 실시예들의 상세한 설명은 첨부된 도면들에서 표현된 바와 같이, 청구된 바와 같은 발명의 범위를 제한하도록 의도된 것이 아니라, 발명의 선택된 실시예들을 단지 대표한다.
이 명세서의 전반에 걸쳐 설명된 발명의 특징들, 구조들, 또는 특성들은 하나 이상의 실시예들에서 임의의 적당한 방식으로 조합될 수 있다. 예를 들어, "소정의 실시예들", "일부 실시예들", 또는 유사한 언어에 대한 이 명세서의 전반에 걸친 참조는 실시예와 관련하여 설명된 특정한 특징, 구조, 또는 특성이 본 발명의 적어도 하나의 실시예 내에 포함된다는 것을 의미한다. 이에 따라, 이 명세서의 전반에 걸친 어구들 "소정의 실시예들에서", "일부 실시예에서", "다른 실시예들에서", 또는 유사한 언어의 출현들은 실시예들의 동일한 그룹을 반드시 모두 지칭하는 것은 아니고, 설명된 특징들, 구조들, 또는 특성들은 하나 이상의 실시예들에서 임의의 적당한 방식으로 조합될 수 있다.
특징들, 장점들, 또는 유사한 언어에 대한 이 명세서의 전반에 걸친 참조는 본 발명으로 실현될 수 있는 특징들 및 장점들의 전부가 발명의 임의의 단일 실시예 내에 있어야 하거나 있다는 것을 암시하지는 않는다는 것이 주목되어야 한다. 오히려, 특징들 및 장점들을 지칭하는 언어는 실시예와 관련하여 설명된 특정 특징, 장점, 또는 특성이 본 발명의 적어도 하나의 실시예 내에 포함된다는 것을 의미하도록 이해된다. 이에 따라, 이 명세서의 전반에 걸친 특징들 및 장점들, 및 유사한 언어의 논의는 동일한 실시예를 지칭할 수 있지만, 반드시 그러한 것은 아니다.
또한, 발명의 설명된 특징들, 장점들, 및 특성들은 하나 이상의 실시예들에서 임의의 적당한 방식으로 조합될 수 있다. 관련 기술분야의 당업자는 발명이 특정한 실시예의 특정 특징들 또는 장점들 중의 하나 이상 없이 실시될 수 있다는 것을 인식할 것이다. 다른 경우들에서, 추가적인 특징들 및 장점들은 발명의 모든 실시예들에서 존재하지 않을 수 있는 소정의 실시예들에서 인식될 수 있다.
당해 분야의 당업자는 위에서 논의된 바와 같은 발명이 상이한 순서인 단계들로, 및/또는 개시되는 것들과 상이한 구성들인 하드웨어 엘리먼트들로 실시될 수 있다는 것을 용이하게 이해할 것이다. 그러므로, 발명은 이 바람직한 실시예들에 기초하여 설명되었지만, 발명의 사상 및 범위 내에서 유지되면서, 어떤 수정들, 변동들, 및 대안적인 구성들이 분명할 것이라는 것이 당해 분야의 당업자들에게 분명할 것이다. 그러므로, 발명의 한계들 및 경계들을 결정하기 위하여, 첨부된 청구항들에 대해 참조가 행해져야 한다.

Claims (20)

  1. 페이스팅된(pasted) 텍스트 검출 로직을 포함하는 컴퓨터 프로그램을 저장한 비-일시적 컴퓨터-판독가능 매체에 있어서,
    상기 프로그램은, 적어도 하나의 프로세서로 하여금,
    컨텐츠(content)가 시간 윈도우 내에서 오퍼레이팅 시스템(operating system)을 위한 클립보드(clipboard)에 추가되었는지 여부를 결정하기 위하여 클립보드를 모니터링하게 하고; 그리고
    상기 컨텐츠가 상기 시간 윈도우 내에서 상기 클립보드에 추가되었을 때:
    현재의 스크린샷 프레임이 이전의 스크린샷 프레임과 상이한 하나 이상의 영역을 결정하게 하고 - 상기 현재의 스크린샷 프레임 및 상기 이전의 스크린샷 프레임은 디스플레이의 전체 스크린 또는 그 일부분을 포함함 - ,
    상기 하나 이상의 결정된 영역에서의 하나 이상의 접속된 부재를 추출하고 상기 추출된 하나 이상의 접속된 부재 상에서 광학적 문자 인식(optical character recognition; OCR)을 수행하여, 하나 이상의 인식된 문자, 하나 이상의 인식된 문자 시퀀스, 또는 양자 모두와, 각자의 포지션들을 생성하게 하고,
    상기 하나 이상의 인식된 문자, 상기 하나 이상의 인식된 문자 시퀀스, 또는 양자 모두를 클립보드 컨텐츠와 비교하게 하고, 그리고
    문자 또는 문자 시퀀스가 상기 클립보드 컨텐츠의 문자 또는 문자 시퀀스와 정합할(match) 때, 상기 페이스팅된 텍스트의 좌표를 획득하고 상기 페이스팅된 텍스트의 상기 좌표를 포함하는 그래픽 엘리먼트를 활성 엘리먼트로서 설정하게 하도록
    구성되는 것인, 비-일시적 컴퓨터-판독가능 매체.
  2. 제 1 항에 있어서,
    상기 프로그램은 또한, 상기 적어도 하나의 프로세서로 하여금,
    상기 클립보드를 플러싱(flush)하고 다음 프레임에 대하여 프로세스를 반복하게 하도록 구성되는 것인, 비-일시적 컴퓨터-판독가능 매체.
  3. 제 1 항에 있어서,
    상기 프로그램은 또한, 상기 적어도 하나의 프로세서로 하여금,
    컴퓨팅 시스템과의 사용자 상호작용에 속하는 하나 이상의 사용자 제스처(gesture)를 결정하게 하고;
    상기 하나 이상의 결정된 사용자 제스처에 기초하여, 페이스트(paste)가 발생하였는지 여부를 결정하게 하고; 그리고
    상기 페이스트가 발생하였을 때, 상기 페이스팅된 텍스트 검출 로직을 수행하게 하도록
    구성되는 것인, 비-일시적 컴퓨터-판독가능 매체.
  4. 제 3 항에 있어서,
    상기 하나 이상의 사용자 제스처는 마우스 클릭, 제어 및 V를 누르는 것, 우측 클릭과 함께 애플리케이션의 메뉴로부터의 페이스트 선택, 및 홈 버튼의 클릭 중 적어도 하나 및 상기 애플리케이션에서의 페이스팅을 포함하는 것인, 비-일시적 컴퓨터-판독가능 매체.
  5. 제 1 항에 있어서,
    컨텐츠가 상기 시간 윈도우 내에서 상기 클립보드에 추가되지 않았을 때, 상기 프로그램은 또한, 상기 적어도 하나의 프로세서로 하여금,
    타이핑된 텍스트 검출, 캐럿(caret) 추적, 또는 양자 모두를 수행하게 하고; 그리고
    상기 타이핑된 텍스트, 상기 캐럿, 또는 양자 모두를 포함하는 상기 현재의 스크린샷 프레임에서의 활성 엘리먼트를 식별하게 하도록
    구성되는 것인, 비-일시적 컴퓨터-판독가능 매체.
  6. 제 1 항에 있어서,
    상기 현재의 스크린샷 프레임 및 이전의 스크린샷 프레임은 손실 포맷(lossy format)으로 압축되고,
    상기 현재의 스크린샷 프레임이 상기 이전의 스크린샷 프레임과 상이한 상기 하나 이상의 영역의 결정은, 하나 이상의 공차(tolerance)를 상기 현재의 스크린샷 프레임 및 상기 이전의 스크린샷 프레임의 대응하는 영역에 적용하는 것을 포함하는 것인, 비-일시적 컴퓨터-판독가능 매체.
  7. 제 1 항에 있어서,
    상기 프로그램은 또한, 상기 적어도 하나의 프로세서로 하여금,
    자동정정 알고리즘을 상기 OCR에 의해 검출된 문자의 시퀀스에 적용하게 하고; 그리고
    상기 자동정정된 문자 시퀀스를 이용하여 상기 클립보드 컨텐츠와의 비교를 수행하게 하도록
    구성되는 것인, 비-일시적 컴퓨터-판독가능 매체.
  8. 제 1 항에 있어서,
    상기 현재의 스크린샷 프레임이 상기 이전의 스크린샷 프레임과 상이한 상기 하나 이상의 영역을 결정할 때, 상기 프로그램은 또한, 상기 적어도 하나의 프로세서로 하여금,
    변경이 상기 영역에서 발생하였는지 여부를 결정하기 위하여, 퍼지 이미지 정합(fuzzy image matching)을 상기 현재의 스크린샷 프레임으로부터의 영역 및 상기 이전의 스크린샷 프레임으로부터의 대응하는 영역에 적용하게 하도록 구성되는 것인, 비-일시적 컴퓨터-판독가능 매체.
  9. 제 1 항에 있어서,
    상기 프로그램은 로봇 프로세스 자동화(robotic process automation; RPA) 로봇인 것인, 비-일시적 컴퓨터-판독가능 매체.
  10. 제 1 항에 있어서,
    상기 현재의 스크린샷 프레임의 미리 결정된 백분율 초과의 픽셀이 상기 이전의 스크린샷 프레임과 상이할 때, 상기 현재의 스크린샷 프레임은 무시되고, 상기 페이스팅된 텍스트 검출 로직은 다음 스크린샷 프레임으로 진행하는 것인, 비-일시적 컴퓨터-판독가능 매체.
  11. 제 1 항에 있어서,
    상기 현재의 스크린샷 프레임이 상기 이전의 스크린샷 프레임과 상이한 상기 하나 이상의 영역의 결정은,
    상기 현재의 스크린샷 프레임 및 상기 이전의 스크린샷 프레임을 미리 결정된 높이를 갖는 수평 행들로 분할하는 것;
    상기 행들이 동일한지 여부를 결정하기 위하여 상기 현재의 스크린샷 프레임 및 상기 이전의 스크린샷 프레임으로부터의 각각의 대응하는 행을 비교하는 것;
    행이 상기 현재의 스크린샷 프레임과 상기 이전의 스크린샷 프레임 사이에서 동일하지 않을 때, 상기 행을 추출하고 상기 행을 동일한 크기 블록들로 분할하는 것;
    상기 현재의 스크린샷 프레임과 상기 이전의 스크린샷 프레임에서의 각자의 블록들 사이에 차이가 존재하는지 여부를 결정하는 것; 및
    차이가 존재하는 블록들을 추출하는 것
    을 포함하는 것인, 비-일시적 컴퓨터-판독가능 매체.
  12. 제 11 항에 있어서,
    영역에서의 블록들의 수가 임계치를 초과할 때, 상기 현재의 스크린샷 프레임은 무시되고, 타이핑된 텍스트 검출 로직은 다음 스크린샷 프레임으로 진행하는 것인, 비-일시적 컴퓨터-판독가능 매체.
  13. 제 11 항에 있어서,
    영역에서의 블록들의 수가 임계치를 초과하지 않을 때, 상기 프로그램은 또한, 상기 적어도 하나의 프로세서로 하여금,
    인접한 블록들을 병합(join)하게 하고;
    인접한 블록들의 각각의 세트에 대한 영역에 대한 경계설정 직사각형을 결정하게 하고; 그리고
    각각의 영역에 대한 픽셀 변경을 계산하고, 상기 픽셀 변경을 2진 행렬(binary matrix)로 투사하게 하도록 구성되는 것인, 비-일시적 컴퓨터-판독가능 매체.
  14. 제 13 항에 있어서,
    상기 프로그램은 또한, 상기 적어도 하나의 프로세서로 하여금,
    각각의 2진 행렬에서의 상기 하나 이상의 접속된 부재에 대한 접속된 부재 2진 행렬을 결정하게 하고;
    각각의 접속된 부재 2진 행렬을 크롭핑(crop)하게 하고;
    각각의 접속된 부재 2진 행렬에 대한 상기 현재의 스크린샷 프레임과 상기 이전의 스크린샷 프레임 사이의 각각의 변경된 픽셀에 대한 픽셀 데이터를 취출(retrieve)하게 하고; 그리고
    상기 취출된 픽셀 데이터를 이용하여 상기 OCR을 수행하게 하도록
    구성되는 것인, 비-일시적 컴퓨터-판독가능 매체.
  15. 페이스팅된 텍스트 검출 로직을 포함하는 컴퓨터 프로그램을 저장한 비-일시적 컴퓨터-판독가능 매체에 있어서,
    상기 프로그램은, 적어도 하나의 프로세서로 하여금,
    클립보드 컨텐츠가 존재하는지 여부를 결정하게 하고; 그리고
    상기 클립보드 컨텐츠가 존재하고 상기 클립보드 컨텐츠가 시간 윈도우 동안에 추가되었을 때:
    현재의 스크린샷 프레임이 이전의 스크린샷 프레임과 상이한 하나 이상의 영역을 결정하게 하고 - 상기 현재의 스크린샷 프레임 및 상기 이전의 스크린샷 프레임은 디스플레이의 전체 스크린 또는 그 일부분을 포함함 -,
    상기 하나 이상의 결정된 영역에서의 하나 이상의 접속된 부재를 추출하고 상기 추출된 하나 이상의 접속된 부재 상에서 광학적 문자 인식(optical character recognition; OCR)을 수행하여, 하나 이상의 인식된 문자, 하나 이상의 인식된 문자 시퀀스, 또는 양자 모두와, 각자의 포지션들을 생성하게 하고,
    상기 클립보드 컨텐츠를 상기 하나 이상의 인식된 문자, 상기 하나 이상의 인식된 문자 시퀀스, 또는 양자 모두와 비교하게 하고, 그리고
    상기 클립보드 컨텐츠가 상기 하나 이상의 인식된 문자, 상기 하나 이상의 인식된 문자 시퀀스, 또는 양자 모두와 정합할 때, 상기 하나 이상의 인식된 문자, 상기 하나 이상의 인식된 문자 시퀀스, 또는 양자 모두를 포함하는 포지션을 갖는 상기 현재의 스크린샷 프레임에서의 그래픽 엘리먼트를 활성 엘리먼트로서 설정하게 하도록
    구성되는 것인, 비-일시적 컴퓨터-판독가능 매체.
  16. 제 15 항에 있어서,
    상기 프로그램은 또한, 상기 적어도 하나의 프로세서로 하여금,
    컴퓨팅 시스템과의 사용자 상호작용에 속하는 하나 이상의 사용자 제스처를 결정하게 하고;
    상기 하나 이상의 결정된 사용자 제스처에 기초하여, 페이스트가 발생하였는지 여부를 결정하게 하고; 그리고
    상기 페이스트가 발생하였을 때, 상기 페이스팅된 텍스트 검출 로직을 수행하게 하도록
    구성되는 것인, 비-일시적 컴퓨터-판독가능 매체.
  17. 제 15 항에 있어서,
    컨텐츠가 상기 시간 윈도우 내에서 상기 클립보드에 추가되지 않았을 때, 상기 프로그램은 또한, 상기 적어도 하나의 프로세서로 하여금,
    타이핑된 텍스트 검출, 캐럿 추적, 또는 양자 모두를 수행하게 하고; 그리고
    상기 타이핑된 텍스트, 상기 캐럿, 또는 양자 모두를 포함하는 상기 현재의 스크린샷 프레임에서의 활성 엘리먼트를 식별하게 하도록
    구성되는 것인, 비-일시적 컴퓨터-판독가능 매체.
  18. 제 15 항에 있어서,
    상기 프로그램은 로봇 프로세스 자동화(robotic process automation; RPA) 로봇인 것인, 비-일시적 컴퓨터-판독가능 매체.
  19. 제 15 항에 있어서,
    상기 현재의 스크린샷 프레임이 상기 이전의 스크린샷 프레임과 상이한 상기 하나 이상의 영역의 결정은,
    상기 현재의 스크린샷 프레임 및 상기 이전의 스크린샷 프레임을 미리 결정된 높이를 갖는 수평 행들로 분할하는 것;
    상기 행들이 동일한지 여부를 결정하기 위하여 상기 현재의 스크린샷 프레임 및 상기 이전의 스크린샷 프레임으로부터의 각각의 대응하는 행을 비교하는 것;
    행이 상기 현재의 스크린샷 프레임과 상기 이전의 스크린샷 프레임 사이에서 동일하지 않을 때, 상기 행을 추출하고 상기 행을 동일한 크기 블록들로 분할하는 것;
    상기 현재의 스크린샷 프레임과 상기 이전의 스크린샷 프레임에서의 각자의 블록들 사이에 차이가 존재하는지 여부를 결정하는 것; 및
    차이가 존재하는 블록들을 추출하는 것
    을 포함하고,
    영역에서의 블록들의 수가 미리 결정된 수를 초과할 때, 상기 현재의 스크린샷 프레임은 무시되고, 타이핑된 텍스트 검출 로직은 다음 스크린샷 프레임으로 진행하고,
    영역에서의 블록들의 수가 미리 결정된 수를 초과하지 않을 때, 상기 프로그램은 또한, 상기 적어도 하나의 프로세서로 하여금,
    인접한 블록들을 병합하게 하고;
    인접한 블록들의 각각의 세트에 대한 영역에 대한 경계설정 직사각형을 결정하게 하고;
    각각의 영역에 대한 픽셀 변경을 계산하고, 상기 픽셀 변경을 2진 행렬로 투사하게 하고;
    각각의 2진 행렬에서의 상기 하나 이상의 접속된 부재에 대한 접속된 부재 2진 행렬을 결정하게 하고;
    각각의 접속된 부재 2진 행렬을 크롭핑하게 하고;
    각각의 접속된 부재 2진 행렬에 대한 상기 현재의 스크린샷 프레임과 상기 이전의 스크린샷 프레임 사이의 각각의 변경된 픽셀에 대한 픽셀 데이터를 취출하게 하고; 그리고
    상기 취출된 픽셀 데이터를 이용하여 상기 OCR을 수행하게 하도록
    구성되는 것인, 비-일시적 컴퓨터-판독가능 매체.
  20. 클립보드 컨텐츠가 존재하고 시간 윈도우 동안에 추가되었을 때, 로봇 프로세스 자동화(RPA)를 위한 페이스팅된 텍스트 검출을 위한 컴퓨터-구현 방법에 있어서,
    RPA 로봇에 의해, 현재의 스크린샷 프레임이 이전의 스크린샷 프레임과 상이한 하나 이상의 영역을 결정하는 단계 - 상기 현재의 스크린샷 프레임 및 상기 이전의 스크린샷 프레임은 디스플레이의 전체 스크린 또는 그 일부분을 포함함 -;
    상기 RPA 로봇에 의해, 상기 하나 이상의 결정된 영역에서의 하나 이상의 접속된 부재를 추출하고 상기 추출된 하나 이상의 접속된 부재 상에서 광학적 문자 인식(OCR)을 수행하여, 하나 이상의 인식된 문자, 하나 이상의 인식된 문자 시퀀스, 또는 양자 모두와, 각자의 포지션들을 생성하는 단계;
    상기 RPA 로봇에 의해, 상기 클립보드 컨텐츠를 상기 하나 이상의 인식된 문자, 상기 하나 이상의 인식된 문자 시퀀스, 또는 양자 모두와 비교하는 단계; 및
    상기 클립보드 컨텐츠가 상기 하나 이상의 인식된 문자, 상기 하나 이상의 인식된 문자 시퀀스, 또는 양자 모두와 정합할 때, 상기 RPA 로봇에 의해, 상기 하나 이상의 인식된 문자, 상기 하나 이상의 인식된 문자 시퀀스, 또는 양자 모두를 포함하는 포지션을 갖는 상기 현재의 스크린샷 프레임에서의 그래픽 엘리먼트를 활성 엘리먼트로서 설정하는 단계
    를 포함하는, 컴퓨터-구현 방법.
KR1020207028239A 2020-05-01 2020-09-21 텍스트 검출, 캐럿 추적, 및 활성 엘리먼트 검출 KR102297355B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US16/864,629 US11080548B1 (en) 2020-05-01 2020-05-01 Text detection, caret tracking, and active element detection
US16/864,629 2020-05-01
US16/865,886 US11068738B1 (en) 2020-05-01 2020-05-04 Text detection, caret tracking, and active element detection
US16/865,886 2020-05-04
PCT/US2020/051868 WO2021221711A1 (en) 2020-05-01 2020-09-21 Text detection, caret tracking, and active element detection

Publications (1)

Publication Number Publication Date
KR102297355B1 true KR102297355B1 (ko) 2021-09-01

Family

ID=77780130

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020207028239A KR102297355B1 (ko) 2020-05-01 2020-09-21 텍스트 검출, 캐럿 추적, 및 활성 엘리먼트 검출

Country Status (3)

Country Link
EP (1) EP3905132A1 (ko)
JP (1) JP7115804B2 (ko)
KR (1) KR102297355B1 (ko)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20170242676A1 (en) * 2016-02-18 2017-08-24 Airbus Operations (S.A.S.) Control system enabling comparison between two character strings and method of installing a new configuration in an aircraft
KR20190095651A (ko) * 2018-02-07 2019-08-16 삼성에스디에스 주식회사 문자 학습 트레이닝 데이터 생성 장치 및 그 방법
US20190324781A1 (en) * 2018-04-24 2019-10-24 Epiance Software Pvt. Ltd. Robotic script generation based on process variation detection
US20200050848A1 (en) * 2018-03-15 2020-02-13 Sureprep, Llc System and method for automatic detection and verification of optical character recognition data

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06274679A (ja) * 1993-03-19 1994-09-30 Nec Eng Ltd 文字読取装置
JP4394595B2 (ja) 2005-03-17 2010-01-06 Necディスプレイソリューションズ株式会社 画像送信装置及び画像伝送方法
US9495534B2 (en) 2013-03-26 2016-11-15 International Business Machines Corporation OCR-based single sign-on
US9179096B2 (en) * 2013-10-11 2015-11-03 Fuji Xerox Co., Ltd. Systems and methods for real-time efficient navigation of video streams
US20160078115A1 (en) * 2014-09-16 2016-03-17 Breach Intelligence LLC Interactive System and Method for Processing On-Screen Items of Textual Interest
US20160349928A1 (en) 2015-05-27 2016-12-01 International Business Machines Corporation Generating summary of activity on computer gui
WO2017001560A1 (en) * 2015-07-02 2017-01-05 Accenture Global Services, Ltd. Robotic process automation
EP3112965A1 (en) 2015-07-02 2017-01-04 Accenture Global Services Limited Robotic process automation
US9779293B2 (en) 2016-01-27 2017-10-03 Honeywell International Inc. Method and tool for post-mortem analysis of tripped field devices in process industry using optical character recognition and intelligent character recognition
US10637674B2 (en) 2017-06-07 2020-04-28 Tg-17, Inc. System and method for real-time decoding and monitoring for encrypted instant messaging and other information exchange applications

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20170242676A1 (en) * 2016-02-18 2017-08-24 Airbus Operations (S.A.S.) Control system enabling comparison between two character strings and method of installing a new configuration in an aircraft
KR20190095651A (ko) * 2018-02-07 2019-08-16 삼성에스디에스 주식회사 문자 학습 트레이닝 데이터 생성 장치 및 그 방법
US20200050848A1 (en) * 2018-03-15 2020-02-13 Sureprep, Llc System and method for automatic detection and verification of optical character recognition data
US20190324781A1 (en) * 2018-04-24 2019-10-24 Epiance Software Pvt. Ltd. Robotic script generation based on process variation detection

Also Published As

Publication number Publication date
EP3905132A1 (en) 2021-11-03
JP7115804B2 (ja) 2022-08-09
JP2022531026A (ja) 2022-07-06

Similar Documents

Publication Publication Date Title
KR102446521B1 (ko) 로보틱 프로세스 자동화를 위한 로봇 실행의 스크린 응답 검증
US11630549B2 (en) Text detection, caret tracking, and active element detection
US11594007B2 (en) Text detection, caret tracking, and active element detection
KR102297356B1 (ko) 텍스트 검출, 캐럿 추적, 및 활성 엘리먼트 검출
KR102297355B1 (ko) 텍스트 검출, 캐럿 추적, 및 활성 엘리먼트 검출
KR102373943B1 (ko) 텍스트 검출, 캐럿 추적, 및 활성 엘리먼트 검출
EP3905038A1 (en) Screen response validation of robot execution for robotic process automation

Legal Events

Date Code Title Description
GRNT Written decision to grant