class Array

Public Instance Methods

deepinit() click to toggle source

初回の特徴量計算に時間がかかるため,事前にキャッシュしておきたい場合に叩くメソッド batch処理する仕様にすればもっと速いけど作りがめんどくなりそう

# File lib/deepselect.rb, line 213
def deepinit
        self.each do |image|
                image.to_vector
        end
end
Also aliased as: dinit
deepselect(take: "default", with: "") { |image| ... } click to toggle source

block内で比較された対象の画像に,いちばん似てる画像を取り出すメソッド

# File lib/deepselect.rb, line 160
def deepselect(take: "default", with: "")
        return enum_for(__method__) unless block_given?
        
        # dselect内かどうかのフラグ
        # このフラグががtrueだと == をした時に特徴量を返す
        self.each do |image|
                image.in_dselect = true
        end

        # 特徴量計算
        feature_vectors = self.map do |image|
                result = yield image
                unless result.class == Float
                        raise "Not a proper value is returned in dselect block" 
                end
                result 
        end

        self.each do |image| # 元に戻す
                image.in_dselect = nil
        end

        # 特徴量が大きい順に並べる
        zipped_image = [self, feature_vectors].transpose.map.with_index{|(image, num),i| [image, num, i]}
        result = zipped_image.sort_by{|image, num,i| num}.reverse

        # 指定された引数によって出力を変える
        if with =~ /sim/ and with =~ /ind/ # 類似度とindex両方出力
                #  pass
        elsif with =~ /sim/ # 類似度のみ
                result = result.map{|image, num,i| [image,num] }
        elsif with =~ /ind/ # indexのみ
                result = result.map{|image, num,i| [image,i] }
        else # どちらも出力しない,imageのみ返す
                result = result.map{|image, num,i| image }
        end

        # 上位いくつ取得する?
        if take == "default"
                return result.first
        end
        if take == "all"
                return result
        end
        if take.to_i > 0
                return result.take(take.to_i)
        end
        raise "what is this arg error\ntake: #{take}" #このエラーはどうなのよ
end
Also aliased as: dselect
dinit()
Alias for: deepinit
dselect(take: "default", with: "")
Alias for: deepselect