рд╣рдо рдХреНрд▓рд╛рд╕рд┐рдХ рдПрдордПрд▓ рдХреА рдорджрдж рд╕реЗ рдкреЗрдВрдЯрд┐рдВрдЧ рдХреА рдЙрддреНрдХреГрд╖реНрдЯ рдХреГрддрд┐рдпреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реИрдВ

рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░! рдореЗрд░рд╛ рдПрдХ рджреЛрд╕реНрдд рдПрдХ рдХрд▓рд╛рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдзреНрдпрдпрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рдпрд╛ рдЙрд╕ рдЙрддреНрдХреГрд╖реНрдЯ рдХреГрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддрд╛ рд╣реИ, рдЕрдиреВрдареА рд░рдЪрдирд╛ рддрдХрдиреАрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рд░рдВрдЧ рдзрд╛рд░рдгрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдЪрд┐рддреНрд░рдХрд▓рд╛ рдФрд░ рд╢рд╛рдирджрд╛рд░ рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рдЗрд╕ рдирд┐рд░рдВрддрд░ рдкреНрд░рднрд╛рд╡ рдХреА рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рдЦрд┐рд▓рд╛рдл, рдореИрдВрдиреЗ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдХрд┐ рдХреНрдпрд╛ рдореЗрд░рд╛ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдЬреНрдЮрд╛рди рдФрд░ рдХреМрд╢рд▓ рд╡рд┐рд╢реНрд╡ рд╕рд╛рдВрд╕реНрдХреГрддрд┐рдХ рд╡рд┐рд░рд╛рд╕рдд рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИрдВред

рд░рд╛рдд рдХреЗ рдХрд╡рд░ рдХреЗ рдиреАрдЪреЗ рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдкрд╛рд░реНрд╕рд░ рдХреЗ рд╕рд╛рде рд╕рд╢рд╕реНрддреНрд░, рдореИрдВ рдСрдирд▓рд╛рдЗрди рдЧреИрд▓рд░реА рдореЗрдВ рдлрдЯ рдЧрдпрд╛ рдФрд░ рд╡рд╣рд╛рдВ рд╕реЗ рд▓рдЧрднрдЧ 50 рд╣рдЬрд╛рд░ рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рдмрд╛рд╣рд░ рд▓рд╛рдпрд╛ред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рдХреЗрд╡рд▓ рдХреНрд▓рд╛рд╕рд┐рдХ рдПрдордПрд▓ рдЯреВрд▓реНрд╕ (рд╕рд╛рд╡рдзрд╛рдиреА, рдпрд╛рддрд╛рдпрд╛рдд) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред

рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓


рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдореЗрдВ рд╕реЗ рдХрдИ рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд┐рдЬреНрдЮрд╛рди рдХреЗ рдкрд╛рда рд╕реЗ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ рдЫрд╡рд┐ рдХреЛ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдПрдХ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд░рдВрдЧ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВред рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдХ рдЖрд░рдЬреАрдмреА рдпреЛрдЬрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд░рдВрдЧ рдХреЛ рддреАрди рдШрдЯрдХреЛрдВ (рд▓рд╛рд▓ / рд╣рд░реЗ / рдиреАрд▓реЗ) рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдПрдХ рдХрд╛рд▓реЗ рд░рдВрдЧ рдХреА рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рд╕рд╛рде рдЕрднрд┐рд╡реНрдпрдХреНрдд рд╣реЛрдиреЗ рдкрд░, рдПрдХ рд╡реНрдпрдХреНрддрд┐ рджреНрд╡рд╛рд░рд╛ рдореВрд▓ рдореВрд▓ рд░рдВрдЧ рджреЗрддреЗ рд╣реИрдВред

рдЪреВрдВрдХрд┐ рдЕрдм рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕рднреА рдорд╛рд╕реНрдЯрд░рдкреАрд╕ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдбрд┐рд╕реНрдХ рдкрд░ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдХреЗрд╡рд▓ рд╕рд░рдгрд┐рдпрд╛рдВ рдмрди рдЧрдП рд╣реИрдВ, рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдЪреИрдирд▓ рдХреЗ рд▓рд┐рдП рддреАрд╡реНрд░рддрд╛ рдЖрд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рд╡рд┐рддрд░рдг рдХреЗ рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдо рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдХреЗ рдЗрди рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗред

рд╣рдо рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдФрд░ matplotlib рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВрдЧреЗред

рд╕реНрд░реЛрдд
#      
def load_image_by_index(i):
    image_path = paintings_links.iloc[i].img_path
    img = cv2.imdecode(np.fromfile(str(Path.cwd()/image_path), np.uint8), cv2.IMREAD_UNCHANGED)
    return img    
#    
def get_hist_data_by_index(img_index):
    bin_div = 5 
    img = load_image_by_index(img_index)
    b, bins=  np.histogram(img[:,:,0], bins=255//bin_div, range=(0,255), density=True)
    g = np.histogram(img[:,:,1], bins=255//bin_div, range=(0,255), density=True)[0]
    r = np.histogram(img[:,:,2], bins=255//bin_div, range=(0,255), density=True)[0]
    return bins, r, g, b
#       
def plot_image_with_hist_by_index(img_index, height=6):
    bins, r, g, b = get_hist_data_by_index(img_index)
    img = load_image_by_index(img_index)
    fig = plt.figure(constrained_layout=True)

    if img.shape[0] < img.shape[1]:
        width_ratios = [3,1]
    else:
        width_ratios = [1,1]
        
    gs = GridSpec(3, 2, figure=fig, 
                  width_ratios = [3,1]
                 )
    ax_img = fig.add_subplot(gs[:,0])

    ax_r = fig.add_subplot(gs[0, 1])
    ax_g = fig.add_subplot(gs[1, 1], sharey=ax_r)
    ax_b = fig.add_subplot(gs[2, 1], sharey=ax_r)

    ax_img.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB),aspect = 'equal')
    ax_img.axis('off')
    
    ax_r.bar(bins[:-1], r, width = 5, color='red',alpha=0.7)
    ax_g.bar(bins[:-1], g, width = 5, color='green',alpha=0.7)
    ax_b.bar(bins[:-1], b, width = 5, color='blue',alpha=0.7)

    ax_r.axes.get_xaxis().set_ticks([])
    ax_r.axes.get_yaxis().set_ticks([])
    ax_g.axes.get_xaxis().set_ticks([])
    ax_g.axes.get_yaxis().set_ticks([])
    ax_b.axes.get_xaxis().set_ticks([])
    ax_b.axes.get_yaxis().set_ticks([])
    fig.suptitle("{} - {}".format(paintings_links.iloc[img_index].artist_name, 
                                 paintings_links.iloc[img_index].picture_name),ha= "left")
    
    fig.set_figheight(height)
    plt.axis('tight')
    if img.shape[0] < img.shape[1]:
        fig.set_figwidth(img.shape[1] *height / img.shape[0] *1.25)
    else:
        fig.set_figwidth(img.shape[1] *height / img.shape[0] *1.5)
    plt.show()


рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг:









рд╡рд┐рднрд┐рдиреНрди рдЪрд┐рддреНрд░реЛрдВ рдХреЗ рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдо рдХреЛ рдзреНрдпрд╛рди рд╕реЗ рджреЗрдЦрдиреЗ рдкрд░, рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЙрдирдХрд╛ рд░реВрдк рдмрд╣реБрдд рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИ рдФрд░ рдХрд╛рдо рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИред

рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ, рд╣рдо рдпрд╣ рдзрд╛рд░рдгрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ рдХрд┐ рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдо рддрд╕реНрд╡реАрд░ рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ, рдЬреЛ рдЗрд╕реЗ рдХреБрдЫ рд╣рдж рддрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рджреЗрддрд╛ рд╣реИред

рдкрд╣рд▓рд╛ рдореЙрдбрд▓


рд╣рдо рд╕рднреА рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдо рдХреЛ рдПрдХ рдмрдбрд╝реЗ рдбреЗрдЯрд╛рд╕реЗрдЯ рдореЗрдВ рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдореЗрдВ рдХреБрдЫ "рд╡рд┐рд╕рдВрдЧрддрд┐рдпреЛрдВ" рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред рдРрд╕реЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рддреЗрдЬрд╝, рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рдЖрдо рддреМрд░ рдкрд░ рдореЗрд░рд╛ рдкрд╕рдВрджреАрджрд╛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдПрдХ рд╡рд░реНрдЧ svm рд╣реИред рд╣рдо рд╕реНрдХреЗрд▓реЗрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ

рд╕реНрд░реЛрдд
#       ,       
res = []
error = []
for img_index in tqdm(range(paintings_links.shape[0])):
    try:
        bins, r, g, b = get_hist_data_by_index(img_index)
        res.append(np.hstack([r,g,b]))
    except:
        res.append(np.zeros(153,))
        error.append(img_index)
        
np_res = np.vstack(res)
#    
pd.DataFrame(np_res).to_pickle("histograms.pkl")
histograms = pd.read_pickle("histograms.pkl")
#  .         .   10    
one_class_svm = OneClassSVM(nu=10 / histograms.shape[0], gamma='auto')
one_class_svm.fit(histograms[~histograms.index.isin(bad_images)])
#  
svm_outliers = one_class_svm.predict(histograms)
svm_outliers = np.array([1 if label == -1 else 0 for label in svm_outliers])
#   
uncommon_images = paintings_links[(svm_outliers ==1) & (~histograms.index.isin(bad_images))].index.values
for i in uncommon_images:
    plot_image_with_hist_by_index(i,4)


рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдореЗрдВ рдЕрдкрдиреА рдЧреИрд▓рд░реА рдХреЗ рдбрд┐рдмреНрдмреЗ рдореЗрдВ рдХреНрдпрд╛ рд╡рд┐рд╕рдВрдЧрддрд┐ рд╣реИред

рдкреЗрдВрд╕рд┐рд▓ рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛


рдХрд╛рдо : рдмрд╣реБрдд рдЧрд╣рд░реЗ рд░рдВрдЧреЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдВ:

рд▓реЗрдбреА рдЗрди рд░реЗрдб:

рд╕рдордерд┐рдВрдЧ рд╕реНрдХреЗрдЪ:

рд╡реЗрд░реА рдбрд╛рд░реНрдХ рдкреЛрд░реНрдЯреНрд░реЗрдЯ:


рд╕рдорд╛рди рдиреМрдХрд░рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬреЗрдВ


рдЦреИрд░, рд╣рдорд╛рд░рд╛ рдореЙрдбрд▓ рдХреБрдЫ рдЕрд╕рд╛рдорд╛рдиреНрдп рд╣реИ, рдмрд╛рдХреА рд╕рдм рдЪреАрдЬреЛрдВ рд╕реЗ рдмрд╣реБрдд рджреВрд░ред

рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣рдо рдПрдХ рдРрд╕рд╛ рдЙрдкрдХрд░рдг рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд░рдВрдЧ рдореЗрдВ рд╕рдорд╛рди рдХрд╛рдо рдЦреЛрдЬрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛?

рдЕрдм рдкреНрд░рддреНрдпреЗрдХ рдЪрд┐рддреНрд░ рдХреЛ 153 рдорд╛рдиреЛрдВ рдХреЗ рд╡реЗрдХреНрдЯрд░ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдо рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдкреНрд░рддрд┐ рдмрд┐рди 5 рддреАрд╡реНрд░рддрд╛ рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЛ рд╣рд┐рдЯ рдХрд░рддрд╛ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдЪреИрдирд▓ рдХреЗ рд▓рд┐рдП рдХреБрд▓ 255/5 = 51 рдЖрд╡реГрддреНрддрд┐рдпреЛрдВ)ред

рд╣рдо рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмреНрдпрд╛рдЬ рдХреА рд╡реИрдХреНрдЯрд░ рдХреЗ рдмреАрдЪ рдХреА рджреВрд░реА рдХреА рдЧрдгрдирд╛ рдХрд░рдХреЗ "рд╕рдорд╛рдирддрд╛ рдХреА рдбрд┐рдЧреНрд░реА" рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рд╕реНрдХреВрд▓ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдпреВрдХреНрд▓рд┐рдбрд┐рдпрди рджреВрд░реА рд╡реЗрдХреНрдЯрд░ рдШрдЯрдХреЛрдВ рдХреА рд▓рдВрдмрд╛рдИ рдкрд░ рдмрд╣реБрдд рдзреНрдпрд╛рди рджреЗрдЧреА, рдФрд░ рд╣рдо рдЫрд╛рдпрд╛ рдХреЗ рд╕реЗрдЯ рдкрд░ рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ рдЬреЛ рдЪрд┐рддреНрд░ рдмрдирд╛рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рд╣рдо рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдХреЛрд╕рд╛рдЗрди рдорд╛рдк, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд╛рда рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рдкрд╛рдПрдВрдЧреЗред рдЖрдЗрдП рдЗрд╕ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рд╣рдо рд╕реНрдХреИрдкреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓реЗрддреЗ рд╣реИрдВред

рд╕реНрд░реЛрдд
#  ,        
from scipy import spatial
def find_closest(target_id,n=5):
    distance_vector = np.apply_along_axis(spatial.distance.cosine,
                        arr=histograms,
                       axis=1,
                       v=histograms.values[target_id])
    return np.argsort(distance_vector)[:n]


рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдРрд╡рд╛рдЬрд╝реЛрд╡реНрд╕реНрдХреА рдХрд╛ "рдиреМрдВрд╡реА рд╡реЗрд╡" рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред

рдореВрд▓:



рд╕рдорд╛рди рдХрд╛рд░реНрдп:





рд╡рд╛рди рдЧрд╛рдЧ рдХреЗ "рдлреВрд▓ рдмрд╛рджрд╛рдо" рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред

рдореВрд▓:



рдЗрд╕реА рддрд░рд╣ рдХреЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:





рдФрд░ рдЬреЛ рдкрд╣рд▓реЗ рд▓рд╛рд▓ рд░рдВрдЧ рдореЗрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдПрдХ рд╡рд┐рд╖рдо рдорд╣рд┐рд▓рд╛ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ?

рдореВрд▓:



рд╕рдорд╛рди рдХрд╛рд░реНрдп:






рд░рдВрдЧ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди


рдЙрд╕ рдХреНрд╖рдг рддрдХ, рд╣рдордиреЗ RGB рд░рдВрдЧ рд╕реНрдерд╛рди рдореЗрдВ рдХрд╛рдо рдХрд┐рдпрд╛ред рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрджрд░реНрд╢ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрд░рдЬреАрдмреА рд░рдВрдЧ рдШрди рдХреЗ рдХрдЧрд╛рд░ рдкрд░,



рдирдЧреНрди рдЖрдВрдЦреЛрдВ рдХреЗ рд╕рд╛рде рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЪреЗрд╣рд░реЗ рдкрд░ рдмрдбрд╝реЗ рдХреНрд╖реЗрддреНрд░ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╣рдорд╛рд░реА рдЖрдБрдЦреЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рджреЗрдЦрддреА рд╣реИрдВ, рдФрд░ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЫреЛрдЯреЗ рдХреНрд╖реЗрддреНрд░ рдЬрд╣рд╛рдВ рд╣рдорд╛рд░реА рд░рдВрдЧ рдзрд╛рд░рдгрд╛ рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рдмрджрд▓рддреА рд╣реИред рдпрд╣ рдЧреИрд░-рд░реИрдЦрд┐рдХ рдзрд╛рд░рдгрд╛ рдорд╢реАрди рдХреЛ рд░рдВрдЧреЛрдВ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддреА рд╣реИ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рд╣реЛрдЧрд╛ред

рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдХрдИ рд░рдВрдЧ рд╕реНрдерд╛рди рд╣реИрдВ, рд╢рд╛рдпрдж рдХреБрдЫ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдлрд┐рдЯ рд╣реЛрдВрдЧреЗред

рд╣рдо рдПрдХ рдорд╛рдирд╡реАрдп рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдЗрд╕рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреА рддреБрд▓рдирд╛ рдХрд░рдХреЗ рдЕрдкрдирд╛ рдкрд╕рдВрджреАрджрд╛ рд░рдВрдЧ рд╕реНрдерд╛рди рдЪреБрдиреЗрдВрдЧреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреИрдирд╡рд╛рд╕ рдХреА рд╕рд╛рдордЧреНрд░реА рджреНрд╡рд╛рд░рд╛ рдХрд▓рд╛рдХрд╛рд░ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ!

рд╕рднреА рдЙрдкрд▓рдмреНрдз рд░рдВрдЧ рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рдСрдкрдиреЗрдВрд╡ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рд▓реЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдкрд░ xgboost рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░реЗрдВ рдФрд░ рдЖрд╕реНрдердЧрд┐рдд рдЪрдпрди рдкрд░ рдореИрдЯреНрд░рд┐рдХреНрд╕ рджреЗрдЦреЗрдВред

рд╕реНрд░реЛрдд
# ,        
def get_hist_data_by_index_and_colorspace(bgr_img, colorspace):
    bin_div = 5
    img_cvt = cv2.cvtColor(bgr_img, getattr(cv2, colorspace))
    c1, bins =  np.histogram(img_cvt[:,:,0], bins=255//bin_div, range=(0,255), density=True)
    c2 = np.histogram(img_cvt[:,:,1], bins=255//bin_div, range=(0,255), density=True)[0]
    c3 = np.histogram(img_cvt[:,:,2], bins=255//bin_div, range=(0,255), density=True)[0]
    return bins, c1, c2, c3
#        
all_res = {}
all_errors = {}
for colorspace in list_of_color_spaces:
    all_res[colorspace] =[]
    all_errors[colorspace] =[]
for img_index in tqdm(range(paintings_links.shape[0]) ):
    
    for colorspace in list_of_color_spaces:
        try:
            bgr_img = load_image_by_index(img_index)
            bins, c1, c2, c3 = get_hist_data_by_index_and_colorspace(bgr_img, colorspace)
            all_res[colorspace].append(np.hstack([c1, c2, c3]))
        except:
            all_res[colorspace].append(np.zeros(153,))
            all_errors[colorspace].append(img_index)
all_res_np = {}
for colorspace in list_of_color_spaces:  
    all_res_np[colorspace] = np.vstack(all_res[colorspace])
res = []
#        
for colorspace in tqdm(list_of_color_spaces):
    temp_df = pd.DataFrame(all_res_np.get(colorspace))
    temp_x_train =   temp_df[temp_df.index.isin(X_train.index.values)]
    temp_x_test =   temp_df[temp_df.index.isin(X_test.index.values)]

    xgb=XGBClassifier()
    xgb.fit(temp_x_train, y_train)
    current_res = classification_report(y_test, xgb.predict(temp_x_test), labels=None, target_names=None, output_dict=True).get("macro avg")
    current_res["colorspace"] = colorspace
    res.append(current_res)
pd.DataFrame(res).sort_values(by="f1-score")


рд╢реБрджреНрдзрддрд╛рдпрд╛рджf1 рд╕реНрдХреЛрд░рд░рдВрдЧреАрди рд╕реНрдерд╛рди
0.0013290.0036630.001059COLOR_BGR2YUV
0.0032290.0046890.001849COLOR_BGR2RGB
0.0030260.0041310.001868COLOR_BGR2HSV
0.0029090.0045780.001934COLOR_BGR2XYZ
0.0035450.0044340.001941COLOR_BGR2HLS
0.0039220.0047840.002098COLOR_BGR2LAB
0.0051180.0048360.002434COLOR_BGR2LUV

рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рдПрдХ рдареЛрд╕ рд╡реГрджреНрдзрд┐ LUV рд░рдВрдЧ рд╕реНрдерд╛рди рдХреЗ рдЙрдкрдпреЛрдЧ рджреНрд╡рд╛рд░рд╛ рджреА рдЧрдИ рдереАред

рдЗрд╕ рдкреИрдорд╛рдиреЗ рдХреЗ рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рдиреЗ рдкреИрдорд╛рдиреЗ рдХреЗ рдЕрдХреНрд╖ рдХреЗ рд╕рд╛рде рд░рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдзрд╛рд░рдгрд╛ рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рд╕рдорд╛рди рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдХрдерд┐рдд рд░рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдФрд░ рдЗрд╕рдХрд╛ рдЧрдгрд┐рддреАрдп рдореВрд▓реНрдпрд╛рдВрдХрди рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдХрд░реАрдм рд╣реЛрдЧрд╛ред

рдпрд╣ рдПрдХ рддрд░рд╣ рд╕реЗ рджрд┐рдП рдЧрдП рд░рдВрдЧ рд╕реНрдерд╛рди рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рд╣реИ рдЬрдм рдХреБрд▓реНрд╣рд╛рдбрд╝рд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:



рдЖрдЗрдП рдореЙрдбрд▓ рдХреЛ рджреЗрдЦреЗрдВ


рдкрд┐рдЫрд▓реЗ рдЪрд░рдг рдХреЗ рдмрд╛рдж, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рдПрдХ рдореЙрдбрд▓ рд╣реИ рдЬреЛ рдХреБрдЫ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХрд┐рд╕рдХрд╛ рдХрд╛рдо рд╣рдо рд╕рдмрд╕реЗ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рд╕реАрдЦрддреЗ рд╣реИрдВред
рд╢реБрджреНрдзрддрд╛рдпрд╛рджf1 рд╕реНрдХреЛрд░рдХрд▓рд╛рдХрд╛рд░
0.0425530.0194170.026667рдЗрд▓реНрдпрд╛ рдПрдлрд┐рдореЛрд╡рд┐рдЪ рд░рд┐рдкрд┐рди
0.0555560.0200000.029412рд╡рд┐рд▓рд┐рдпрдо рдореЗрд░рд┐рдЯ рдЪреЗрдЬрд╝
0.0714290.0222220.033898рдмреЛрдирд╛рд░реНрдб рдкрд┐рдпрд░реНрд╕
0.0354610.0352110.035336рдЬрд┐рд▓ рдЗрд▓рд╛рд╡рд░рди
0.1000000.0217390.035714рдЬреАрди рдЕрдЧрд╕реНрдЯреЗ рдбреЛрдорд┐рдирд┐рдХ рдЗрдиреНрдЧреНрд░реЗрд╕
0.0228140.2240660.041411рдкрд┐рдпрд░реЗ рдЕрдЧрд╕реНрдЯреЗ рд░реЗрдиреЙрдпрд░
0.1000000.0285710.044444рдЕрд▓реНрдмрд░реНрдЯ рдмрд┐рдПрд░рд╕реНрдЯрд╛рдб
0.2500000.0322580.057143рд╣рдВрд╕ рдЬрд╝рддреНрд╕рдХрд╛
0.0303960.5187970.057428рдХреНрд▓рд╛рдЙрдб рдСрд╕реНрдХрд░ рдореЛрдиреЗрдЯ
0.2500000.0370370.064516рдЧрд┐рд░реЗрдЯреЛ рд╡рд╛рд▓реНрдЯрд░

рдореЗрдЯреНрд░рд┐рдХреНрд╕ рд╕реНрд╡рдпрдВ рдЖрджрд░реНрд╢ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд░рдВрдЧ рдпреЛрдЬрдирд╛ рдХрд╛рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЕрдВрд╢ рд╣реИред рдХрд▓рд╛рдХрд╛рд░ рдХрдИ рдЕрд░реНрдердкреВрд░реНрдг рд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕ рдбреЗрдЯрд╛ рдореЗрдВ рдХрд▓рд╛рдХрд╛рд░ рдХреА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд "рд▓рд┐рдЦрд╛рд╡рдЯ" рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЬреАрдд рд╣реИред

рд╣рдо рдЧрд╣рди рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВрдЧреЗред рдЗрд╕реЗ рдХреНрд▓рд╛рдЙрдб рдСрд╕реНрдХрд░ рдореЛрдиреЗрдЯ рд╣реЛрдиреЗ рджреЗрдВ (рдореИрдВ рдЕрдкрдиреА рдкрддреНрдиреА рдХреЛ рдЕрдЪреНрдЫрд╛ рдмрдирд╛рдКрдВрдЧрд╛, рд╡рд╣ рдЗрдореНрдкреНрд░реЗрд╢рдирд┐рд╕реНрдЯреЛрдВ рдХреЛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реИ)ред

рдЪрд▓реЛ рдЙрдирдХрд╛ рдХрд╛рдо рд▓реЗрддреЗ рд╣реИрдВ, рдореЙрдбрд▓ рд╕реЗ рдкреВрдЫрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рд▓реЗрдЦрдХ рдмрддрд╛рдПрдВ рдФрд░ рдЖрд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ
рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд▓реЗрдЦрдХрднрд╡рд┐рд╖реНрдпрд╡рд╛рдгрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛
рдХреНрд▓рд╛рдЙрдб рдСрд╕реНрдХрд░ рдореЛрдиреЗрдЯ186
рдкрд┐рдпрд░реЗ рдЕрдЧрд╕реНрдЯреЗ рд░реЗрдиреЙрдпрд░171
рд╡рд┐рдиреНрд╕реЗрдВрдЯ рд╡реЙрди рдЧреЙрдЧ25
рдкреАрдЯрд░ рдкреЙрд▓ рд░реВрдмреЗрдиреНрд╕рдЙрдиреНрдиреАрд╕
рдЧреБрд╕реНрддрд╛рд╡ рдбреЛрд░17

рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдореЛрдиреЗрдЯ рдФрд░ рдорд╛рдиреЗрдЯ рдХреЛ рднреНрд░рдорд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╣рдорд╛рд░рд╛ рдореЙрдбрд▓ рдЙрд╕реЗ рд░реЗрдиреЙрдпрд░ рдФрд░ рд╡рд╛рди рдЧрд╛рдЧ рдХреЗ рд╕рд╛рде рднреНрд░рдорд┐рдд рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реИред рдЖрдЗрдП рджреЗрдЦреЗрдВ, рдореЙрдбрд▓ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╡рд╛рди рдЧрд╛рдЧ рдХреЗ рд╕рдорд╛рди рдХреНрдпрд╛ рд╣реИред










рдФрд░ рдЕрдм рд╣рдо рдЗрд╕реА рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдЦреЛрдЬ рдХрд╛рд░реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдФрд░ рд╡рд╛рди рдЧрд╛рдЧ рдХреЗ рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рдЙрдкрд░реНрдпреБрдХреНрдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рдорд╛рди рдкрд╛рдПрдВрдЧреЗ (рдЗрд╕ рдмрд╛рд░ рд╣рдо рдПрд▓рдпреВрд╡реА рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рджреВрд░реА рдХреЛ рдорд╛рдкреЗрдВрдЧреЗ)ред

рдореВрд▓:



рд╕рдорд╛рди рдХрд╛рд░реНрдп:



рдореВрд▓:



рд╕рдорд╛рди рдХрд╛рд░реНрдп:






рдореВрд▓:



рд╕рдорд╛рди рдХрд╛рд░реНрдп:





рдЕрдкрдиреЗ рдЖрдк рд╕реЗ рд╕рдВрддреБрд╖реНрдЯ, рдореИрдВрдиреЗ рдПрдХ рджреЛрд╕реНрдд рдХреЛ рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рдпрд╛ рдФрд░ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдо рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдлреА рдЕрд╢рд┐рд╖реНрдЯ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд░рдВрдЧ рдХреЗ рд╡рд┐рддрд░рдг рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрд╕рдХреЗ рдШрдЯрдХреЛрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд░рдВрдЧреЛрдВ рдХреА рдЖрд╡реГрддреНрддрд┐ рдЗрддрдиреА рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдЙрдирдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╕рдордХрд╛рд▓реАрди рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдиреЗ рд░рдВрдЧ рдпреЛрдЬрдирд╛рдУрдВ рдХреА рдкрд╕рдВрдж рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд╕рд╛рдмрд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЬреЛрд╣рд╛рдиреНрд╕ рдЗрдЯреЗрди рдФрд░ рдЙрдирдХреЗ рд░рдВрдЧ рдХреЗ рдкрд╣рд┐рдпреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛ред

рдЗрдЯреЗрди рдХрд╛ рд░рдВрдЧ рдкрд╣рд┐рдпрд╛




рдЬреЛрд╣рд╛рдиреНрд╕ рдЗрдЯреЗрди рдПрдХ рдХрд▓рд╛рдХрд╛рд░, рдХрд▓рд╛ рд╕рд┐рджреНрдзрд╛рдВрддрдХрд╛рд░ рдФрд░ рд╢рд┐рдХреНрд╖рдХ, рд░реВрдк рдФрд░ рд░рдВрдЧ рдкрд░ рдкреНрд░рд╕рд┐рджреНрдз рдкреБрд╕реНрддрдХреЛрдВ рдХреЗ рд▓реЗрдЦрдХ рд╣реИрдВред рд░рдВрдЧ рдкрд╣рд┐рдпрд╛ рд╕рдмрд╕реЗ рдкреНрд░рд╕рд┐рджреНрдз рдЙрдкрдХрд░рдг рд╣реИ рдЬреЛ рдЖрдВрдЦреЛрдВ рдХреЛ рдЦреБрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рдВрдЧреЛрдВ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред

рд╣рдо рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд░рдВрдЧ рдЪрдпрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ:



  1. рдкреВрд░рдХ рд░рдВрдЧ - рдЪрдХреНрд░ рдХреЗ рд╡рд┐рдкрд░реАрдд рднрд╛рдЧреЛрдВ рдкрд░ рд╕реНрдерд┐рдд рд╣реИ
  2. рдЖрд╕рдиреНрди рд░рдВрдЧ - рдЪрдХреНрд░ рдХреЗ рдирд┐рдХрдЯ
  3. рдХреНрд▓рд╛рд╕рд┐рдХрд▓ рдЯреНрд░рд╛рдпрдб - рдПрдХ рд╕рдордмрд╛рд╣реБ рддреНрд░рд┐рднреБрдЬ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд░рдВрдЧ
  4. рдХрдВрдЯреНрд░рд╛рд╕реНрдЯ рдЯреНрд░рд╛рдпрдб - рдПрдХ рд╕рдорджреНрд╡рд┐рдмрд╛рд╣реБ рддреНрд░рд┐рднреБрдЬ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд░рдВрдЧ
  5. рдЖрдпрдд рдирд┐рдпрдо - рдЖрдпрдд рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд░рдВрдЧ
  6. рд╡рд░реНрдЧ рдХрд╛ рдирд┐рдпрдо - рд╡рд░реНрдЧ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд░рдВрдЧ

рд╣рдо рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реИрдВ


рдЖрдЗрдП рдЕрд░реНрдЬрд┐рдд рдЬреНрдЮрд╛рди рдХреЛ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд▓рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд░рдВрдЧ рдкрд╣рд┐рдпрд╛ рдкрд░ рдкрдбрд╝реЗ рд░рдВрдЧреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдорд┐рд▓рддреА рд╣реИ, рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдЪрд┐рддреНрд░ рд╕реЗ рдкрд╣рдЪрд╛рдирддреА рд╣реИред



рдЕрдм рд╣рдо рдЗрдЯреЗрди рд╕рд░реНрдХрд▓ рдХреЗ рд░рдВрдЧреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рдЪрд┐рддреНрд░реЛрдВ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЛ рдЬреЛрдбрд╝реЗ рдореЗрдВ рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдореВрд▓ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЛ рд░рдВрдЧ рд╡реНрд╣реАрд▓ рдореЗрдВ рдирд┐рдХрдЯрддрдо рдПрдХ рдХреЗ рд╕рд╛рде рдмрджрд▓рддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЫрд╡рд┐ рдореЗрдВ рд░рдВрдЧреЛрдВ рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ

рд╕реНрд░реЛрдд
#          
def plot_composition_analysis(image_index):
    img = load_image_by_index(image_index)
    luv_img = cv2.cvtColor(load_image_by_index(image_index), cv2.COLOR_BGR2LUV)
    closest_colors = np.argmin(euclidean_distances(luv_img.reshape(-1,3),wheel_colors_luv),axis=1)
    wheel_colors2[closest_colors].reshape(luv_img.shape)
    color_areas_img = wheel_colors2[closest_colors].reshape(img.shape)

    v, c = get_image_colors(image_index)
    #         
    c_int = (c*img.shape[1]).astype(int)
    c_int_delta = img.shape[1] - sum(c_int)
    c_int[np.argmax(c_int)] = c_int[np.argmax(c_int)] + c_int_delta

    _ = []

    for i, vi in enumerate(v):
        bar_width = c_int[i]
        _.append(np.tile(wheel_colors2[vi], (150,bar_width,1)))
    color_bar_img = np.hstack(_)
    final_image = np.hstack([
                                np.vstack([img,
                                           np.tile(np.array([254,254,254]),(160,img.shape[1],1))]),

                                np.tile(np.array([254,254,254]),(img.shape[0]+160,10,1)),
                                np.vstack([color_areas_img,
                                           np.tile(np.array([254,254,254]),(10,img.shape[1],1)),
                                           color_bar_img])
                            ])
    h = 12
    w = h / final_image.shape[1] * final_image.shape[0]
    fig = plt.figure(figsize=(h,w))
    plt.imshow(cv2.cvtColor(final_image.astype(np.uint8), cv2.COLOR_BGR2RGB),interpolation='nearest', aspect='auto')
    plt.title("{} - {}".format(paintings_links.iloc[image_index].artist_name, 
                             paintings_links.iloc[image_index].picture_name),ha= "center")
    plt.axis('off');












рдХреНрдпрд╛ рдЖрдкрдиреЗ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рдж "рдпрдВрдЧ рдЖрд░реНрд▓реЗрд╢рд┐рдпрди" рдХреИрд╕реЗ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ? рд╢рд╛рдпрдж рдпрд╣ рди рдХреЗрд╡рд▓ рдирдП рд░рдВрдЧреЛрдВ рдХреА рдЖрд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рдорд╛рдкрдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ, рдмрд▓реНрдХрд┐ рд░реВрдкрд╛рдВрддрд░рдг рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдЖрдВрдХрдбрд╝реЗ рднреА рд╣реИрдВ - рдпрд╣ рд╣рдореЗрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рд╡рд░реНрддрдорд╛рди рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рдЖрдЗрдП рдПрдХ рд╕рд░реНрдХрд▓ рдореЗрдВ рд╕рд╛рдордВрдЬрд╕реНрдпрдкреВрд░реНрдг рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдВ?

рд╕рднреА рдкреВрд░рдХ рдЬреЛрдбрд╝реЗ:



рд╕рднреА рд╢рд╛рд╕реНрддреНрд░реАрдп рддреНрд░рдп:



рдФрд░ рд╕рднреА рд╡рд░реНрдЧ:



рд╣рдо рдЕрдкрдиреЗ рдЪрд┐рддреНрд░реЛрдВ рдореЗрдВ рдЗрди рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдВрдЧреЗ, рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг (рдЖрд╡реГрддреНрддрд┐ рдореЗрдВ) рдЦреЛрдЬреЗрдВ рдФрд░
рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИред

рдЬреЛрдбрд╝реА рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:











рдлрд┐рд░ рддреАрдиреЛрдВ:













рдФрд░, рдЕрдВрдд рдореЗрдВ, рд╡рд░реНрдЧреЛрдВ:















рдЖрдВрдЦ рд╕реЗ рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдирдпрд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛рдо рдХреЗ рд▓реЗрдЦрдХ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛?

рд╣рдо рдХреЗрд╡рд▓ рдЗрдЯреЗрди рдХреЗ рд░рдВрдЧ рдЖрд╡реГрддреНрддрд┐рдпреЛрдВ, рддреНрд░реБрдЯрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдФрд░ рд╕рд╛рдордВрдЬрд╕реНрдпрдкреВрд░реНрдг рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЙрдбрд▓ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░реЗрдВрдЧреЗред

рдЗрд╕ рдмрд╛рд░, рд╕рдмрд╕реЗ "рдЕрдиреБрдорд╛рдирд┐рдд" рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХреА рд╕реВрдЪреА рдереЛрдбрд╝реА рдмрджрд▓ рдЧрдИ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдПрдХ рдЕрд▓рдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдиреЗ рд╣рдореЗрдВ рддрд╕реНрд╡реАрд░ рдХреА рд╕рд╛рдордЧреНрд░реА рд╕реЗ рдХреБрдЫ рдФрд░ рдЬрд╛рдирдХрд╛рд░реА рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреАред
рд╢реБрджреНрдзрддрд╛рдпрд╛рджf1 рд╕реНрдХреЛрд░рдХрд▓рд╛рдХрд╛рд░
0.0434780.0121950.019048рдорд╛рд░реНрдЯрд┐рди, рд╣реЗрдирд░реА-рдЬреАрди-рдЧрд┐рд▓реМрдо
0.0326800.0290700.030769рдХреЗрдорд┐рд▓реА рдкрд┐рд╕рд╛рд░реЛ
0.1666670.0196080.035088рдЬреАрди-рд▓рд┐рдпреЛрди рдЬреЗрд░реЛрдо
0.0769230.0277780.040816рдЯрд░реНрдирд░, рдЬреЛрд╕реЗрдл рдореИрд▓реЙрд░реНрдб рд╡рд┐рд▓рд┐рдпрдо
0.1333330.0243900.041237рдкреЛрд░реНрдЯрд╡реЗрд▓рд┐рдЯ, рд░реАрдпрди
0.1000000.0263160.041667рдореИрдХреНрд╕ рдХреНрд▓рд┐рдВрдЧрд░
0.0267250.2282160.047847рдкрд┐рдпрд░реЗ рдЕрдЧрд╕реНрдЯреЗ рд░реЗрдиреЙрдпрд░
0.2000000.0285710.050000рдмреНрд░рд╛рд╕реАрд▓рд┐рдпрд░, рдЖрдВрджреНрд░реЗ
0.0287450.6390980.055016рдХреНрд▓рд╛рдЙрдб рдСрд╕реНрдХрд░ рдореЛрдиреЗрдЯ

рдирд┐рд╖реНрдХрд░реНрд╖


рдХрд▓рд╛ рдХреЗ рдХрд╛рд░реНрдп рдЕрджреНрд╡рд┐рддреАрдп рд╣реИрдВред рдХрд▓рд╛рдХрд╛рд░ рдХрдИ рд░рдЪрдирд╛ рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдореЗрдВ рдмрд╛рд░-рдмрд╛рд░ рдЙрдирдХреЗ рдХрд╛рдо рдХреА рдкреНрд░рд╢рдВрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВред
рд░рдВрдЧ рдпреЛрдЬрдирд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рд▓реЗрдХрд┐рди рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдореЗрдВ рдПрдХрдорд╛рддреНрд░ рдШрдЯрдХ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИред

рдХрдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд▓рд╛ рд╕рдореАрдХреНрд╖рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рднреЛрд▓реЗрдкрди рдкрд░ рд╣рдБрд╕реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдореИрдВ рдХрд┐рдП рдЧрдП рдХрд╛рдо рд╕реЗ рд╕рдВрддреБрд╖реНрдЯ рдерд╛ред рдХрдИ рдФрд░ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ рдЬреЛ рдЕрднреА рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪреЗ рд╣реИрдВ:

  1. рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХреА рд░рдВрдЧ рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд▓рд╛рдЧреВ рдХрд░реЗрдВред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣рдо рджрд┐рд▓рдЪрд╕реНрдк рд╕рдореВрд╣реЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдкреЗрдВрдЯрд┐рдВрдЧ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд░реБрдЭрд╛рдиреЛрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
  2. рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЪрд┐рддреНрд░реЛрдВ рдкрд░ рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд▓рд╛рдЧреВ рдХрд░реЗрдВред "рдкреНрд▓реЙрдЯреНрд╕" рдХреА рдЦреЛрдЬ рдХрд░реЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд░рдВрдЧ рдпреЛрдЬрдирд╛ рджреНрд╡рд╛рд░рд╛ рдкрд╣рдЪрд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рднрд┐рдиреНрди рд╕рдореВрд╣реЛрдВ рдореЗрдВ рдкрд░рд┐рджреГрд╢реНрдп, рдЪрд┐рддреНрд░ рдФрд░ рдЕрднреА рднреА рдЬреАрд╡рди рдорд┐рд▓рддрд╛ рд╣реИ
  3. рди рдХреЗрд╡рд▓ рдЬреЛрдбрд╝реЗ, рдЯреНрд░рд┐рдкрд▓ рдФрд░ рд╕реНрдХреНрд╡рд╛рдпрд░ рдЦреЛрдЬреЗрдВ, рдмрд▓реНрдХрд┐ рдЗрдЯреЗрди рдХреЗ рд╕рд░реНрдХрд▓ рд╕реЗ рдЕрдиреНрдп рд╕рдВрдпреЛрдЬрди рднреА
  4. рд╕реНрдерд╛рди рдХреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ рдкрд┐рдХреНрд╕рд▓реЛрдВ рдХреЛ рд╕рдореВрд╣рд┐рдд рдХрд░рдХреЗ рдЖрд╡реГрддреНрддрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╕реЗ рд░рдВрдЧ рд╕реНрдерд╛рди рд╡рд┐рд╢реНрд▓реЗрд╖рдг рддрдХ рд▓реЗ рдЬрд╛рдирд╛
  5. рдРрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдвреВрдВрдвреЗрдВ рдЬрд┐рд╕рдореЗрдВ рд▓реЗрдЦрдХрддреНрд╡ рд╕рдВрджреЗрд╣ рдореЗрдВ рд╣реИ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдореЙрдбрд▓ рдХрд┐рд╕реЗ рд╡реЛрдЯ рджреЗрдЧрд╛

рдкреБрдирд╢реНрдЪ


рдпрд╣ рд▓реЗрдЦ рдореВрд▓ рд░реВрдк рд╕реЗ рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдХреЛрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдирд╛рддрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдереА , рд▓реЗрдХрд┐рди рдХрдИ рд▓реЛрдЧреЛрдВ рдиреЗ рдЗрд╕реЗ рд╣реИрдмрд░ рдХреЗ рд▓рд┐рдП рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреАред

рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рдереЗред

рдХрд╛рдо рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдХреЛрдб рдЬреАрдердм рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ ред

All Articles