simple focus. maybe should std size, and contrast

This commit is contained in:
ville rantanen
2014-01-06 22:26:21 +02:00
parent 56a2d21d7b
commit 1e8ed131bf

View File

@@ -58,7 +58,7 @@ def createdb(sqlfile):
conn.text_factory=str conn.text_factory=str
db.execute('CREATE TABLE list (id INTEGER PRIMARY KEY AUTOINCREMENT,\ db.execute('CREATE TABLE list (id INTEGER PRIMARY KEY AUTOINCREMENT,\
file TEXT,date INTEGER,portrait NUMERIC, hash TEXT,\ file TEXT,date INTEGER,portrait NUMERIC, hash TEXT,\
width INTEGER,height INTEGER,fingerprint TEXT,\ width INTEGER,height INTEGER,fingerprint TEXT,sharpness NUMERIC,\
R REAL,G REAL, B REAL, BR REAL, BG REAL, BB REAL)') R REAL,G REAL, B REAL, BR REAL, BG REAL, BB REAL)')
conn.commit() conn.commit()
return return
@@ -216,12 +216,18 @@ def append_colors(sqlfile):
dbh=conn.cursor() dbh=conn.cursor()
db.execute("SELECT file,R FROM list WHERE R IS NULL ORDER BY file") db.execute("SELECT file,R FROM list WHERE R IS NULL ORDER BY file")
i=0 i=0
dirname_old=""
for row in db: for row in db:
colors=get_colors(row[0]) colors=get_colors(row[0])
dbh.execute("UPDATE list SET R=?, G=?, B=?, BR=?, BG=?, BB=? \ dbh.execute("UPDATE list SET R=?, G=?, B=?, BR=?, BG=?, BB=? \
WHERE file=?",(colors[0][0],colors[0][1],colors[0][2], WHERE file=?",(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]))
print "colors: %(f)s (%(r)s %(g)s %(b)s)" % {'f':row[0], 'r':colors[0][0], filename=" "+os.path.basename(row[0])
dirname=os.path.dirname(row[0])
if dirname!=dirname_old:
dirname_old=dirname
filename=row[0]
print "colors: %(f)s (%(r)s %(g)s %(b)s)" % {'f':filename, 'r':colors[0][0],
'g':colors[0][1], 'b':colors[0][2]} 'g':colors[0][1], 'b':colors[0][2]}
i+=1 i+=1
if (i%50==0): if (i%50==0):
@@ -270,12 +276,18 @@ def append_fingerprints(sqlfile):
dbh=conn.cursor() dbh=conn.cursor()
db.execute("SELECT file FROM list WHERE fingerprint IS NULL ORDER BY file") db.execute("SELECT file FROM list WHERE fingerprint IS NULL ORDER BY file")
i=0 i=0
dirname_old=""
for row in db: for row in db:
fp=get_fingerprint(row[0]) fp=get_fingerprint(row[0])
dbh.execute("UPDATE list SET fingerprint=? \ dbh.execute("UPDATE list SET fingerprint=? \
WHERE file=?",(fp,row[0])) WHERE file=?",(fp,row[0]))
print " %(f)s" % {'f':row[0]} filename=" "+os.path.basename(row[0])
dirname=os.path.dirname(row[0])
if dirname!=dirname_old:
dirname_old=dirname
filename=row[0]
i+=1 i+=1
print "%(nr)i %(f)s" % {'f':filename, 'nr':i}
if (i%50==0): if (i%50==0):
conn.commit(); conn.commit();
conn.commit() conn.commit()
@@ -333,14 +345,16 @@ def find_fingerprint_nearest(sqlfile,cmp):
conn.text_factory=str conn.text_factory=str
db1=conn.cursor() db1=conn.cursor()
if is_listed(db1, cmp): if is_listed(db1, cmp):
db1.execute("SELECT file,fingerprint,width,height FROM list WHERE file=?",(cmp,)) db1.execute("SELECT file,fingerprint,sharpness,width,height FROM list WHERE file=?",(cmp,))
for hit1 in db1: for hit1 in db1:
fp=int(hit1[1]) fp=int(hit1[1])
sp=hit1[2]
else: else:
fp=int(get_fingerprint(cmp)) fp=int(get_fingerprint(cmp))
sp=get_sharpness(cmp)
db1.execute("SELECT file,fingerprint,width,height FROM list ORDER BY file") print('"%s":0:%f' % (cmp, sp))
this=['',sys.maxint] db1.execute("SELECT file,fingerprint,sharpness,width,height FROM list ORDER BY file")
this=['',sys.maxint,0]
for i,hit1 in enumerate(db1): for i,hit1 in enumerate(db1):
if hit1[0] == cmp: if hit1[0] == cmp:
continue continue
@@ -348,7 +362,42 @@ def find_fingerprint_nearest(sqlfile,cmp):
if similarity<this[1]: if similarity<this[1]:
this[1]=similarity this[1]=similarity
this[0]=hit1[0] this[0]=hit1[0]
print('"%s":%i' % (this[0], this[1])) this[2]=hit1[2]
print('"%s":%i:%f' % (this[0], this[1], this[2]))
def append_sharpness(sqlfile):
conn=sqlite3.connect(sqlfile)
conn.text_factory=str
db=conn.cursor()
dbh=conn.cursor()
db.execute("SELECT file FROM list WHERE sharpness IS NULL ORDER BY file")
i=0
dirname_old=""
for row in db:
sp=get_sharpness(row[0])
dbh.execute("UPDATE list SET sharpness=? \
WHERE file=?",(sp,row[0]))
filename=" "+os.path.basename(row[0])
dirname=os.path.dirname(row[0])
if dirname!=dirname_old:
dirname_old=dirname
filename=row[0]
i+=1
print "%(nr)i %(f)s %(s)f" % {'f':filename, 'nr':i,'s':sp}
if (i%50==0):
conn.commit();
conn.commit()
def get_sharpness(filename):
small_args="convert ( -colorspace gray XXX ( +clone -roll +0+1 ) -compose Difference -composite -shave 1x1 ) \
( -colorspace gray XXX ( +clone -roll +1+0 ) -compose Difference -composite -shave 1x1 ) \
-compose Plus -composite -format %[fx:mean*1000] info:".split(" ")
small_args[4]=filename+'[0]'
small_args[19]=filename+'[0]'
p=subprocess.Popen(small_args,stdout=subprocess.PIPE)
sharpness, err = p.communicate()
return float(sharpness.strip())
def searchdb(sqlfile,needle): def searchdb(sqlfile,needle):
conn=sqlite3.connect(sqlfile) conn=sqlite3.connect(sqlfile)
@@ -468,10 +517,12 @@ 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:
print('Adding colors...') print('Measure colors...')
append_colors(options.sqlfile) append_colors(options.sqlfile)
print('Adding fingerprints...') print('Measure fingerprints...')
append_fingerprints(options.sqlfile) append_fingerprints(options.sqlfile)
#print('Measure sharpness...')
#append_sharpness(options.sqlfile)
if options.random: if options.random:
print('Random lists...') print('Random lists...')
random_lists(options.sqlfile) random_lists(options.sqlfile)