2017-11-27 18 views
1
私は、サーバーをフラスコにカールさせて画像を送信しています

を使用して(ファイルストレージオブジェクト)、私はこのcurlコマンド読書イメージファイルCV2

​​

を使用していると私は、サーバー上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) 

で画像を扱うサーバー側で

私は、これは

私は、サーバー側でCV2を使用してファイルを読み込むにはどうすればよい
img = cv2.imread(data) 
TypeError: expected string or Unicode object, FileStorage found 

をエラー - 取得していますか?

ありがとうございます!

+1

(シンプルな)方法については、https://stackoverflow.com/questions/17170752/python-opencv-load-image-from-byte-stringを参照してください。 cv2が利用可能であることは、numpy(np)が利用可能であることを意味することに注意してください。 –

答えて

1

私は同様の問題を有していました。

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) 

しかし、今、私は以下のようにnumpyの配列から画像を読み取るcv2.imdecode()を使用してhereから、より効率的なアプローチを持っている:

#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) 
+0

ありがとうございます。これは動作します! –

+0

2回目のトリックでは、opencv 3.1用にimg = cv2.imdecode(npimg、cv2.IMREAD_COLOR)を使用します。 – user1

0

少しの実験の後、私はCV2を使ってファイルを読む方法を考え出しました。このため は私が最初にPIL.image方法

これは私のコードで、PILを使用せずにこれを行うにはどのまっすぐ進む方法があるかしら

@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) 

を使用して画像を読み取ります。最初のiは、ディスクに画像を保存し、ここ

サンプルコードであるcv2.imread()を使用して再び保存ファイルパスを使用してその画像を読み取り、そのため、フラスコサーバとのOpenCVを用いながら

関連する問題