AKS*_*HAN 6 curl image flask cv2
我正在通过curl将图像发送到烧瓶服务器,我正在使用此curl命令
curl -F "file=@image.jpg" http://localhost:8000/home
Run Code Online (Sandbox Code Playgroud)
我试图在服务器端使用CV2读取文件.
在服务器端,我通过此代码处理图像
@app.route('/home', methods=['POST'])
def home():
data =request.files['file']
img = cv2.imread(data)
fact_resp= model.predict(img)
return jsonify(fact_resp)
Run Code Online (Sandbox Code Playgroud)
我收到这个错误 -
img = cv2.imread(data)
TypeError: expected string or Unicode object, FileStorage found
Run Code Online (Sandbox Code Playgroud)
如何在服务器端使用CV2读取文件?
谢谢!
fla*_*ite 17
我在使用带烧瓶服务器的opencv时遇到了类似的问题,首先我将图像保存到磁盘并使用cv2.imread()再次使用保存的文件路径读取该图像
这是一个示例代码:
data =request.files['file']
filename = secure_filename(file.filename) # save file
filepath = os.path.join(app.config['imgdir'], filename);
file.save(filepath)
cv2.imread(filepath)
Run Code Online (Sandbox Code Playgroud)
但是现在通过使用cv2.imdecode()从numpy数组中读取图像,我从这里获得了更有效的方法,如下所示:
#read image file string data
filestr = request.files['file'].read()
#convert string data to numpy array
npimg = numpy.fromstring(filestr, numpy.uint8)
# convert numpy array to image
img = cv2.imdecode(npimg, cv2.CV_LOAD_IMAGE_UNCHANGED)
Run Code Online (Sandbox Code Playgroud)
经过一番实验,我自己找到了一种使用 CV2 读取文件的方法。为此,我首先使用 PIL.image 方法读取图像
这是我的代码,
@app.route('/home', methods=['POST'])
def home():
data =request.files['file']
img = Image.open(request.files['file'])
img = np.array(img)
img = cv2.resize(img,(224,224))
img = cv2.cvtColor(np.array(img), cv2.COLOR_BGR2RGB)
fact_resp= model.predict(img)
return jsonify(fact_resp)
Run Code Online (Sandbox Code Playgroud)
我想知道是否有任何直接的方法可以在不使用 PIL 的情况下做到这一点。
小智 5
所以如果你想做类似的事情,
file = request.files['file']
img = cv.imread(file)
Run Code Online (Sandbox Code Playgroud)
然后这样做
import numpy as np
file = request.files['file']
file_bytes = np.fromfile(file, np.uint8)
file = cv.imdecode(file_bytes, cv.IMREAD_COLOR)
Run Code Online (Sandbox Code Playgroud)
现在您不需要cv.imread()
再次执行此操作,但可以在下一行代码中使用它。
这适用于 OpenCV v3.x 及更高版本