Ubuntu下使用PyTurboJPEG加速图像编解码
本文介绍了基于libjpeg-turbo的高效JPEG编解码库PyTurboJPEG的安装与性能测试。该库通过SIMD指令集优化,在纯CPU环境下编解码速度较原生libjpeg提升2-6倍。实验表明,PyTurboJPEG(2.0ms/张)比OpenCV的imdecode(2.5ms/张)图像读取速度更快,特别适合对性能要求严苛的计算机视觉应用场景。安装过程包括下载编译libjpeg-turbo和
目录
一、概述
在计算机视觉领域,图像编解码是绕不开的基础环节。虽然 OpenCV 能解决大部分图像处理问题,但在性能要求严苛的场景下存在短板。本文将介绍基于 libjpeg-turbo 的高效 JPEG 编解码库 PyTurboJPEG,特别适用于纯 CPU 环境下的性能优化需求。
PyTurboJPEG 核心优势如下:
-
技术渊源:ibjpeg 是经典的 JPEG 压缩库,使用C语言开发,而 libjpeg-turbo 是在此基础上进行深度优化的库,使用来SIMD 指令集(MMX、SSE2、NEON 等)实现性能加速,支持 x86、ARM 等主流架构。本文介绍的PyTurboJPEG则是 libjpeg-turbo 的 Python 封装版。
-
性能表现:实测表明,libjpeg-turbo在JPEG 编解码速度上较原生libjpeg提升2-6 倍,且在压缩率与速度之间达到极佳平衡,性能可媲美部分商业编解码器。
二、安装PyTurboJPEG
本文实验环境为Ubuntu22.04。
首先安装nasm:
sudo apt-get install nasm
然后进入下载官网页面,网址https://sourceforge.net/projects/libjpeg-turbo/files/ 。
下载2.0.x版本对应的libjpeg-turbo-2.0.2.tar.gz,如下图所示:

下载后使用下面的命令进行解压
tar -zxvf libjpeg-turbo-2.0.2.tar.gz
然后使用下面的命令进行编译和安装:
cd libjpeg-turbo-2.0.2
mkdir build
cd build
cmake -G"Unix Makefiles" ..
make -j8
sudo make install
sudo cp -rvf /opt/libjpeg-turbo/lib64/* /lib/
最后安装PyTurboJPEG库即可:
pip install PyTurboJPEG
三、测试
下面测试图像读取的性能。
以下是使用Opencv的imdecode函数实现:
import os
import time
import cv2
import numpy as np
from turbojpeg import TurboJPEG
img_folder = '../test/img5/'
dst_folder = '../test/result/'
# 检索img_folder下的所有图片
img_files = os.listdir(img_folder)
jpegtool = TurboJPEG()
start_time = time.time()
# 逐张处理
pic = 0
for img_file in img_files:
# 使用opencv的decode读取图像
img = cv2.imdecode(np.fromfile(img_folder + img_file, dtype=np.uint8), cv2.IMREAD_COLOR)
pic += 1
end_time = time.time()
print('average time: ', (end_time - start_time) / pic)
测试结果为2.5ms/张图像。
下面是使用PyTurboJPEG的版本:
import os
import time
from turbojpeg import TurboJPEG
img_folder = '../test/img5/'
dst_folder = '../test/result/'
# 检索img_folder下的所有图片
img_files = os.listdir(img_folder)
jpegtool = TurboJPEG()
start_time = time.time()
# 逐张处理
pic = 0
for img_file in img_files:
# decoding input.jpg to BGR array
with open(img_folder + img_file, 'rb') as in_file:
bgr_array = jpegtool.decode(in_file.read())
pic += 1
end_time = time.time()
print('average time: ', (end_time - start_time) / pic)
测试结果为2.0ms/张。
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)