В настоящее время я разрабатываю веб-интерфейс, в котором вы можете нарисовать диафрагму git и загрузить ее. Изображение проходит модель машинного обучения распознавания di git и возвращает di git, который был расшифрован пользователем.
HTML Код:
<canvas id="myCanvas">
Sorry, your browser does not support HTML5 canvas technology.
</canvas>
<button onclick="clickonbutton()">Upload</button>
Canvas используется для рисования ди git и кнопки для отправки ее на веб-сервер flask.
Javascript Код:
<script type="text/javascript">
function clickonbutton() {
var canvas = document.getElementById('myCanvas');
//Convert HTML5 Canvas to bytes-like object then File object
canvas.toBlob(function(blob) {
var file = new File([blob], "image.png", { type: "image/png", lastModified : new Date()});
//Prepare a XMLHttpRequest to send the data with POST method to the server
var request = new XMLHttpRequest();
request.open("POST", "/");
request.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
//Sending file...
request.send(file);
});
}
</script>
Когда пользователь нажимает кнопку «Загрузить» "после редактирования холста HTML5 он запускает эту функцию, которая отправляет файл на сервер.
Python скрипт (на стороне сервера):
@app.route('/', methods=['GET', 'POST'])
def upload_file():
if request.method == 'POST':
#Convert MultiDict to Dict object then string
data = str(request.form.to_dict())
#Format string to remove Dict elements
data = data.replace("{","")
data = data.replace("}","")
data = data.replace("'","")
data = data.replace(": ","")
#Convert string to bytes-like object
img_bytes = data.encode()
#Predict the digit of the user
_, predicted_class, probabilities = get_prediction(image_bytes=img_bytes)
predicted_class = int(predicted_class)
classify(img=_, ps=probabilities)
#Return the result of the digit prediction
return render_template('result.html',class_name=predicted_class)
return render_template('index.html')
на стороне сервера я получаю данные из request.form, но они находятся в объекте ImmutableMultiDict, поэтому я преобразовал данные в строку, а затем в байтовый объект. К сожалению, преобразование с использованием метода .replace () повреждает файл PNG, и нет средства для правильного выполнения этого преобразования ...
Существует ли решение для получения данных непосредственно в объекте File без использования объекта ImmutableMultiDict