それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

フルカラーと白黒のプリントやコミックスのzipを判別する

以前、画像の白黒判定をやった

takuya-1st.hatenablog.jp

白黒判定が出来るから、スキャンした画像が「プリント」か「雑誌」か判定していけば便利なんじゃないかと

ScanSnap

ScanSnap でスキャンしたときに、学校のプリントか、教科書やカラー資料か判定して仕分けたい。

http://amazon.jp/dp/B00T2B5L52/?tag=takuya-hateblo-22

富士通 ScanSnap iX500 (A4/両面)

富士通 ScanSnap iX500 (A4/両面)

zip にしておけば、簡単に判別できそう

機械学習とか使わなくてもプリント程度なら、ぱぱっと判定できた。

これでzipコミックスを仕分けできそうで便利。

ScanSnapで白黒を自動調整しておけば確実にモノクロと判別できて楽だった。

#!/usr/bin/env ruby
#
#


dirname  = Dir.pwd


require 'tmpdir'
require 'pry'
require "tmpdir"

def check( f_name )
  # binding.pry

  # Dir.chdir dirname

  is_color_comic = false
  Dir.mktmpdir("check-color-", '/tmp') do |dir|

    cmd = %%unar -o "#{dir}"   "#{f_name}"  %
    # puts cmd
    `#{cmd}`

    list = Dir.glob("#{dir}/**/*")
    # puts list
    list = list.grep(/jpe?g|png|gif|png/).sort
    unless list.size > 10 then
      return false
    end

    mid =  ((list.size.to_f-1)*0.666).floor
    names = list.slice( (mid-2)..(mid+2) )
    puts names

    color_page = names.map{|e|
      cmd = <<-"EOS".gsub(/\s+/, ' ').gsub(/^\s+/,'')
      convert '#{e}' \
        -colorspace HSB \
        -separate -delete 0 \
        -fx "u*v" -blur 2x2 \
        -threshold 30% \
        -format '%[fx:mean]\n' info:
      EOS
      # p cmd
      ret = `#{cmd}`
      puts ret.to_f
      (ret.to_f  > 0 ) ? 1 : 0

    }.inject(0){|sum,x| sum + x }
    puts color_page
    is_color_comic = color_page  > 3
  end

  return is_color_comic
end

path = './*.zip'
Dir.glob(path).sort.reverse.each{|e|
  # begin
    if File.directory? e
      next
    end

    puts e
    ret = check(e)
    if ret then
      puts :color
      `sudo mv "#{e}" 'プリント' `
    end
}