如何在Heroku中使用OpenCV

时间:2018-03-24 20:46:35

标签: python opencv heroku

当我尝试将我的应用程序部署到Heroku时,收到以下错误:

  

File" /app/project/app/object_detection/object_detection_service.py" ;,第5行,in   文件" / app / project / app / _ _init __。py",第22行,in   文件" /app/project/app/views.py" ;,第6行,in   导入cv2   来自.cv2 import *   文件" /app/.heroku/python/lib/python3.6/site-packages/cv2/_ _init __。py",第4行,in   2018-03-24T20:40:55.986945 + 00:00 app [web.1]:ImportError:libSM.so.6:无法打开共享对象文件:没有这样的文件或目录

OpenCV无法找到libsm目录,但此应用程序在本地正确运行。我尝试过使用特定的buildpack,但是那些似乎找不到我的site-packages文件夹。

如何在Heroku上使用openCV(python)?

7 个答案:

答案 0 :(得分:7)

您可以利用heroku-buildpack-apt安装这些库。

在撰写本文时,我已通过以下步骤成功完成了for this repo(托管在here上)的工作:

  1. 在您的Heroku平台上的构建包中添加heroku-buildpack-apt
  2. 创建一个名为Aptfile的文件,并添加以下库:libsm6,libxrender1,libfontconfig1,libice6(每行一个)。示例here

答案 1 :(得分:5)

使用opencv-python-headless,因为它脱离了libSM6依赖关系。 签出this

if test "x${XMLCATALOG}" != "x" -a "x$have_xmlcatalog_file" = "xyes"; then
    DOCBOOK_XSL_URI="http://docbook.sourceforge.net/release/xsl/current"
    DOCBOOK_XSL_PATH="manpages/docbook.xsl"
    MANPAGE_DOCBOOK_XSL=$(${XMLCATALOG} ${XML_CATALOG_FILE} ${DOCBOOK_XSL_URI}/${DOCBOOK_XSL_PATH} | sed -n 's|^file:/\+|/|p;q')
fi

答案 2 :(得分:2)

新的 Aptfile 和 requirements.txt 属性对我有用:

在 Aptfile 中

from something import returnSomething

在 requirements.txt 中

libsm6
libxrender1
libfontconfig1
libice6

记住在设置中包含 Buildpack。

opencv-python-headless==4.2.0.32

答案 3 :(得分:0)

对于Windows用户,在遵循上述@Lelo建议时,请务必在Aptfile中使用unix样式行结尾

答案 4 :(得分:0)

参考Lelo关于库安装的答案,OpenCV更改了其所需的库(在撰写本文时为4.4.0)。

因此,要获取最新版本,只需在Aptfile中使用python-opencv即可,而不是其他库。

这被称为Install OpenCV-Python in Ubuntu

答案 5 :(得分:0)

您必须安装一些依赖项,因为 Heroku 不会自动为您安装。

  1. 在您的项目目录中添加一个 Aptfile 并添加以下文件
  • libsm6

  • libxrender1

  • libfontconfig1

  • libice6

    注意:Aptfile 不应有任何 .txt 或任何其他扩展名。就像 档案

  1. 将编辑好的代码推送到 Github

  2. 在heroku仪表板中,
    转到您的应用 --> 设置 --> 构建包 --> 添加构建包 --> https://github.com/heroku/heroku-buildpack-apt.git
    复制并粘贴此链接 --> 添加构建包

  3. 部署您的应用

enter image description here

答案 6 :(得分:-1)

你应该安装libsm6和libxext6, 运行

$ sudo apt-get install -y libsm6 libxext6

但是,由于heroku没有提供超级用户访问权限,因此您无法对其进行排序。您可以选择其他提供商,例如Google Cloud Platform或AWS

cmiiw