Pixellib, TensorFlow ускорение вычислений

Начал увлекаться анализом изображений на основе языка python.

Прочел несколько статей и выбрал подходящую для своего проекта библиотеку pixellib.

При написании скрипта задумался над проблемой многопточности.

Немного о времени работы:

  1. Загрузка сайта и скачивание изображения - 12 секунд.
  2. Анализ одного изображения - 15 секунд.
  3. Пункт 1 + Анализ двух изображений - 42 секунды.

Соответственно при анализе ещё одного изображения время увеличивается на 15 секунд.

Я принял решение сделать скрипт многопоточным, но время выполнения уменьшилось на 4-6 секунд (при 10 изображениях). Что довольно мало при больших объёмах изображений.

Исходный код скрипта:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.remote.webdriver import WebDriver
from selenium.webdriver.chrome import service
from selenium.webdriver.chrome.options import Options
from PIL import Image
from io import BytesIO
import time
import urllib
import urllib.request
from pixellib.instance import instance_segmentation

start_time = time.time()
options = webdriver.ChromeOptions()
options.add_argument("--lang=en")
driver = webdriver.Chrome("C:/Users/alexp/chromedriver.exe", chrome_options=options)
driver.get("url")
time.sleep(1)
driver.find_element_by_xpath("/html/body/div/").click()
time.sleep(1)
text = driver.find_element_by_xpath("/html/body/div").text
time.sleep(1)
img_url = "body > div.challenge-container > div"
iframe01 = driver.find_element_by_css_selector(img_url)
cssval = iframe01.value_of_css_property("background-image")
destination = "element1.png"
urllib.request.urlretrieve(cssval, destination)

segment_image = instance_segmentation(infer_speed = "fast" )
segment_image.load_model("C:\\Users\\alex\\work\\mask_rcnn_coco.h5")
if text == "1":
    target_class = segment_image.select_target_classes(person=True)
elif text == "2":
    target_class = segment_image.select_target_classes(car=True)

result = segment_image.segmentImage(
    image_path="element1.png",
    segment_target_classes=target_class,
)

objects_count = len(result[0]["scores"])
if objects_count > 0:
    urll = f"body > div.challenge-container > div[1]"
    iframe = driver.find_element_by_css_selector(urll).click()

finish_time = time.time() - start_time
print(f"Время затраченное на работу: {finish_time}")

По итогу всех возможных манипуляций я так и не смог сократить время работы скрипта. Уже пробовал: multiprocessing, threading.

Моя цель - уменьшение времени обработки изображений, например: обработка всех изображений (5-10 шт.) за время обработки (1-2 шт.)

Буду рад каждому предложению или исправлению!


Ответы (0 шт):