1
1
2
2
import array
3
+ import time
3
4
4
- def average2d (inp , rowstride , x , y , size ):
5
- acc = 0
5
+ @micropython .native
6
+ def average2d (inp , rowstride : int , x : int , y : int , size : int ):
7
+ acc : int = 0
6
8
for r in range (y , y + size ):
7
9
for c in range (x , x + size ):
8
10
acc += inp [(r * rowstride )+ c ]
9
11
10
12
avg = acc // (size * size )
11
13
return avg
12
14
13
- def downscale (inp , out , in_size , out_size ):
15
+ @micropython .native
16
+ def downscale (inp , out , in_size : int , out_size : int ):
14
17
15
18
# assumes square, single-channel (grayscale) images
16
19
assert len (inp ) == in_size * in_size
17
20
assert len (out ) == out_size * out_size
18
21
assert (in_size % out_size ) == 0 , (in_size , out_size )
19
- factor = in_size // out_size
22
+ factor : int = in_size // out_size
20
23
21
24
for row in range (out_size ):
22
25
for col in range (out_size ):
23
- o = (row * out_size ) + col
26
+ o : int = (row * out_size ) + col
27
+
28
+ #acc : int = 0
29
+ #size : int = factor
30
+ #x : int = col*factor
31
+ #y : int = row*factor
32
+ #rowstride = in_size
33
+ #for r in range(y, y+size):
34
+ # for c in range(x, x+size):
35
+ # acc += inp[(r*rowstride)+c]
36
+ #avg = acc // (size*size)
37
+ #out[o] = avg
38
+
24
39
out [o ] = average2d (inp , in_size , col * factor , row * factor , factor )
25
40
26
41
@@ -29,15 +44,18 @@ def test_downscale():
29
44
import npyfile
30
45
31
46
shape , data = npyfile .load ('inp.npy' )
32
- print (data )
47
+ # print(data)
33
48
34
49
npyfile .save ('orig.npy' , data , shape )
35
50
36
51
insize = 96
37
52
outsize = 32
38
53
out = array .array ('B' , (0 for _ in range (outsize * outsize )))
39
54
55
+ start = time .ticks_ms ()
40
56
downscale (data , out , insize , outsize )
57
+ duration = time .ticks_diff (time .ticks_ms (), start )
58
+ print ('downscale' , duration )
41
59
42
60
npyfile .save ('out.npy' , out , (outsize , outsize ))
43
61
0 commit comments