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
db.execute('CREATE TABLE list (id INTEGER PRIMARY KEY AUTOINCREMENT,\
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)')
conn.commit()
return
@@ -216,12 +216,18 @@ def append_colors(sqlfile):
dbh=conn.cursor()
db.execute("SELECT file,R FROM list WHERE R IS NULL ORDER BY file")
i=0
dirname_old=""
for row in db:
colors=get_colors(row[0])
dbh.execute("UPDATE list SET R=?, G=?, B=?, BR=?, BG=?, BB=? \
WHERE file=?",(colors[0][0],colors[0][1],colors[0][2],
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]}
i+=1
if (i%50==0):
@@ -270,12 +276,18 @@ def append_fingerprints(sqlfile):
dbh=conn.cursor()
db.execute("SELECT file FROM list WHERE fingerprint IS NULL ORDER BY file")
i=0
dirname_old=""
for row in db:
fp=get_fingerprint(row[0])
dbh.execute("UPDATE list SET fingerprint=? \
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
print "%(nr)i %(f)s" % {'f':filename, 'nr':i}
if (i%50==0):
conn.commit();
conn.commit()
@@ -333,14 +345,16 @@ def find_fingerprint_nearest(sqlfile,cmp):
conn.text_factory=str
db1=conn.cursor()
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:
fp=int(hit1[1])
sp=hit1[2]
else:
fp=int(get_fingerprint(cmp))
db1.execute("SELECT file,fingerprint,width,height FROM list ORDER BY file")
this=['',sys.maxint]
sp=get_sharpness(cmp)
print('"%s":0:%f' % (cmp, sp))
db1.execute("SELECT file,fingerprint,sharpness,width,height FROM list ORDER BY file")
this=['',sys.maxint,0]
for i,hit1 in enumerate(db1):
if hit1[0] == cmp:
continue
@@ -348,7 +362,42 @@ def find_fingerprint_nearest(sqlfile,cmp):
if similarity<this[1]:
this[1]=similarity
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):
conn=sqlite3.connect(sqlfile)
@@ -468,10 +517,12 @@ def main():
if options.search:
print_structure(searchdb(options.sqlfile,options.search))
if options.measure:
print('Adding colors...')
print('Measure colors...')
append_colors(options.sqlfile)
print('Adding fingerprints...')
print('Measure fingerprints...')
append_fingerprints(options.sqlfile)
#print('Measure sharpness...')
#append_sharpness(options.sqlfile)
if options.random:
print('Random lists...')
random_lists(options.sqlfile)