forked from fogleman/primitive
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathprocess.py
More file actions
74 lines (66 loc) · 1.85 KB
/
Copy pathprocess.py
File metadata and controls
74 lines (66 loc) · 1.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
from Queue import Queue
import itertools
import os
import subprocess
import sys
import threading
def makedirs(x):
try:
os.makedirs(x)
except Exception:
pass
def primitive(i, o, n, a, m):
makedirs(os.path.split(o)[0])
args = (i, o, n, a, m)
cmd = 'primitive -r 128 -s 512 -i %s -o %s -n %d -a %d -m %d' % args
subprocess.call(cmd, shell=True)
def create_jobs(in_folder, out_folder, n, a, m):
result = []
for name in os.listdir(in_folder):
base, ext = os.path.splitext(name)
if ext.lower() not in ['.jpg', '.jpeg', '.png']:
continue
out_name = '%d.%%d.png' % (m)
in_path = os.path.join(in_folder, name)
out_path = os.path.join(out_folder, base, out_name)
if os.path.exists(out_path):
continue
key = (base, n, m)
args = (in_path, out_path, n, a, m)
result.append((key, args))
return result
def worker(jobs, done):
while True:
job = jobs.get()
log(job)
primitive(*job)
done.put(True)
def process(in_folder, out_folder, nlist, alist, mlist, nworkers):
jobs = Queue()
done = Queue()
for i in xrange(nworkers):
t = threading.Thread(target=worker, args=(jobs, done))
t.setDaemon(True)
t.start()
count = 0
items = []
for n, a, m in itertools.product(nlist, alist, mlist):
for item in create_jobs(in_folder, out_folder, n, a, m):
items.append(item)
items.sort()
for _, job in items:
jobs.put(job)
count += 1
for i in xrange(count):
done.get()
log_lock = threading.Lock()
def log(x):
with log_lock:
print x
if __name__ == '__main__':
args = sys.argv[1:]
nlist = [500]
alist = [128]
mlist = [0, 1, 3, 5]
nworkers = 4
process(args[0], args[1], nlist, alist, mlist, nworkers)