此方法在小米和华为设备上实验成功,均在Android P下进行!安装及配置时请确保联网,需要下载工具!
此方法参考了以下文章,感谢作者!
pkg install python python-dev
pkg install libjpeg-turbo-dev libpng-dev cmake pkg-config
很多教程中会要求也安装clang,但笔者安装clang后反而编译时会报错,具体原因未找到
使用git将opencv clone下来,并进入opencv文件夹
git clone https://github.com/opencv/opencv && cd opencv
mkdir build && cd build
在执行配置文件之前一定要获取管理员身份,否则可能make后无法正常使用
没有root的手机可以使用Termux提供的工具proot模拟root环境
# 安装proot
pkg install proot
# 进入管理员环境,用exit退出
termux-chroot
已经root了的手机,可以使用Termux提供的工具tsu代替su命令
# 安装tsu
pkg install tsu
# 进入管理员环境,用exit退出
tsu
使用以下命令进行配置
LDFLAGS=" -llog -lpython3" cmake -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=$PREFIX/local -DBUILD_opencv_python3=on -DBUILD_opencv_python2=off -DOPENCV_EXTRA_MODULES=../modules -DPYTHON3_LIBRARIES=$PREFIX/lib/libpython3.so -DWITH_QT=OFF -DWITH_GTK=OFF ..
-DCMAKE_INSTALL_PREFIX 为opencv最终安装路径,一般为/usr/local,这里我使用$PREFIX/local,$PREFIX是Termux提供的系统变量对应的路径为/data/data/com.termux/files/usr
-DOPENCV_EXTRA_MODULES 是opencv的modules文件夹
-DPYTHON3_LIBRARIES 是Python的libpython3.so所在路径
-DWITH_QT 若需要QT支持,将此项设为ON
注意做后有两个“…”不要忘了,那个表示在上一级目录执行
编译命令
make -j4
注意这一步编译时间比较长,请耐心等待。
-j是表示启用的job数,我是启动了4个任务编译,如果你的设备CPU足够好可以用8个,若是性能不好建议仅使用make,不加任何参数以保证编译时不错出,但会增加时间。我用4job编译大约用了1小时,仅用make编译用了近2小时
编译后进行安装,然后退出管理员模式
make install
exit
安装好后,进入Python
python
import cv2
如果导入cv2不报错,则表示安装成功,如果报错,可尝试指定下PYTHONPATH,这里的路径是文件cv2.XXX-XXX.so存在的目录,第一个XXX是编译Python连接库类型,第二个XXX是Python版本
export PYTHONPATH=/data/data/com.termux/files/usr/local/lib/python3.7/site-packages/cv2/python-3.7:$PYTHONPATH
# 设置默认文本编辑器,vi的基本操作请自行百度
export EDITOR=vi
# 修改下载源
apt edit-sources
将原来的https://termux.net官方源替换为http://mirrors.tuna.tsinghua.edu.cn/termux (其他内容不要删除)
2. 配置命令报错
问题:在进行配置命令时总是报错,各种错误,常见找不到模块、未定义xxx的错误
解决方法:同样是应为必备工具没有安装好的原因
3. 编译报undefind “__android_log_print"错误
问题:编译时遇到undefind “__android_log_print"错误,然后仍然继续编译几行后,停止编译
解决方法:配置中需要添加LDFLAGS=” -llog -lpython3”
4. 安装报很对未知错误
问题:在安装中发现很多未知错误后警告
解决方法:没有安装Numpy,pip install numpy后重新安装即可
5. 安装后import cv2报错 missing configuration
问题:安装后进入python,import cv2时报丢失配置
解决方法:查找opencv的安装目录下是否有cv2.XXX-XXX.so文件,第一个XXX是编译Python连接库类型,第二个XXX是Python版本。若没有说明编译权限不够,或是其他未知原因,使用管理员重新编译下,然后找到该文件目录后添加到PYTHONPATH中,注意只需要添加文件所在目录即可,添加方法上面第7步中有写
6.关于安卓10的说明
以上命令在Android9系统上实测正常,在Android10系统上,termux-chroot命令会报错无法使用,这会导致后面配置生成的cv2.XXX-XXX.so无法生成,暂时没有找到解决办法,如需使用可root手机尝试,笔者没有root后的手机,因此没有尝试。 经测试,在Android10上可使用最新的termux版本(0.98版本)可正常运行termux-chroot命令,若直接升级仍无法使用,可重新安装proot尝试。另外,配置命令会报AndroidSDK的错误,需增加-DBUILD_JAVA=OFF -DBUILD_ANDROID_EXAMPLES=OFF这两个命令,最终完整的命令如下(此问题感谢 稚you 的评论才得以解决)
LDFLAGS=" -llog -lpython3" cmake -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=$PREFIX/local -DBUILD_opencv_python3=on -DBUILD_opencv_python2=off -DOPENCV_EXTRA_MODULES=../modules -DPYTHON3_LIBRARIES=$PREFIX/lib/libpython3.so -DWITH_QT=OFF -DWITH_GTK=OFF -DBUILD_JAVA=OFF -DBUILD_ANDROID_EXAMPLES=OFF ..