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