Копировать подпись с изображения на движение мыши - PullRequest
0 голосов
/ 12 января 2020

Я пытаюсь сделать изображение jpg, которое представляет собой черно-белую подпись, и использую python, чтобы имитировать c движение мыши, которое подпишет его снова.

В настоящее время я использую cv2.imread(file_name, 1), чтобы открыть файл изображения,

Затем я использую numpy.all(image == [0, 0, 0], axis=-1), чтобы превратить изображение в массив истинного (все черные пиксели) и ложного

И затем я использую два для циклов go бросить массив и ActionChains для имитации перехода к местоположению черного пикселя и щелкнуть один раз.

У меня есть несколько проблем с этим методом:

  1. Если изображение имеет большой размер или много черных пикселей, поэтому для окончательного sh нажатия всех пикселей требуется очень много времени
  2. Одиночные щелчки не имитируют c движения, поэтому холст, на котором я рисую получить результат, который не является точным, потому что он использует какое-то размытие или что-то, что должно выглядеть более естественно, когда люди используют свою мышь, чтобы подписать, и если подпись на рисунке слишком тонкая, так что результаты имеют небольшие промежутки между точками
* 10 19 *signatures example

Я ищу способ разобрать изображения и преобразовать их в список движений и изменить команды ActionChains на что-то подобное :

ActionChains(driver).move_to_element(element).click_and_hold() \
    .move_by_offset(0, 1) \
    .move_by_offset(0, 1) \
    .move_by_offset(-1, 1) \
    .move_by_offset(-1, 0) \
    .move_by_offset(-8, 8) \
    .move_by_offset(-1, 0) \
    .move_by_offset(-1, 1) \
    .move_by_offset(-1, 0) \
    .move_by_offset(-1, 1) \
    .move_by_offset(-1, 1) \
    .move_by_offset(-1, 1) \
    .release().perform()

, который займет намного меньше времени и сможет обрабатывать большие подписи

Код (URL-адрес холста действителен, так что вы можете проверить его, просто используйте местный jpg):

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import cv2
import numpy as np

driver = webdriver.Chrome("../drivers/chromedriver.exe")
driver.get("http://szimek.github.io/signature_pad/")

element = driver.find_element_by_xpath("//canvas")

file_name = "C:/temp/signatures/adi.jpg"
image = cv2.imread(file_name, 1)
arr = np.all(image == [0, 0, 0], axis=-1)
actions = ActionChains(driver)

for x in range(len(arr)):
    for y in range(len(arr[0])):
        if arr[x][y]:
            actions.move_to_element_with_offset(element, y, x).click()

actions.perform()

Спасибо.

...