在停止和启动 ubuntu EC2 服务器时,没有名为“cv2”的模块错误。 (导入cv2错误)

Posted

技术标签:

【中文标题】在停止和启动 ubuntu EC2 服务器时,没有名为“cv2”的模块错误。 (导入cv2错误)【英文标题】:On stopping and starting ubuntu EC2 server, no module named 'cv2' error. (Import cv2 error) 【发布时间】:2020-06-10 08:17:47 【问题描述】:

我从源代码安装了 opencv(我尝试了 pip 和 sudo 方式,但没有打开客户端机器上的 cam)。因此,我成功安装了它,并且 cv2.so 文件正确链接到创建的虚拟环境。即使在导入 cv2 时它也能正常工作。发布后我停止了 EC2 实例,因为它需要在第二天进一步工作,我发现现在在导入 cv2 时它会抛出“未找到名为 cv2 的模块”。请指导。

更新 1 - 当我运行代码时,它执行没有错误但是,当我加载页面时出现以下错误 - cv2.error: OpenCV(4.2.0) /io/opencv/modules/imgcodecs/src/loadsave.cpp:877: error: (-215:Assertion failed) !image.empty() in function 'imencode'

我知道 imencode 收到了空图像,这就是上面代码的原因。但是代码在本地机器上运行得很好。当我在 ec2 上运行它时,会弹出此错误。

 run.py


from flask import Flask, render_template, Response, url_for
import io
import cv2

app = Flask(__name__)


@app.route('/')
def index():
    """Video streaming home page."""
    return render_template('index.html')


def gen():
    vc = cv2.VideoCapture(0)
    """Video streaming generator function."""
    while True:
        read_return_code, frame = vc.read()
        encode_return_code, image_buffer = cv2.imencode('.jpg', frame)
        io_buf = io.BytesIO(image_buffer)
        yield (b'--frame\r\n'
               b'Content-Type: image/jpeg\r\n\r\n' + io_buf.read() + b'\r\n')


@app.route('/video_feed')
def video_feed():
    """Video streaming route. Put this in the src attribute of an img tag."""
    return Response(
        gen(),
        mimetype='multipart/x-mixed-replace; boundary=frame'
    )



# main driver function 
if __name__ == '__main__': 
    app.run(host='0.0.0.0',port=5000)

index.html
<!DOCTYPE html>
<html>
<head>




</head>
<body>
    <div class="container" style="width: 90vw; text-align: center;">
        <h1 style="font-size: 4vh; color: blue;">Intelligent Camera</h1>    
        <h4 style="font-size: 2vh;">Best Object Detection Cam</h4>    
        <img src="url_for('video_feed')" style="width: calc(70% - 10px); height: calc(60% - 10px); background-color: white; border: double black;">


    </div>



</body>

</html>

【问题讨论】:

【参考方案1】:

你可以试试这个命令来安装 CV2。

pip install opencv-python

【讨论】:

我尝试使用 pip install opencv-python 但它不起作用! 你用过Instance-store吗?如果是,则在停止实例后,该卷上的所有数据都将被删除。每次您停止实例时,您的数据都会被删除。 不,我没有为此使用实例存储【参考方案2】:

该错误告诉您frameNone

预热视频流时,测试错误(在您的情况下为read_return_code)。根据视频源的不同,您可能会在开始获取有效帧之前获得其中的一些。

但我认为你有一个不同的问题。如果你在 ec2 上部署,你是如何连接摄像头的?

【讨论】:

是的,我无法使用 VideoCapture (0) 打开生产服务器上的摄像头,这就是它抛出错误的原因,因为没有捕获任何帧。现在我使用 HTML 的视频标签和 socketio 来构建这个功能。如果有人有类似的代码,请分享... 是什么导致人们相信 EC2 实例连接了摄像头?

以上是关于在停止和启动 ubuntu EC2 服务器时,没有名为“cv2”的模块错误。 (导入cv2错误)的主要内容,如果未能解决你的问题,请参考以下文章

在不活动的情况下以编程方式停止 AWS EC2

在 Beanstalk 部署或 ECS 任务不使用时安排 EC2 实例的停止/启动?

停止并启动在 EC2 和 mysql RDS 上运行 php 的 AWS Elastic Beanstalk

当我停止并启动一个 ec2 cent os 实例时,我会丢失哪些数据

停止和启动 Elastic Beanstalk 服务

启动和停止 AWS EC2 实例