Классовое взаимодействие в Python - где лучше всего класть тяжелые вычисления? - PullRequest
0 голосов
/ 11 июля 2020

у меня есть 2 класса в 2 файлах:

image_recognition.py:

import cv2
from numpy import asarray

class ImageRecognizer():
    from tensorflow.keras.models import load_model  #takes some time to import
    classifier=load_model('model')                  #takes some time to load
    
    def __init__(self,<some variables>):
        self.<some variables>=<some variables>
        
    def recognize(self,image):
        <some fast calculations>
        classifier_output = self.classifier.predict(image)
        <some fast calculations>
        return category

screenshot_dismember.py:

from image_recognition import ImageRecognizer  #takes some time to import because of importing load_mode and loading the model
import cv2
from numpy import asarray
import os

class GetStuffFromScreenshot:
        def __init__(self,<some variables>):
            self.<some variables>=<some variables>
        
        def get_stuff(self, screenshot):
            <takes some parts of the screenshot>
            return list_of_images
        
        def categotize_images(self, screenshot):
            list_of_images = self.get_score(screenshot)
            image_recognizer = ImageRecognizer()
            category1 = image_recognizer.recognize(list_of_images[0])
            ...
            category10 = image_recognizer.recognize(list_of_images[10])
            return list_of_categories
    
    

main.py:

from screenshot_dismember import GetStuffFromScreenshot

from PIL import ImageGrab
import cv2
import os
import numpy as np

<take screenshot, preprocess it>
get_stuff_from_screenshot = GetStuffFromScreenshot()
list_of_categories = get_stuff_from_screenshot.caregorize_images(screenshot)

Будет ли трудоемкая часть импорта load_model и загрузки весов выполняться один раз в начале скрипта в

from screenshot_dismember import GetStuffFromScreenshot

, потому что, в свою очередь, это будет

from image_recognition import ImageRecognizer

или это будет повторяться снова и снова, создавая новые объекты image_recognizer класса ImageRecognizer, когда я буду использовать метод categotize_images из класса GetStuffFromScreenshot? Или, может быть, было бы лучше отказаться от использования метода get_stuff методом categotize_images, а также вложенных классов, удалив

from image_recognition import ImageRecognizer

из screenshot_dismember.py и добавив его в основной скрипт и изменив его на:

from screenshot_dismember import GetStuffFromScreenshot
from image_recognition import ImageRecognizer

from PIL import ImageGrab
import cv2
import os
import numpy as np    
<take screenshot, preprocess it>
get_stuff_from_screenshot = GetStuffFromScreenshot()
list_of_images = get_stuff_from_screenshot.get_stuff(screenshot)
image_recognizer = ImageRecognizer()
list_of_categories = []
for image in list_of_images:
    category = image_recognizer.recognize(image)
    list_of_categories.append(category)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...