Skip to content

Commit 5b8f8a4

Browse files
authored
benchmark: test OpenCV and scikit-image with timeit (#16)
1 parent 60755a9 commit 5b8f8a4

File tree

2 files changed

+48
-10
lines changed

2 files changed

+48
-10
lines changed

benchmark/benchmark_backends.jl

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,17 @@ const cv = pyimport("cv2")
1919
const skimageio = pyimport("skimage.io")
2020
const skimage = pyimport("skimage")
2121

22+
@pyinclude joinpath(@__DIR__, "pyhelpers.py")
23+
24+
function print_cv_version(io)
25+
cv_jpeg_ver = match(r"\d+\.\d+\.\d+-\d+", filter(split(cv.getBuildInformation(), "\n")) do line
26+
occursin("build-libjpeg-turbo", line)
27+
end[1]).match
28+
29+
println(io, "OpenCV version: $(cv.__version__)")
30+
println(io, "OpenCV libjpeg-turbo version: $(cv_jpeg_ver)")
31+
end
32+
2233
img_list = Any[
2334
# Gray
2435
"moonsurface" => testimage("moonsurface"),
@@ -43,8 +54,17 @@ open("report.md", "w") do out_io
4354
println(out_io)
4455

4556
println(out_io, "```")
57+
println(out_io, "Julia versioninfo:")
4658
versioninfo(out_io)
47-
println(out_io, "OpenCV version: $(cv.__version__)")
59+
println(out_io)
60+
61+
println(out_io, "JpegTurbo.jl versioninfo:")
62+
JpegTurbo.versioninfo(out_io)
63+
println(out_io)
64+
65+
print_cv_version(out_io)
66+
println(out_io)
67+
4868
println(out_io, "Scikit-image version: $(skimage.__version__)")
4969
println(out_io, "```")
5070
println(out_io)
@@ -85,14 +105,14 @@ open("report.md", "w") do out_io
85105
println(io, row_msg)
86106
end
87107

88-
# OpenCV
89-
@info "OpenCV (PyCall): $name"
108+
# OpenCV (Python)
109+
@info "OpenCV (Python): $name"
90110
save("tmp.png", img)
91111
flag = eltype(img) <: Gray ? cv.IMREAD_GRAYSCALE : cv.IMREAD_COLOR
112+
t_encode, t_decode = py"belapsed_cv2"(tmpname, flag, number=100)
92113
img_cv = cv.imread("tmp.png", flag)
93-
t_encode = 1000 * @belapsed cv.imwrite(tmpname, $img_cv) seconds=2
114+
cv.imwrite(tmpname, img_cv)
94115
sz = filesize(tmpname) / 1024
95-
t_decode = 1000 * @belapsed cv.imread(tmpname, $flag) seconds=2
96116
img_cv_new = cv.imread(tmpname, flag)
97117
if eltype(img) <: RGB
98118
img_cv_new = collect(reinterpret(reshape, RGB{N0f8}, permutedims(img_cv_new, (3, 1, 2))))
@@ -102,16 +122,16 @@ open("report.md", "w") do out_io
102122
img_cv = collect(reinterpret(reshape, Gray{N0f8}, img_cv))
103123
end
104124
psnr = assess_psnr(img_cv, img_cv_new)
105-
row_msg = @sprintf "| OpenCV (PyCall) | %.2f | %.2f | %.2f | %.4f |" t_encode t_decode sz psnr
125+
row_msg = @sprintf "| OpenCV (Python) | %.2f | %.2f | %.2f | %.4f |" t_encode t_decode sz psnr
106126
println(io, row_msg)
107127

108128
# Scikit-image
109-
@info "Scikit-image (PyCall): $name"
129+
@info "Scikit-image: $name"
110130
save("tmp.png", img)
131+
t_encode, t_decode = py"belapsed_skimage"(tmpname, number=100)
111132
img_ski = skimageio.imread("tmp.png")
112-
t_encode = 1000 * @belapsed skimageio.imsave(tmpname, $img_ski) seconds=2
133+
skimageio.imsave(tmpname, img_ski)
113134
sz = filesize(tmpname) / 1024
114-
t_decode = 1000 * @belapsed skimageio.imread(tmpname) seconds=2
115135
img_ski_new = skimageio.imread(tmpname)
116136
if eltype(img) <: RGB
117137
img_ski_new = collect(reinterpret(reshape, RGB{N0f8}, permutedims(img_ski_new, (3, 1, 2))))
@@ -121,7 +141,7 @@ open("report.md", "w") do out_io
121141
img_ski = collect(reinterpret(reshape, Gray{N0f8}, img_ski))
122142
end
123143
psnr = assess_psnr(img_ski, img_ski_new)
124-
row_msg = @sprintf "| Scikit-image (PyCall) | %.2f | %.2f | %.2f | %.4f |" t_encode t_decode sz psnr
144+
row_msg = @sprintf "| Scikit-image | %.2f | %.2f | %.2f | %.4f |" t_encode t_decode sz psnr
125145
println(io, row_msg)
126146

127147
println(io)

benchmark/pyhelpers.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import timeit
2+
import skimage
3+
import cv2
4+
5+
6+
def belapsed_skimage(filename, *, number):
7+
t_read = timeit.timeit(lambda: skimage.io.imread(filename), number=number)
8+
img = skimage.io.imread(filename)
9+
t_write = timeit.timeit(
10+
lambda: skimage.io.imsave(filename, img), number=number)
11+
return 1000*t_read/number, 1000*t_write/number # ms
12+
13+
14+
def belapsed_cv2(filename, flag, *, number):
15+
t_read = timeit.timeit(lambda: cv2.imread(filename, flag), number=number)
16+
img = cv2.imread(filename, flag)
17+
t_write = timeit.timeit(lambda: cv2.imwrite(filename, img), number=number)
18+
return 1000*t_read/number, 1000*t_write/number # ms

0 commit comments

Comments
 (0)