Streaming

This commit is contained in:
Thomas Forgione 2024-07-08 17:32:49 +02:00
parent 0ad0914522
commit de053f043f
3 changed files with 41 additions and 16 deletions

9
app.py
View File

@ -54,8 +54,13 @@ def preview(id: int):
def scan_calibration(id: int): def scan_calibration(id: int):
conn = db.get() conn = db.get()
db.Object.get_from_id(id, conn) db.Object.get_from_id(id, conn)
scanner.scan(join(config.DATA_DIR, id, 'calibration'))
return jsonify(config.LEDS_UUIDS) def generate():
length = len(config.LEDS_UUIDS)
for index, led_uuid in enumerate(scanner.scan(join(config.DATA_DIR, id, 'calibration'))):
yield f"{led_uuid},{(index+1)/length}\n"
return app.response_class(generate(), mimetype='text/plain')
@app.route("/calibration/<id>") @app.route("/calibration/<id>")

View File

@ -20,3 +20,4 @@ def scan(output_dir: str):
img = join(output_dir, led + '.jpg') img = join(output_dir, led + '.jpg')
capture(img) capture(img)
print(f'Turn off {led}') print(f'Turn off {led}')
yield led

View File

@ -22,17 +22,22 @@
<div> <div>
<img id="preview-image" style="display: none;"> <img id="preview-image" style="display: none;">
</div> </div>
<div id="grid" class="grid"> <div class="fixed-grid has-8-cols">
<div id="grid" class="grid">
</div>
</div> </div>
<progress id="progress-bar" class="progress is-link" style="display: none;" value="0" max="100"></progress>
</div> </div>
</section> </section>
{% endblock content %} {% endblock content %}
{% block extrajs %} {% block extrajs %}
<script> <script>
let scanIndex = 0;
let previewButton = document.getElementById('preview-button'); let previewButton = document.getElementById('preview-button');
let calibrateButton = document.getElementById('calibrate-button'); let calibrateButton = document.getElementById('calibrate-button');
let progressBar = document.getElementById('progress-bar');
let previewImage = document.getElementById('preview-image'); let previewImage = document.getElementById('preview-image');
let grid = document.getElementById('grid'); let grid = document.getElementById('grid');
let buttons = [previewButton, calibrateButton]; let buttons = [previewButton, calibrateButton];
@ -62,20 +67,34 @@
previewImage.style.display = "none"; previewImage.style.display = "none";
buttons.forEach(x => x.setAttribute('disabled', 'disabled')); buttons.forEach(x => x.setAttribute('disabled', 'disabled'));
calibrateButton.classList.add('is-loading'); calibrateButton.classList.add('is-loading');
let response = await fetch('/api/scan-for-calibration/{{ object.id }}'); progressBar.style.display = "block";
let ledsUuids = await response.json();
calibrateButton.classList.remove('is-loading');
buttons.forEach(x => x.removeAttribute('disabled'));
for (let led of ledsUuids) { let xhr = new XMLHttpRequest();
let cell = document.createElement('div'); grid.innerHTML = '';
cell.classList.add('cell'); xhr.open('GET', '/api/scan-for-calibration/{{ object.id }}');
cell.classList.add('is-col-min-4'); xhr.onreadystatechange = () => {
let img = document.createElement('img'); if (xhr.readyState === 3 || xhr.readyState === 4) {
img.src = '/data/{{ object.id }}/calibration/' + led + '.jpg'; let uuids = xhr.responseText.split('\n');
cell.appendChild(img); let split = uuids[uuids.length - 2].split(',');
grid.appendChild(cell); let uuid = split[0];
} let ratio = parseFloat(split[1]);
progressBar.value = 100 * ratio;
let cell = document.createElement('div');
cell.classList.add('cell');
cell.classList.add('is-col-min-4');
let img = document.createElement('img');
img.src = '/data/{{ object.id }}/calibration/' + uuid + '.jpg?v=' + scanIndex;
cell.appendChild(img);
grid.appendChild(cell);
if (xhr.readyState === 4) {
buttons.forEach(x => x.removeAttribute('disabled'));
calibrateButton.classList.remove('is-loading');
}
}
};
xhr.send();
}); });
</script> </script>
{% endblock extrajs %} {% endblock extrajs %}