第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

面向?qū)ο蟮膱D像多處理

面向?qū)ο蟮膱D像多處理

動(dòng)漫人物 2023-02-22 19:10:41
我想使用 multiprocessing 與我的班級(jí)并行分析多張圖像:class SegmentationType(object):    DISPLAY_NAME = "invalid"    def __init__(self, filename, path):        self.filename = filename        self.path = path        self.input_data = None        self.output_data = None    def read_image(self):        self.input_data =  cv2.imread(self.path + self.filename)[1]    def write_image(self):        cv2.imwrite(self.path + self.filename.split('.')[0] + '_' + self.DISPLAY_NAME + '.png', self.output_data)    def process(self):        # override in derived classes to perform an actual segmentation        pass    def start_pipeline(self):        self.read_image()        self.process()        self.write_image()class HSV_Segmenter(SegmentationType):    DISPLAY_NAME = 'HSV'    def process(self):        source = rgb_to_hsv(self.input_data)        self.output_data = treshold_otsu(source)class LabSegmenter(SegmentationType):    DISPLAY_NAME = 'LAB'    def process(self):        source = rgb_to_lab(self.input_data)        self.output_data = global_threshold(source)segmenter_class = {'hsv': HSV_Segmentation,'lab': LAB_Segmenter}.get(procedure)if not segmenter_class:    raise ArgumentError("Invalid segmentation method '{}'".format(procedure))for img in images:    os.chdir(img_dir)    processor =  = segmenter_class(img, img_dir, procedure)    processor.start_pipeline()但是,我不確定如何調(diào)用地圖功能:image_lst = os.listdir(my_image_path)# We split the list into sublist with 5 elements because of 512 GB RAM limitationif len(image_lst) > 4:    nr_of_sublists = int(len(image_lst)/2.5)    image_sub_lst  =np.array_split(image_lst, nr_of_sublists)else:    image_sub_lst = [image_lst]# We do the analysis for each sublistfor sub_lst in image_sub_lst:    print (sub_lst)    pool = multiprocessing.Pool(8)        # Call the processor     processor =  = segmenter_class(img, img_dir, procedure)    processor.start_pipeline()    # How to call map???    pool.map(?, sub_lst)    pool.terminate()    
查看完整描述

1 回答

?
慕婉清6462132

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超2個(gè)贊

你必須用對(duì)創(chuàng)建列表(filename, path)


data = [(img, img_dir) for img in images]

然后 map 將在單獨(dú)的進(jìn)程中運(yùn)行每一對(duì)。


但你必須args進(jìn)去start_pipeline


    def start_pipeline(self, args):

        print('ok starting')

        

        filename, path = args

        print('filename: {}\npath: {}'.format(filename, path))

        

        return self.process()

你必須使用()創(chuàng)建類(lèi)的實(shí)例segmenter_class來(lái)使用start_pipeline


pool.map(segmenter_class().start_pipeline, data)

順便說(shuō)一句:在示例代碼中,我還返回了過(guò)程的結(jié)果。


import os

import multiprocessing


class SegmentationType(object):

    DISPLAY_NAME = "invalid"


    def __init__(self):

        print('init')


    def read_image(self):

        print('read')


    def write_image(self):

        print('write')


    def process(self):

        # override in derived classes to perform an actual segmentation

        pass


    def start_pipeline(self, args):

        print('ok starting')

        

        filename, path = args

        print('filename: {}\npath: {}'.format(filename, path))

        

        return self.process()


class HSV_Segmenter(SegmentationType):

    DISPLAY_NAME = 'HSV'


    def process(self):

        print('ok HSV')

        return "result HSV"

    

class LabSegmenter(SegmentationType):

    DISPLAY_NAME = 'LAB'


    def process(self):

        print('ok LAB')

        return "result LAB"


if __name__ == '__main__':


    procedure = 'hsv'

    

    segmenter_class = {

        'hsv': HSV_Segmenter,

        'lab': LabSegmenter,

    }.get(procedure)

    

    images = ['01.png', '02.png', '03.png']

    img_dir = 'C:/'

    

    data = [(img, img_dir) for img in images]

    

    pool = multiprocessing.Pool(3)


    # example 1


    results = pool.map(segmenter_class().start_pipeline, data)

    print('Results:', results)


    # example 2


    for result in pool.map(segmenter_class().start_pipeline, data):

        print('result:', result)


    pool.terminate()

編輯:


您還可以創(chuàng)建獲取然后使用它的函數(shù)procedure-data這樣map每個(gè)進(jìn)程都會(huì)創(chuàng)建自己的實(shí)例,procedure或者您可以將不同的過(guò)程發(fā)送到不同的進(jìn)程。


import os

import multiprocessing


class SegmentationType(object):

    DISPLAY_NAME = "invalid"


    def __init__(self):

        print('init')


    def read_image(self):

        print('read')


    def write_image(self):

        print('write')


    def process(self):

        # override in derived classes to perform an actual segmentation

        pass


    def start_pipeline(self, args):

        print('ok starting')

        

        filename, path = args

        print('filename: {}\npath: {}'.format(filename, path))

        

        return self.process()


class HSV_Segmenter(SegmentationType):

    DISPLAY_NAME = 'HSV'


    def process(self):

        print('ok HSV')

        return "result HSV"

    

class LabSegmenter(SegmentationType):

    DISPLAY_NAME = 'LAB'


    def process(self):

        print('ok LAB')

        return "result LAB"


segmenters = {

    'hsv': HSV_Segmenter,

    'lab': LabSegmenter,

}


def start_process(args):


    procedure = args[0]

    data = args[1:]


    segmenter_class = segmenters.get(procedure)

    result = segmenter_class().start_pipeline(data)


    return result

    

if __name__ == '__main__':


    procedure = 'hsv'

    

    images = ['01.png', '02.png', '03.png']

    img_dir = 'C:/'

    

    data = [(procedure, img, img_dir) for img in images]

    

    pool = multiprocessing.Pool(3)


    # example 1


    results = pool.map(start_process, data)

    print('Results:', results)


    # example 2


    for result in pool.map(segmenter_class().start_pipeline, data):

        print('result:', result)


    pool.terminate()

不同程序的示例


if __name__ == '__main__':


    images = ['01.png', '02.png', '03.png']

    img_dir = 'C:/'

    

    pool = multiprocessing.Pool(3)


    data = [('hsv', img, img_dir) for img in images]

    results = pool.map(start_process, data)

    print('Results HSV:', results)


    data = [('lab', img, img_dir) for img in images]

    results = pool.map(start_process, data)

    print('Results LAB:', results)


    pool.terminate()

和一個(gè)一樣map()。有 6 個(gè)進(jìn)程要啟動(dòng),Pool(3)因此它只會(huì)同時(shí)運(yùn)行 3 個(gè)進(jìn)程,當(dāng)它有空閑進(jìn)程時(shí),map將從列表中獲取下一個(gè)值并運(yùn)行進(jìn)程。


if __name__ == '__main__':


    images = ['01.png', '02.png', '03.png']

    img_dir = 'C:/'

    

    data_hsv = [('hsv', img, img_dir) for img in images]

    data_lab = [('lab', img, img_dir) for img in images]

    

    data = data_hsv + data_lab


    pool = multiprocessing.Pool(3)


    # example 1


    results = pool.map(start_process, data)

    print('Results:', results)


    # example 2


    for result in pool.map(start_process, data):

        print('results:', result)


    pool.terminate()

編輯:

它也適用于Ray

它只需要

from ray.util import multiprocessing

代替

import multiprocessing

我沒(méi)有用Dask、PySparkJoblib測(cè)試它


編輯:

Joblib示例

from joblib import Parallel, delayed


class SegmentationType(object):

    DISPLAY_NAME = "invalid"


    def __init__(self):

        print('init')


    def read_image(self):

        print('read')


    def write_image(self):

        print('write')


    def process(self):

        # override in derived classes to perform an actual segmentation

        pass


    def start_pipeline(self, args):

        print('ok starting')

        

        filename, path = args

        print('filename: {}\npath: {}'.format(filename, path))

        

        return self.process()


class HSV_Segmenter(SegmentationType):

    DISPLAY_NAME = 'HSV'


    def process(self):

        print('ok HSV')

        return "result HSV"


class LabSegmenter(SegmentationType):

    DISPLAY_NAME = 'LAB'


    def process(self):

        print('ok LAB')

        return "result LAB"


segmenters = {

    'hsv': HSV_Segmenter,

    'lab': LabSegmenter,

}


def start_process(args):

    

    procedure = args[0]

    data = args[1:]

    

    segmenter_class = segmenters.get(procedure)

    result = segmenter_class().start_pipeline(data)

    

    return result


if __name__ == '__main__':


    images = ['01.png', '02.png', '03.png']

    img_dir = 'C:/'

    

    data_hsv = [('hsv', img, img_dir) for img in images]

    data_lab = [('lab', img, img_dir) for img in images]

    

    data = data_hsv + data_lab


    # --- version 1 ---


    #pool = Parallel(n_jobs=3, backend='threading')

    #pool = Parallel(n_jobs=3, backend='multiprocessing')

    pool = Parallel(n_jobs=3)

    

    # example 1

    

    results = pool( delayed(start_process)(args) for args in data )

    print('Results:', results)


    # example 2

    

    for result in pool( delayed(start_process)(args) for args in data ):

        print('result:', result)


    # --- version 2 ---

    

    #with Parallel(n_jobs=3, backend='threading') as pool:

    #with Parallel(n_jobs=3, backend='multiprocessing') as pool:

    with Parallel(n_jobs=3) as pool:


        # example 1

        

        results = pool( delayed(start_process)(args) for args in data )

        print('Results:', results)


        # example 1


        for result in pool( delayed(start_process)(args) for args in data ):

            print('result:', result)


查看完整回答
反對(duì) 回復(fù) 2023-02-22
  • 1 回答
  • 0 關(guān)注
  • 61 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)