构建支持中文字符的OpenCV Python包
自己动手,丰衣足食
OpenCV的默认配置不支持在图像中绘制中文字符。要想在图像中绘制中文字符,需要在编译时启用FreeType模块。在上一篇文章中有过说明。
不过在部署时,使用Python作为开发语言的应用更倾向于使用pip来安装相关依赖,包括OpenCV。OpenCV官方提供了opencv-python系列包,但是,官方提供的opencv-python包没有启用FreeType模块。这种状况下,我们需要自行编译启用FreeType的opencv-python包。以下为具体过程。
环境为Ubuntu 20.04, x64架构。Python 3.8。
获取源码
首先从官方代码仓库获取源码。该项目还同时包含了opencv-contrib与opencv-extra,要有耐心。
git clone --recursive https://github.com/opencv/opencv-python.git
代码clone完毕之后检出你要编译的标签。你可以在该项目的release页面找到可用的标签。
启用FreeType支持
然后配置cmake选项。使用以下命令启用FreeType支持。
export CMAKE_ARGS="-DWITH_FREETYPE=ON -DBUILD_opencv_freetype=ON"
配置编译对象
接下来配置编译对象。OpenCV的Python包有四种可选方案,大概可以分为两组。
第一组为提供了GUI支持的方案,如果你需要使用 imshow
函数的话选择这两种。
- opencv-python。最为常用的OpenCV模块组合。
- opencv-contrib-python。包含了contrib模块的组合。contrib模块中有一些较新的算法暂时无法并入默认模块中。
第二组为无GUI支持的方案,适合部署在云端服务器或者Docker环境等不需要图像界面的情况。同样也按照是否包含contrib模块细分为两种:
- opencv-python-headless。
- opencv-contrib-python-headless。
这里以opencv-contrib-python为例,使用环境变量:
export ENABLE_CONTRIB=1
开始编译
配置完成后,使用pip正式开启构建过程。
pip3 wheel . --verbose
注意pip版本不能过低。我使用的是21.1.3。整个编译过程耗时视硬件配置。编译结束后便可获得安装文件。
安装
依照常规方式安装即可。例如:
python3 -m pip install opencv_contrib_python-4.5.3.56-cp38-cp38-manylinux2014_x86_64.whl
总结
相比在部署设备或者Docker镜像中编译OpenCV,使用编译好的wheel文件可以缩短部署时间,减小Docker镜像体积。推荐在需要自定义OpenCV组件需求的环境下使用。
Comments ()