在停止和启动 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】:该错误告诉您frame
是None
。
预热视频流时,测试错误(在您的情况下为read_return_code
)。根据视频源的不同,您可能会在开始获取有效帧之前获得其中的一些。
但我认为你有一个不同的问题。如果你在 ec2 上部署,你是如何连接摄像头的?
【讨论】:
是的,我无法使用 VideoCapture (0) 打开生产服务器上的摄像头,这就是它抛出错误的原因,因为没有捕获任何帧。现在我使用 HTML 的视频标签和 socketio 来构建这个功能。如果有人有类似的代码,请分享... 是什么导致人们相信 EC2 实例连接了摄像头?以上是关于在停止和启动 ubuntu EC2 服务器时,没有名为“cv2”的模块错误。 (导入cv2错误)的主要内容,如果未能解决你的问题,请参考以下文章
在 Beanstalk 部署或 ECS 任务不使用时安排 EC2 实例的停止/启动?
停止并启动在 EC2 和 mysql RDS 上运行 php 的 AWS Elastic Beanstalk