当前位置: 首页 > news >正文

Docker容器中的OpenCV:轻松构建可移植的计算机视觉环境

前言

在这里插入图片描述
「作者主页」:雪碧有白泡泡
「个人网站」:雪碧的个人网站
请添加图片描述

构建可移植的计算机视觉环境

请添加图片描述

文章目录

  • 前言
  • 引言
    • 简介:
      • 目的和重要性:
  • 深入理解Docker和OpenCV
    • Docker的基本概念和优势:
    • OpenCV简介和应用领域:
  • 构建Docker镜像
  • 部署分享Docker容器
    • 1. 打包Docker镜像:
    • 2. 上传到Docker镜像仓库:
    • 3. 在其他机器上部署并运行容器:
  • 送书活动

引言

在这里插入图片描述

简介:

  • 计算机视觉是一门涉及图像和视频处理的领域,可以应用于目标检测、图像识别、人脸识别等各种任务。
  • 不同的开发环境、操作系统和硬件配置可能导致部署和运行计算机视觉应用的困难。

目的和重要性:

  • Docker容器提供了一种轻量级、可移植、一致性的解决方案,使开发者能够简化环境配置和应用部署过程。
  • 这样的环境可以跨多个平台和机器进行部署,在不同的计算机视觉项目中实现复用和共享,提高研发效率和可移植性。
    在这里插入图片描述

深入理解Docker和OpenCV

Docker的基本概念和优势:

  • 镜像、容器、仓库等。镜像是可执行文件的打包,容器是基于镜像创建的进程,仓库是存储和分享镜像的地方。
  • 隔离性和一致性,容器化应用可以在不同的环境中以相同的方式运行;可移植性,容器可以在不同的平台和操作系统上进行部署;高效性,容器共享主机的操作系统内核,减少资源占用。

OpenCV简介和应用领域:

  • OpenCV是一个开源的计算机视觉库,提供了丰富的图像处理和机器视觉算法,如特征提取、对象检测和图像分割等。
  • 例如,物体识别和跟踪可应用于自动驾驶;人脸识别可以用于安全监控和人机交互;图像处理算法可应用于医学图像分析等。

构建Docker镜像

  1. 创建一个新的文件夹,并在该文件夹中创建Dockerfile。
  2. 使用文本编辑器打开Dockerfile,并按照以下示例代码添加内容:
# 基于适当的基础映像开始构建
FROM python:3.9# 安装所需的依赖项
RUN apt-get update && apt-get install -y \build-essential \cmake \libgtk2.0-dev \pkg-config \libavcodec-dev \libavformat-dev \libswscale-dev \libtbb2 \libtbb-dev \libjpeg-dev \libpng-dev \libtiff-dev \libdc1394-22-dev# 设置工作目录
WORKDIR /app# 拷贝源代码文件到容器中
COPY . /app# 配置OpenCV编译选项
RUN cd /app && \mkdir build && \cd build && \cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D WITH_LIBV4L=ON -D BUILD_opencv_python2=OFF -D BUILD_opencv_python3=ON .. && \make -j$(nproc) && \make install# 安装其他Python依赖项
RUN pip install numpy# 应用程序入口点
CMD ["python", "app.py"]

请注意,上面的代码示例假设你的应用程序文件为app.py,并且位于与Dockerfile相同的目录中。

  1. 保存并关闭Dockerfile文件。

在这个例子中,我们使用了一个基于Python 3.9的基础映像,并在其中安装了所需的依赖项。然后,我们将工作目录设置为/app,并将应用程序的源代码复制到容器中。接下来,我们通过使用cmake来配置OpenCV的编译选项,并使用make命令来构建和安装OpenCV。最后,我们安装了Python的依赖项,并通过CMD指令定义了容器启动时运行的命令。

完成后,你可以使用docker build命令来构建Docker镜像,例如:

docker build -t myapp-image .

这将会基于Dockerfile构建一个名为myapp-image的镜像。.表示Dockerfile所在的当前目录。

部署分享Docker容器

1. 打包Docker镜像:

  • 首先,确保你已经构建了Docker镜像。如果你还没有构建镜像,请参考之前提供的方法构建一个镜像。
  • 使用docker save命令将镜像保存为.tar文件,如下所示:
    docker save -o myapp-image.tar myapp-image
    
    这会将名为myapp-image的镜像保存为myapp-image.tar文件。

2. 上传到Docker镜像仓库:

  • 在你选择的Docker镜像仓库(如Docker Hub、AWS ECR等)上创建一个仓库。请根据镜像仓库的官方文档了解如何创建仓库。
  • 使用docker login命令登录到你的Docker镜像仓库账户,如下所示:
    docker login <镜像仓库地址>
    
  • 使用docker load命令将.tar文件加载到本地Docker,然后使用docker tag命令给镜像打上标签,以便与远程镜像仓库中的仓库关联,如下所示:
    docker load -i myapp-image.tar
    docker tag myapp-image <镜像仓库地址>/<仓库名称>:<标签>
    
  • 最后,使用docker push命令将镜像推送到远程镜像仓库,如下所示:
    docker push <镜像仓库地址>/<仓库名称>:<标签>
    
    这样,你的镜像就会被上传到远程镜像仓库中了。

在这里插入图片描述

3. 在其他机器上部署并运行容器:

  • 在目标机器上安装Docker,并使用docker login命令登录到你的Docker镜像仓库账户。
  • 使用docker pull命令从远程镜像仓库中拉取镜像到目标机器上,如下所示:
    docker pull <镜像仓库地址>/<仓库名称>:<标签>
    
  • 使用docker run命令在目标机器上运行容器,如下所示:
    docker run -d --name myapp-container -p 8080:80 <镜像仓库地址>/<仓库名称>:<标签>
    
    这将在目标机器上创建一个名为myapp-container的容器,并将容器的80端口映射到主机的8080端口。
  • 现在,你的容器应该在目标机器上运行了,并且可以通过访问http://目标机器IP:8080来访问你的应用程序。

记得将<镜像仓库地址><仓库名称><标签>替换为实际的值。

送书活动

  • 🎁本次送书1~3本【取决于阅读量,阅读量越多,送的越多】👈
  • ⌛️活动时间:截止到2023-12月5号 请添加图片描述
  • ✳️参与方式:关注博主+三连(点赞、收藏、评论)

相关文章:

Docker容器中的OpenCV:轻松构建可移植的计算机视觉环境

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 构建可移植的计算机视觉环境 文章目录 前言引言简介&#xff1a;目的和重要性&#xff1a; 深入理解Docker和OpenCVDocker的基本概念和优势&#xff1a;OpenCV简介和应用领域&#xff1a;…...

SSH基础和高级用法

SSH基础和高级用法 SSH&#xff08;Secure Shell&#xff09;是一种安全协议&#xff0c;用于在不安全的网络上提供安全的远程登录和数据传输。以下是一些SSH的用法和高级用法&#xff1a; 基本用法&#xff1a; 远程登录&#xff1a;使用ssh命令可以实现在本地计算机上远程…...

算法通关第十三关-青铜挑战数学基础问题

数组元素积的符号 描述 : 已知函数 signFunc(x) 将会根据 x 的正负返回特定值&#xff1a; 如果 x 是正数&#xff0c;返回 1 。如果 x 是负数&#xff0c;返回 -1 。如果 x 是等于 0 &#xff0c;返回 0 。 给你一个整数数组 nums 。令 product 为数组 nums 中所有元素值的…...

如何使用 Freepik 的 Pikaso 工具来画图

Freepik 是一个提供高质量的照片、矢量图像、插图以及 PSD 文件素材的网站https://www.freepik.com/您可以在这里找到各种风格和主题的素材&#xff0c;用于您的创意项目。Freepik 还提供了一个名为 Pikaso 的在线画图工具&#xff0c;让您可以轻松地创建和编辑您自己的图像&am…...

一个没正常处理tcp对端关闭的bug

最近使用自研的http client时发现一个问题&#xff0c;对端在发送响应数据之后立即调用close关闭了连接&#xff0c;我这没有调用到响应的回调&#xff0c;而是调用到了连接关闭的回调。对端延迟一会再关闭连接就没问题&#xff0c;用curl去访问也是正常的。经过排查是没有正确…...

什么是JDK

JDK是Java的开发工具&#xff0c;全称为Java Development Kit&#xff0c;包含Java运行环境&#xff0c;Java工具&#xff0c;Java基础类库三大部分。 Java运行环境 Java运行环境&#xff0c;也就是JRE&#xff0c;全称为Java Runtime Environment &#xff0c;其中包含JVM&…...

积分表二(高等数学同济版中所有的积分公式)

文章目录 含有 x − a x a \sqrt{\pm \frac{x-a}{xa}} xax−a​ ​ 或者 ( x − a ) ( b − x ) \sqrt{(x-a)(b-x)} (x−a)(b−x) ​ 的积分含有三角函数函数的积分含有反三角函数的积分 (其中 a > 0 a>0 a>0)含有指数函数的积分含有对数函数的积分含有双曲函数的…...

Golang数据类型(数字型)

Go数据类型&#xff08;数字型&#xff09; Go中数字型数据类型大致分为整数&#xff08;integer&#xff09;、浮点数&#xff08;floating point &#xff09;和复数&#xff08;Complex&#xff09;三种 整数重要概念 整数在Go和Python中有较大区别&#xff0c;主要体现在…...

【JVM系列】- 穿插·对象的实例化与直接内存

对象的实例化与直接内存 &#x1f604;生命不息&#xff0c;写作不止 &#x1f525; 继续踏上学习之路&#xff0c;学之分享笔记 &#x1f44a; 总有一天我也能像各位大佬一样 &#x1f31d;分享学习心得&#xff0c;欢迎指正&#xff0c;大家一起学习成长&#xff01; 文章目录…...

【C++干货铺】继承 | 多继承 | 虚继承

个人主页点击直达&#xff1a;小白不是程序媛 C系列专栏&#xff1a;C干货铺 代码仓库&#xff1a;Gitee 目录 继承的概念及定义 继承的概念 继承的定义 继承基类成员访问方式的变化 基类和派生类的赋值转化 继承中的作用域 派生类的默认成员函数 构造函数 拷贝构造…...

【ARM CoreLink 系列 8.1 -- SMMU 详细介绍-STE Entry 详细介绍 1】

请阅读【ARM CoreLink 文章专栏导读】 上篇文章:【ARM CoreLink 系列 8 – SMMU 详细介绍-上半部】 文章目录 ARM SMMU STE ENTRY1.1 STE ENTRYWORD[0]1.1.1 S1ContexPtr1.1.2 S1Fmt1.1.3 Config1.1.4 V(Valid)1.2 STE ENTRY WORD[1]1.2.1 S1CDMax1.2.2 S1ContextPtr1.3 STE E…...

高防CDN与WAF防火墙的协同防护:构筑网络安全堡垒

随着互联网的不断发展&#xff0c;网络安全威胁也日益增多&#xff0c;而网站作为企业在数字领域的门户&#xff0c;面临的风险更加复杂多样。在构筑网络安全堡垒的过程中&#xff0c;高防CDN&#xff08;Content Delivery Network&#xff09;与WAF&#xff08;Web Applicatio…...

golang strings包的基本操作

文章目录 golang 的字符串函数EqualFoldHasPrefixHasSuffixContainsContainsRuneContainsAnyCountIndexIndexByteIndexRuneIndexAnyIndexFuncLastIndexLastIndexAnyLastIndexFuncTitleToLowerToLowerSpecialToUpperToUpperSpecialToTitleToTitleSpecialRepeatReplaceMapTrimTri…...

高效解决在本地打开可视化服务器端的tensorboard

文章目录 问题解决方案 问题 由于连着远程服务器构建模型&#xff0c;但是想在本地可视化却做不到&#xff0c;不要想当然天真的以为CTRLC点击链接http://localhost:6006就真能在本地打开tensorboard。你电脑都没连接服务器&#xff0c;只是pycharm连上了而已 解决方案 你需要…...

Spring Boot Actuator 2.2.5 基本使用

1. pom文件 &#xff0c;添加 Actuator 依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> 2.application.properties 文件中添加以下配置 …...

字符串相似度匹配算法_莱茵斯坦距离算法

package day0330;public class LevenshteinDistanceUtil {public static void main(String[] args) {String a "WN64 F98";String b "WN64 F98 ";System.out.println("相似度:" getSimilarityRatio(a, b));}/*** 获取两字符串的相似度* * par…...

【EI会议征稿】第九届电气、电子和计算机工程研究国际学术研讨会 (ISAEECE 2024)

第九届电气、电子和计算机工程研究国际学术研讨会 (ISAEECE 2024) 2024 9th International Symposium on Advances in Electrical, Electronics and Computer Engineering 第九届电气、电子和计算机工程研究国际学术研讨会(ISAEECE 2024&#xff09;将于2024年3月1-5日在南…...

Maven Helper插件——实现一键Maven依赖冲突问题

总结/朱季谦 业余在一个SpringBoot项目集成Swagger2时&#xff0c;启动过程一直出现以下报错信息—— An attempt was made to call a method that does not exist. The attempt was made from the following location: ​ springfox.documentation.schema.DefaultModelDepe…...

理解位运算的规则

关卡名 理解位运算的规则 我会了✔️ 内容 1.理解位运算的基本规则 ✔️ 2.理解移位的原理以及与乘除的关系 ✔️ 3.掌握位运算的常用技巧 ✔️ 在学习位操作之前&#xff0c;我们先明确数据在计算机中怎么表示的。我们明确原码、反码和补码的概念和表示方法&#xff0c;之…...

Android Bitmap 使用Vukan、RenderEffect、GLSL实现模糊

文章目录 Android Bitmap 使用Vukan、RenderEffect、GLSL实现模糊使用 RenderEffect 模糊使用 Vukan 模糊使用 GLSL 模糊RS、Vukan、RenderEffect、GLSL 效率对比 Android Bitmap 使用Vukan、RenderEffect、GLSL实现模糊 本文首发地址 https://blog.csdn.net/CSqingchen/articl…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期&#xff0c;让读者对此有深刻印象。 目录 ​…...