Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

v15.2.1 #2361

Merged
merged 51 commits into from
Apr 27, 2023
Merged

v15.2.1 #2361

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
512d7f9
Testcase for #2145 and debug-log (#2151)
haverland Mar 11, 2023
5e5d2e2
Fix timezone config parser (#2169)
caco3 Mar 12, 2023
ff81fcb
Enhance ROI pages (#2161)
caco3 Mar 12, 2023
4dd41c4
restart timeout on progress, catch error (#2170)
caco3 Mar 12, 2023
dfc4577
BugFix #2167
jomjol Mar 12, 2023
d1807a1
Merge branch 'rolling' of https://github.com/jomjol/AI-on-the-edge-de…
jomjol Mar 12, 2023
eefc41d
Release 15.1 preparations (#2171)
caco3 Mar 12, 2023
863856c
Merge branch 'master' into rolling
caco3 Mar 12, 2023
e81a7ee
fix typo
Mar 13, 2023
933215c
Replace relative documentation links with absolute ones pointing to t…
caco3 Mar 13, 2023
ab0fc72
Sort model files in configuration combobox (#2189)
haverland Mar 14, 2023
a8d7b29
reboot task - increase stack size (#2201)
Slider0007 Mar 17, 2023
d944e86
Update interface_influxdb.cpp
jomjol Mar 19, 2023
6ff8344
Merge branch 'correct-influxdbv1-bug' into rolling
jomjol Mar 19, 2023
d93c5da
Update Changelog.md
jomjol Mar 19, 2023
58185a0
Show PSRAM usage (#2206)
caco3 Mar 19, 2023
5db20d3
Disable custom MQTT Outbox. This also moves the MQTT Publishing memor…
Mar 19, 2023
e4a6fd3
log MQTT connection refused reasons (#2216)
Slider0007 Mar 22, 2023
267782d
Revert PSRAM usage as it lead to memory fragmentation.
Mar 22, 2023
c4b990a
fix missing value data
Mar 23, 2023
e2b66aa
Revert PSRAM usage as it lead to memory fragmentation. (#2224)
caco3 Mar 23, 2023
fa09680
Fix missing value data in graph (#2230)
caco3 Mar 23, 2023
9ffaf6e
Update Changelog.md (#2231)
caco3 Mar 23, 2023
db36fe2
Merge branch 'master' into rolling
caco3 Mar 23, 2023
727b871
Update interface_influxdb.cpp (#2233)
caco3 Mar 24, 2023
33bfef0
Merge branch 'rolling' of https://github.com/jomjol/AI-on-the-edge-de…
Mar 25, 2023
de1dcc4
update copyright year
Mar 25, 2023
f79e03f
Cleanup
jomjol Mar 26, 2023
b6bfeea
Set prevalue using MQTT + set prevalue to RAW value (REST+MQTT) (#2252)
Slider0007 Mar 28, 2023
df12dea
removed the stb_image files and re-add them as a submodule. (#2223)
caco3 Mar 30, 2023
0e3a50d
Remove obsolete ClassFlowWriteList (#2264)
Slider0007 Mar 30, 2023
e995d6c
Renaming & cleanup of some modules / functions in source code (#2265)
Slider0007 Mar 30, 2023
e2cf833
Fix last element missing in digit model drop down (#2282)
Slider0007 Apr 1, 2023
63ac38a
Debug influxdb (#2283)
jomjol Apr 2, 2023
e7bfba4
Implement a camera livestream handler (#2286)
Slider0007 Apr 4, 2023
7488d7b
fix leading NaN (#2310)
caco3 Apr 14, 2023
9ca02e0
analogROI: Activate save button after ROI creation (#2326)
Slider0007 Apr 17, 2023
17ffd28
Migration of PlatformIO 5.2.0 to 6.1.0 (resp. ESP IDF from 4.4.2 to 5…
caco3 Apr 19, 2023
19158c9
Keep MainFlowTask alive to handle reboot (#2325)
Slider0007 Apr 19, 2023
de92c29
Shared PSRAM memory (#2285)
caco3 Apr 19, 2023
262d83e
fix PSRAM init return value check
Apr 19, 2023
2a7f3b3
Extend InfluxDBv1 with individual topic names (#2319)
jomjol Apr 20, 2023
eebdd7c
Update Changelog.md (#2344)
caco3 Apr 23, 2023
e40ceb5
merge conflicts
caco3 Apr 23, 2023
929796c
merge conflicts
caco3 Apr 23, 2023
a20fec1
merge conflicts
caco3 Apr 23, 2023
a636ce3
update changelog
caco3 Apr 23, 2023
6defcf8
Update Changelog.md
caco3 Apr 23, 2023
9b1a83c
Fix alignment mark PSRAM issue (#2357)
caco3 Apr 27, 2023
fc719da
Update Changelog.md (#2360)
caco3 Apr 27, 2023
b485fcc
Merge branch 'master' into merge-conflicts
caco3 Apr 27, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 7 additions & 10 deletions Changelog.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
## [15.2.0] - 2023-04-23
## [15.2.1] - 2023-04-27

### Update Procedure
#### Fixed
- [#2357](https://github.com/jomjol/AI-on-the-edge-device/pull/2357) Fix Alignment Mark issue

Update Procedure see [online documentation](https://jomjol.github.io/AI-on-the-edge-device-docs/Installation/#update-ota-over-the-air)

## [15.2.0] - 2023-04-23

### Changes

Expand All @@ -13,8 +15,6 @@ For a full list of changes see [Full list of changes](https://github.com/jomjol/
- [#2286](https://github.com/jomjol/AI-on-the-edge-device/pull/2286) Implement a camera livestream handler
- [#2252](https://github.com/jomjol/AI-on-the-edge-device/pull/2252) Set prevalue using MQTT + set prevalue to RAW value (REST+MQTT)
- [#2319](https://github.com/jomjol/AI-on-the-edge-device/pull/2319) Extend InfluxDBv1 with individual topic names
- [#](https://github.com/jomjol/AI-on-the-edge-device/pull/)
- [#](https://github.com/jomjol/AI-on-the-edge-device/pull/)

#### Changed

Expand All @@ -37,10 +37,6 @@ For a full list of changes see [Full list of changes](https://github.com/jomjol/

## [15.1.1] - 2023-03-23

### Update Procedure

Update Procedure see [online documentation](https://jomjol.github.io/AI-on-the-edge-device-docs/Installation/#update-ota-over-the-air)

### Changes

For a full list of changes see [Full list of changes](https://github.com/jomjol/AI-on-the-edge-device/compare/v15.1.0...v15.1.1)
Expand Down Expand Up @@ -970,7 +966,8 @@ External Illumination
- Initial Version


[15.2.0]: https://github.com/jomjol/AI-on-the-edge-device/compare/v15.1.1...v15.1.2
[15.2.1]: https://github.com/jomjol/AI-on-the-edge-device/compare/v15.2.0...v15.2.1
[15.2.0]: https://github.com/jomjol/AI-on-the-edge-device/compare/v15.1.1...v15.2.0
[15.1.1]: https://github.com/jomjol/AI-on-the-edge-device/compare/v15.1.0...v15.1.1
[15.1.0]: https://github.com/jomjol/AI-on-the-edge-device/compare/v15.0.3...v15.1.0
[15.0.3]: https://github.com/jomjol/AI-on-the-edge-device/compare/v14.0.3...v15.0.3
Expand Down
2 changes: 2 additions & 0 deletions code/components/jomjol_flowcontroll/ClassFlowTakeImage.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,8 @@ bool ClassFlowTakeImage::doFlow(string zwtime)
LogFile.WriteHeapInfo("ClassFlowTakeImage::doFlow - After RemoveOldLogs");
#endif

psram_deinit_shared_memory_for_take_image_step();

return true;
}

Expand Down
34 changes: 23 additions & 11 deletions code/components/jomjol_flowcontroll/MainFlowControl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -657,20 +657,32 @@ esp_err_t handler_editflow(httpd_req_t *req)

string out2 = out.substr(0, out.length() - 4) + "_org.jpg";

CAlignAndCutImage *caic = new CAlignAndCutImage("cutref", in);
caic->CutAndSave(out2, x, y, dx, dy);
delete caic;
if ((*flowctrl.getActStatus() == "Flow finished") && psram_init_shared_memory_for_take_image_step()) {
LogFile.WriteToFile(ESP_LOG_INFO, TAG, "Taking image for Alignment Mark Update...");

CImageBasis *cim = new CImageBasis("cutref", out2);
if (enhance)
{
cim->Contrast(90);
}
CAlignAndCutImage *caic = new CAlignAndCutImage("cutref", in);
caic->CutAndSave(out2, x, y, dx, dy);
delete caic;

CImageBasis *cim = new CImageBasis("cutref", out2);
if (enhance)
{
cim->Contrast(90);
}

cim->SaveToFile(out);
delete cim;

cim->SaveToFile(out);
delete cim;
psram_deinit_shared_memory_for_take_image_step();


zw = "CutImage Done";
}
else {
LogFile.WriteToFile(ESP_LOG_WARN, TAG, "Taking image for Alignment Mark not possible while device is busy with a round!");
zw = "Device Busy";
}

zw = "CutImage Done";
httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*");
httpd_resp_send(req, zw.c_str(), zw.length());

Expand Down
55 changes: 47 additions & 8 deletions code/components/jomjol_helper/psram.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ using namespace std;

void *shared_region = NULL;
uint32_t allocatedBytesForSTBI = 0;
std::string sharedMemoryInUseFor = "";


/** Reserve a large block in the PSRAM which will be shared between the different steps.
Expand All @@ -33,9 +34,24 @@ bool reserve_psram_shared_region(void) {
/*******************************************************************
* Memory used in Take Image (STBI)
*******************************************************************/
void psram_init_shared_memory_for_take_image_step(void) {
LogFile.WriteToFile(ESP_LOG_DEBUG, TAG, "Init shared memory for step 'Take Image' (STBI buffers)");
bool psram_init_shared_memory_for_take_image_step(void) {
if (sharedMemoryInUseFor != "") {
LogFile.WriteToFile(ESP_LOG_ERROR, TAG, "Shared memory in PSRAM already in use for " + sharedMemoryInUseFor + "!");
return false;
}

LogFile.WriteToFile(ESP_LOG_DEBUG, TAG, "Init shared memory for step 'Take Image' (STBI buffers)");
allocatedBytesForSTBI = 0;
sharedMemoryInUseFor = "TakeImage";

return true;
}


void psram_deinit_shared_memory_for_take_image_step(void) {
LogFile.WriteToFile(ESP_LOG_DEBUG, TAG, "Deinit shared memory for step 'Take Image' (STBI buffers)");
allocatedBytesForSTBI = 0;
sharedMemoryInUseFor = "";
}


Expand All @@ -45,7 +61,8 @@ void *psram_reserve_shared_stbi_memory(size_t size) {
if (size >= 100000) {
if ((allocatedBytesForSTBI + size) > TENSOR_ARENA_SIZE + MAX_MODEL_SIZE) { // Check if it still fits in the shared region
LogFile.WriteToFile(ESP_LOG_ERROR, TAG, "Shared memory in PSRAM too small (STBI) to fit additional " +
std::to_string(size) + "bytes! Available: " + std::to_string(TENSOR_ARENA_SIZE + MAX_MODEL_SIZE - allocatedBytesForSTBI) + " bytes!");
std::to_string(size) + " bytes! Available: " + std::to_string(TENSOR_ARENA_SIZE + MAX_MODEL_SIZE - allocatedBytesForSTBI) + " bytes!");

return NULL;
}

Expand Down Expand Up @@ -83,14 +100,21 @@ void psram_free_shared_stbi_memory(void *p) {
* During this step we only use the shared part of the PSRAM
* for the tmpImage.
*******************************************************************/
void *psram_reserve_shared_tmp_image_memory(void) {
void *psram_reserve_shared_tmp_image_memory(void) {
if (sharedMemoryInUseFor != "") {
LogFile.WriteToFile(ESP_LOG_ERROR, TAG, "Shared memory in PSRAM already in use for " + sharedMemoryInUseFor + "!");
return NULL;
}

LogFile.WriteToFile(ESP_LOG_DEBUG, TAG, "Allocating tmpImage (" + std::to_string(IMAGE_SIZE) + " bytes, use shared memory in PSRAM)...");
sharedMemoryInUseFor = "Aligning";
return shared_region; // Use 1th part of the shared memory for the tmpImage (only user)
}


void psram_free_shared_temp_image_memory(void) {
LogFile.WriteToFile(ESP_LOG_DEBUG, TAG, "Shared memory used for tmpImage (PSRAM, part of shared memory) is free again");
sharedMemoryInUseFor = "";
}


Expand All @@ -103,18 +127,33 @@ void psram_free_shared_temp_image_memory(void) {
* Tensor Arena. Therefore we do not need to monitor the usage.
*******************************************************************/
void *psram_get_shared_tensor_arena_memory(void) {
LogFile.WriteToFile(ESP_LOG_DEBUG, TAG, "Allocating Tensor Arena (" + std::to_string(TENSOR_ARENA_SIZE) + " bytes, use shared memory in PSRAM)...");
return shared_region; // Use 1th part of the shared memory for Tensor
if ((sharedMemoryInUseFor == "") || (sharedMemoryInUseFor == "Digitalization_Model")) {
sharedMemoryInUseFor = "Digitalization_Tensor";
LogFile.WriteToFile(ESP_LOG_DEBUG, TAG, "Allocating Tensor Arena (" + std::to_string(TENSOR_ARENA_SIZE) + " bytes, use shared memory in PSRAM)...");
return shared_region; // Use 1th part of the shared memory for Tensor
}
else {
LogFile.WriteToFile(ESP_LOG_ERROR, TAG, "Shared memory in PSRAM already in use for " + sharedMemoryInUseFor + "!");
return NULL;
}
}


void *psram_get_shared_model_memory(void) {
LogFile.WriteToFile(ESP_LOG_DEBUG, TAG, "Allocating Model memory (" + std::to_string(MAX_MODEL_SIZE) + " bytes, use shared memory in PSRAM)...");
return (uint8_t *)shared_region + TENSOR_ARENA_SIZE; // Use 2nd part of the shared memory (after Tensor Arena) for the model
if ((sharedMemoryInUseFor == "") || (sharedMemoryInUseFor == "Digitalization_Tensor")) {
sharedMemoryInUseFor = "Digitalization_Model";
LogFile.WriteToFile(ESP_LOG_DEBUG, TAG, "Allocating Model memory (" + std::to_string(MAX_MODEL_SIZE) + " bytes, use shared memory in PSRAM)...");
return (uint8_t *)shared_region + TENSOR_ARENA_SIZE; // Use 2nd part of the shared memory (after Tensor Arena) for the model
}
else {
LogFile.WriteToFile(ESP_LOG_ERROR, TAG, "Shared memory in PSRAM already in use for " + sharedMemoryInUseFor + "!");
return NULL;
}
}


void psram_free_shared_tensor_arena_and_model_memory(void) {
sharedMemoryInUseFor = "";
LogFile.WriteToFile(ESP_LOG_DEBUG, TAG, "Shared memory used for Tensor Arena and model (PSRAM, part of shared memory) is free again");
}

Expand Down
3 changes: 2 additions & 1 deletion code/components/jomjol_helper/psram.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ bool reserve_psram_shared_region(void);


/* Memory used in Take Image Step */
void psram_init_shared_memory_for_take_image_step(void);
bool psram_init_shared_memory_for_take_image_step(void);
void psram_deinit_shared_memory_for_take_image_step(void);
void *psram_reserve_shared_stbi_memory(size_t size);
void *psram_reallocate_shared_stbi_memory(void *ptr, size_t newsize);
void psram_free_shared_stbi_memory(void *p);
Expand Down
16 changes: 9 additions & 7 deletions sd-card/html/edit_alignment.html
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ <h2>Alignment Marks</h2>
<tr>
<td style="padding-top: 10px">x: <input type="number" name="refx" id="refx" step=1 onchange="valuemanualchanged()"></td>
<td style="padding-top: 10px">dx: <input type="number" name="refdx" id="refdx" step=1 onchange="valuemanualchanged()"></td>
<td rowspan="2" style="padding-top: 10px"><input class="button" type="button" value="Update Reference" onclick="CutOutReference()"></td>
<td rowspan="2" style="padding-top: 10px"><input class="button" type="button" value="Update Reference Image" onclick="CutOutReference()"></td>
</tr>
<tr>
<td>y: <input type="number" name="refy" id="refy" step=1 onchange="valuemanualchanged()"></td>
Expand Down Expand Up @@ -133,7 +133,7 @@ <h2>Alignment Marks</h2>
WriteConfigININew();
UpdateConfigReference(domainname)
SaveConfigToServer(domainname);
firework.launch('Configuration got updated. It will get applied after the next reboot!', 'success', 5000);
firework.launch('Reference Marks got updated. The change will get applied after the next reboot!', 'success', 5000);
}

function EnhanceContrast(){
Expand All @@ -144,8 +144,9 @@ <h2>Alignment Marks</h2>
refInfo[aktindex]["dy"] = document.getElementById("refdy").value;

enhanceCon = true;
MakeContrastImageZW(refInfo[aktindex], enhanceCon, domainname);
UpdateReference();
if (MakeContrastImageZW(refInfo[aktindex], enhanceCon, domainname)) {
UpdateReference();
}
}

function UpdateReference(){
Expand Down Expand Up @@ -250,9 +251,10 @@ <h2>Alignment Marks</h2>
refInfo[aktindex]["y"] = document.getElementById("refy").value;
refInfo[aktindex]["dx"] = document.getElementById("refdx").value;
refInfo[aktindex]["dy"] = document.getElementById("refdy").value;
MakeRefZW(refInfo[aktindex], domainname);
UpdateReference();
document.getElementById("enhancecontrast").disabled = false;
if (MakeRefZW(refInfo[aktindex], domainname)) {
UpdateReference();
document.getElementById("enhancecontrast").disabled = false;
}
}

function drawGrid(){
Expand Down
2 changes: 1 addition & 1 deletion sd-card/html/edit_reference.html
Original file line number Diff line number Diff line change
Expand Up @@ -272,7 +272,7 @@ <h2>Reference Image</h2>
SaveCanvasToImage(canvas, "/config/reference.jpg", true, getDomainname());
showReference(param);
UpdatePage();
firework.launch('Reference got updated. It will get applied after the next reboot!', 'success', 5000);
firework.launch('Reference got saved. It will get applied after the next reboot!', 'success', 5000);
}
}

Expand Down
30 changes: 25 additions & 5 deletions sd-card/html/readconfigcommon.js
Original file line number Diff line number Diff line change
Expand Up @@ -252,11 +252,21 @@ function MakeContrastImageZW(zw, _enhance, _domainname){
var xhttp = new XMLHttpRequest();
try {
xhttp.open("GET", url, false);
xhttp.send(); }
xhttp.send();
}
catch (error)
{
// firework.launch('Deleting Config.ini failed!', 'danger', 30000);
}

if (xhttp.responseText == "CutImage Done") {
firework.launch('Reference Image Contrast got enhanced.', 'success', 5000);
return true;
}
else {
firework.launch("Device is busy, please try again when the round got completed!", 'warning', 10000);
return false;
}
}


Expand All @@ -268,13 +278,23 @@ function MakeRefZW(zw, _domainname){
var xhttp = new XMLHttpRequest();
try {
xhttp.open("GET", url, false);
xhttp.send(); }
xhttp.send();
}
catch (error)
{
// firework.launch('Deleting Config.ini failed!', 'danger', 30000);
}
_filetarget2 = zw["name"].replace("/config/", "/img_tmp/");
// _filetarget2 = _filetarget2.replace(".jpg", "_org.jpg");
FileCopyOnServer(_filetarget, _filetarget2, _domainname);

if (xhttp.responseText == "CutImage Done") {
_filetarget2 = zw["name"].replace("/config/", "/img_tmp/");
// _filetarget2 = _filetarget2.replace(".jpg", "_org.jpg");
FileCopyOnServer(_filetarget, _filetarget2, _domainname);
firework.launch('Reference Image got updated.', 'success', 5000);
return true;
}
else {
firework.launch("Device is busy, please try again when the round got completed!", 'warning', 10000);
return false;
}
}