new relative path search for image_list

This commit is contained in:
q
2015-02-21 12:29:54 +02:00
parent b29616e33c
commit 303b967f41

View File

@@ -45,6 +45,8 @@ def setup_options():
help="Minimum pixel width/height of stored image for --small search [%(default)s]")
parser.add_argument("-r",action="store_true",dest="random",default=False,
help="Create randomized files for landscape and portrait images [%(default)s]")
parser.add_argument("-R",action="store_true",dest="relative",default=False,
help="Try to find relative path of files, if --measuring from a different machine [%(default)s]")
parser.add_argument("-s",type=str,dest="search",default=False,
help="Search list based on path pattern")
parser.add_argument("--measure",action="store_true",dest="measure",default=False,
@@ -194,7 +196,7 @@ def add_recurse(options):
sys.exit(1)
# if file mentioned, and hash same, no need to change entry
conn.commit()
append_data(conn)
append_data(options)
return
def add_single(conn,filename,change=False,hash=None,minsize=0):
@@ -213,7 +215,9 @@ def add_single(conn,filename,change=False,hash=None,minsize=0):
print("adding: %(f)s (%(x)s)" % {'f':filename, 'x':humanize_size(fsize)})
return
def append_data(conn):
def append_data(options):
conn=sqlite3.connect(options.sqlfile)
conn.text_factory=str
print("Append basic metadata...")
db=conn.cursor()
dbh=conn.cursor()
@@ -228,6 +232,7 @@ def append_data(conn):
filename=hash2file(conn.cursor(),row[0])
if filename==None:
continue
filename=check_path(filename,options)
dims=get_dims(filename)
if int(dims[0])<int(dims[1]):
portrait=1
@@ -356,8 +361,8 @@ def call_viewer(opts, files):
devnull = open('/dev/null', 'w')
subprocess.call(opts.viewer.replace('%f', " ".join(files)), stderr=devnull, shell=True)
def append_colors(sqlfile):
conn=sqlite3.connect(sqlfile)
def append_colors(opt):
conn=sqlite3.connect(opt.sqlfile)
conn.text_factory=str
db=conn.cursor()
dbh=conn.cursor()
@@ -368,15 +373,11 @@ def append_colors(sqlfile):
filename=hash2file(conn.cursor(),row[0])
if filename==None:
continue
filename=check_path(filename,opt)
colors=get_colors(filename)
dbh.execute("UPDATE data SET R=?, G=?, B=?, BR=?, BG=?, BB=? \
WHERE hash=?",(colors[0][0],colors[0][1],colors[0][2],
colors[1][0],colors[1][1],colors[1][2],row[0]))
filebase=" "+os.path.basename(filename)
dirname=os.path.dirname(filename)
if dirname!=dirname_old:
dirname_old=dirname
filebase=filename
print("%(i)d: %(f)s (%(r)s %(g)s %(b)s)" % {'i':count-i, 'f':filename, 'r':colors[0][0],
'g':colors[0][1], 'b':colors[0][2]})
if (i%50==0):
@@ -499,8 +500,8 @@ def get_ratio_diff(d1,d2):
return abs( float(d1[0])/float(d1[1]) - float(d2[0])/float(d2[1]) )
def append_fingerprints(sqlfile):
conn=sqlite3.connect(sqlfile)
def append_fingerprints(opt):
conn=sqlite3.connect(opt.sqlfile)
conn.text_factory=str
db=conn.cursor()
dbh=conn.cursor()
@@ -511,15 +512,11 @@ def append_fingerprints(sqlfile):
filename=hash2file(conn.cursor(),row[0])
if filename==None:
continue
filename=check_path(filename,opt)
fp=get_fingerprint(filename)
dbh.execute("UPDATE data SET fingerprint=? \
WHERE hash=?",(fp,row[0]))
filebase=" "+os.path.basename(filename)
dirname=os.path.dirname(filename)
if dirname!=dirname_old:
dirname_old=dirname
filebase=filename
print("%(nr)i %(f)s" % {'f':filebase, 'nr':count-i})
print("%(nr)i %(f)s" % {'f':filename, 'nr':count-i})
if (i%50==0):
conn.commit();
conn.commit()
@@ -663,8 +660,8 @@ def find_fingerprint_nearest(opts):
call_viewer(opts, (cmp,this[0]))
def append_sharpness(sqlfile):
conn=sqlite3.connect(sqlfile)
def append_sharpness(opt):
conn=sqlite3.connect(opt.sqlfile)
conn.text_factory=str
db=conn.cursor()
dbh=conn.cursor()
@@ -675,15 +672,11 @@ def append_sharpness(sqlfile):
filename=hash2file(conn.cursor(),row[0])
if filename==None:
continue
filename=check_path(filename,opt)
sp=get_sharpness(filename)
dbh.execute("UPDATE data SET sharpness=? \
WHERE hash=?",(sp,row[0]))
filebase=" "+os.path.basename(filename)
dirname=os.path.dirname(filename)
if dirname!=dirname_old:
dirname_old=dirname
filebase=filename
print("%(nr)i %(f)s %(s)f" % {'f':filebase, 'nr':count-i,'s':sp})
print("%(nr)i %(f)s %(s)f" % {'f':filename, 'nr':count-i,'s':sp})
if (i%25==0):
conn.commit();
conn.commit()
@@ -965,6 +958,25 @@ def import_metadata(options):
print("Imported %d metadata, %d tags." % (after-before,tagsafter-tagsbefore))
def check_path(path,opt):
""" return relative path name to DB if real path doesnt exist """
if os.path.isfile(path):
return path
if not opt.relative:
if not os.path.isfile(path):
raise IOError("File %s not found. try -R for relative search" % path)
sqlpath=os.path.dirname(os.path.realpath(opt.sqlfile))
rel=os.path.join(sqlpath, path)
searchpath=path.split(os.sep)
while not os.path.isfile(rel):
searchpath=searchpath[1:]
if len(searchpath)==0:
raise IOError("File %s not found" % path)
rel=os.path.join(sqlpath, os.sep.join(searchpath))
#~ print(rel)
return rel
def main():
options=setup_options();
@@ -982,12 +994,13 @@ def main():
if options.search:
print_structure(searchdb(options.sqlfile,options.search))
if options.measure:
append_data(options)
print('Measure colors...')
append_colors(options.sqlfile)
append_colors(options)
print('Measure fingerprints...')
append_fingerprints(options.sqlfile)
append_fingerprints(options)
print('Measure sharpness...')
append_sharpness(options.sqlfile)
append_sharpness(options)
if options.random:
print('Random lists...')
random_lists(options.sqlfile)