2017-11-27 8 views
1

ich ein Bild von curl schicken Server Flasche, ich bin mit diesem curl BefehlLesebilddatei (Dateispeicherobjekt) mit CV2

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

und ich versuche, die Datei mit CV2 auf dem Server zu lesen Seite.

Auf der Serverseite behandeln ich das Bild von diesem Code

@app.route('/home', methods=['POST']) 
def home(): 
    data =request.files['file'] 
    img = cv2.imread(data) 
    fact_resp= model.predict(img) 
    return jsonify(fact_resp) 

ich diese fehler-

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

Wie kann ich die Datei mit CV2 auf der Server-Seite lesen?

Danke!

+1

Siehe https://stackoverflow.com/questions/17170752/python-opencv-load-image-from-byte-string für einen (einfacheren) Weg. Beachten Sie, dass die Verfügbarkeit von cv2 impliziert, dass numpy (np) verfügbar ist. –

Antwort

1

Ich hatte ähnliche Probleme während opencv mit Kolben-Server, für die erste gespeicherte ich das Bild auf der Festplatte und lesen Sie das Bild wieder mit gespeicherten Dateipfad cv2.imread mit()

Hier ist ein Beispielcode:

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) 

Aber jetzt ich habe noch effizienten Ansatz von here von cv2.imdecode mit() Bild von numpy Array zu lesen, wie unten:

#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

Danke. Das funktioniert! –

+0

Für den 2. Trick verwenden Sie img = cv2.imdecode (npimg, cv2.IMREAD_COLOR) für opencv 3.1 – user1

0

Nach ein paar Experimenten habe ich selbst eine Möglichkeit gefunden, die Datei mit CV2 zu lesen. Dazu las ich das Bild zuerst PIL.image Methode

Dies ist mein Code,

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

Ich frage mich, ob es eine gerade nach vorne Weg ist, diese PIL ohne zu tun.