web-dev-qa-db-ja.com

CV2を使用して画像ファイル(ファイルストレージオブジェクト)を読み取る

画像をcurlでflaskサーバーに送信しています。このcurlコマンドを使用しています。

curl -F "[email protected]" http://localhost:8000/home

サーバー側で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)

私はこのエラーを受けています-

img = cv2.imread(data)
TypeError: expected string or Unicode object, FileStorage found

サーバー側でCV2を使用してファイルを読み取るにはどうすればよいですか?

ありがとう!

flaskサーバーで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)

しかし、今私は here からさらに効率的なアプローチを得ています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)
19
flamelite

少し実験を行った後、私は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)

PILを使用せずにこれを行う簡単な方法はあるのでしょうか。

2行のソリューション、グレースケールを必要なものに変更

 npimg = numpy.fromfile(request.files['image'], numpy.uint8)
 # convert numpy array to image
 img = cv2.imdecode(npimg, cv2.IMREAD_GRAYSCALE)
1
Artem Ibragimov

だからあなたがのようなことをしたい場合は、

file = request.files['file']
img = cv2.imread(file) 

それからこのようにします

import numpy as np
file = request.files['file']
npimg = np.fromfile(file, np.uint8)
file = cv2.imdecode(npimg, cv2.IMREAD_COLOR)

これで、再度cv2.imread()を実行する必要はありませんが、これを次のコード行で使用できます。

これはopencv> 3に適用されます

0
Sahana M