mirror of
https://github.com/jomjol/AI-on-the-edge-device.git
synced 2025-12-09 04:56:53 +03:00
Compare commits
18 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a91f99faab | ||
|
|
17a87b23a1 | ||
|
|
d4b5ec2ae2 | ||
|
|
1bcaf09855 | ||
|
|
fa3842b2b4 | ||
|
|
ea72256e56 | ||
|
|
be5828cb3e | ||
|
|
104b72505c | ||
|
|
23728a0686 | ||
|
|
eaaa856b13 | ||
|
|
01e81d02b5 | ||
|
|
9ae8d0a512 | ||
|
|
da16322fb8 | ||
|
|
a6d39afc26 | ||
|
|
1b6a124f54 | ||
|
|
8aff6bf8f3 | ||
|
|
21115752aa | ||
|
|
025c2b88b9 |
@@ -11,6 +11,12 @@
|
|||||||
|
|
||||||
____
|
____
|
||||||
|
|
||||||
|
#### #9 Basic auth for the UI
|
||||||
|
|
||||||
|
* https://github.com/jomjol/AI-on-the-edge-device/issues/283
|
||||||
|
|
||||||
|
* Implementation of an authentication mechanism.
|
||||||
|
|
||||||
#### #8 MQTT configurable readout intervall
|
#### #8 MQTT configurable readout intervall
|
||||||
|
|
||||||
Make the readout intervall configurable via MQTT.
|
Make the readout intervall configurable via MQTT.
|
||||||
@@ -27,13 +33,13 @@ To do:
|
|||||||
* Implement a checking algo
|
* Implement a checking algo
|
||||||
* Extend the firmware and html page for the error handling
|
* Extend the firmware and html page for the error handling
|
||||||
|
|
||||||
#### #6 Check for double ROI names
|
#### ~~#6 Check for double ROI names~~ - implemented v8.0.0
|
||||||
|
|
||||||
Check during configuration, that ROI names are unique.
|
~~Check during configuration, that ROI names are unique.~~
|
||||||
|
|
||||||
To do:
|
~~To do:~~
|
||||||
|
|
||||||
* Implementation of ROI name checking in html code before saving analog or digital ROIs
|
* ~~Implementation of ROI name checking in html code before saving analog or digital ROIs~~
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -49,31 +55,31 @@ To do:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
#### #4 Initial Shifting and Rotation
|
#### ~~#4 Initial Shifting and Rotation~~ - implemented v7.0.0
|
||||||
|
|
||||||
* https://github.com/jomjol/AI-on-the-edge-device/issues/123
|
* ~~https://github.com/jomjol/AI-on-the-edge-device/issues/123~~
|
||||||
|
|
||||||
Implementation of a shifting additional to the initial rotation of the raw camera input
|
~~Implementation of a shifting additional to the initial rotation of the raw camera input~~
|
||||||
|
|
||||||
To do:
|
~~To do:~~
|
||||||
|
|
||||||
* Implementation of shifting
|
* ~~Implementation of shifting~~
|
||||||
* Extension of configuration
|
* ~~Extension of configuration~~
|
||||||
* Adaption of the html configuration to implement shifting
|
* ~~Adaption of the html configuration to implement shifting~~
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#### #3 Allow grouping of digits to multiple reading values
|
#### ~~#3 Allow grouping of digits to multiple reading values~~ - implemented v8.0.0
|
||||||
|
|
||||||
* https://github.com/jomjol/AI-on-the-edge-device/issues/123
|
* ~~https://github.com/jomjol/AI-on-the-edge-device/issues/123~~
|
||||||
|
|
||||||
Implementation of two different independent readouts in one setup
|
~~Implementation of two different independent readouts in one setup~~
|
||||||
|
|
||||||
To do:
|
~~To do:~~
|
||||||
|
|
||||||
|
* ~~Extend the configuration, setting and processing flow for two independend readouts~~
|
||||||
|
|
||||||
* Extend the configuration, setting and processing flow for two independend readouts
|
|
||||||
|
|
||||||
https://github.com/jomjol/AI-on-the-edge-device/issues/123
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -96,15 +102,16 @@ To do:
|
|||||||
|
|
||||||
____
|
____
|
||||||
|
|
||||||
#### #1 Optional GPIO for external flash/lighting
|
#### ~~#1 Optional GPIO for external flash/lighting~~ - implemented (v8.0.0)
|
||||||
|
|
||||||
* https://github.com/jomjol/AI-on-the-edge-device/issues/133
|
* ~~https://github.com/jomjol/AI-on-the-edge-device/issues/133~~
|
||||||
|
|
||||||
Implementation of an an extrnal flash / lightning through GPIOs.
|
~~Implementation of an an extrnal flash / lightning through GPIOs.~~
|
||||||
* available GPIOs: 12 & 13 (currently in use for html switching)
|
|
||||||
|
|
||||||
To do:
|
* ~~available GPIOs: 12 & 13 (currently in use for html switching)~~
|
||||||
|
|
||||||
* Implementation of a software module for external light source (e.g. WS8132 LED controller, ...)
|
~~To do:~~
|
||||||
* Update of the camera module to use the external light instead of the internal flash light
|
|
||||||
* Adopt the configuration algorithm with a configurable light source
|
* ~~Implementation of a software module for external light source (e.g. WS8132 LED controller, ...)~~
|
||||||
|
* ~~Update of the camera module to use the external light instead of the internal flash light~~
|
||||||
|
* ~~Adopt the configuration algorithm with a configurable light source~~
|
||||||
@@ -47,8 +47,13 @@ In other cases you can contact the developer via email: <img src="https://raw.gi
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
##### 8.0.0 - Multi Meter Support (2021-07-14)
|
##### 8.0.5 - Multi Meter Support (2021-07-29)
|
||||||
|
|
||||||
|
* NEW 8.0.5: bug fix: saving prevalue
|
||||||
|
* NEW 8.0.4: bug fix: load config.ini after upgrade
|
||||||
|
* NEW 8.0.3: bug fix: reboot during `config.ini` handling, html error
|
||||||
|
* NEW 8.0.2: saving roundes prevalue, bug fix html server
|
||||||
|
* NEW 8.0.1: bug fix: html handling of parameter `FixedExposure` and `ImageSize`
|
||||||
* Dual / multi meter support (more than 1 number to be recognized)
|
* Dual / multi meter support (more than 1 number to be recognized)
|
||||||
This is implemented with the feature "number" on the ROI definition as well as selected options
|
This is implemented with the feature "number" on the ROI definition as well as selected options
|
||||||
* MQTT: standardization of the naming - including new topics (`json`, `freeMem `, `uptime`)c
|
* MQTT: standardization of the naming - including new topics (`json`, `freeMem `, `uptime`)c
|
||||||
|
|||||||
@@ -39,18 +39,27 @@ bool ConfigFile::GetNextParagraph(std::string& aktparamgraph, bool &disabled, bo
|
|||||||
bool ConfigFile::getNextLine(std::string *rt, bool &disabled, bool &eof)
|
bool ConfigFile::getNextLine(std::string *rt, bool &disabled, bool &eof)
|
||||||
{
|
{
|
||||||
eof = false;
|
eof = false;
|
||||||
char zw[1024];
|
char zw[1024] = "";
|
||||||
if (pFile == NULL)
|
if (pFile == NULL)
|
||||||
{
|
{
|
||||||
*rt = "";
|
*rt = "";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
fgets(zw, 1024, pFile);
|
|
||||||
printf("%s", zw);
|
if (fgets(zw, 1024, pFile))
|
||||||
if ((strlen(zw) == 0) && feof(pFile))
|
{
|
||||||
|
printf("%s", zw);
|
||||||
|
if ((strlen(zw) == 0) && feof(pFile))
|
||||||
|
{
|
||||||
|
*rt = "";
|
||||||
|
eof = true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
*rt = "";
|
*rt = "";
|
||||||
eof = true;
|
eof = true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
*rt = zw;
|
*rt = zw;
|
||||||
|
|||||||
@@ -216,6 +216,7 @@ void GpioHandler::init()
|
|||||||
clear();
|
clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ESP_LOGI(TAG_SERVERGPIO, "read GPIO config and init GPIO");
|
ESP_LOGI(TAG_SERVERGPIO, "read GPIO config and init GPIO");
|
||||||
if (!readConfig()) {
|
if (!readConfig()) {
|
||||||
clear();
|
clear();
|
||||||
@@ -225,6 +226,7 @@ void GpioHandler::init()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
for(std::map<gpio_num_t, GpioPin*>::iterator it = gpioMap->begin(); it != gpioMap->end(); ++it) {
|
for(std::map<gpio_num_t, GpioPin*>::iterator it = gpioMap->begin(); it != gpioMap->end(); ++it) {
|
||||||
it->second->init();
|
it->second->init();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -486,10 +486,10 @@ static esp_err_t upload_post_handler(httpd_req_t *req)
|
|||||||
int start_fn = strlen(((struct file_server_data *)req->user_ctx)->base_path);
|
int start_fn = strlen(((struct file_server_data *)req->user_ctx)->base_path);
|
||||||
printf("Directory: %s, start_fn: %d, found: %d\n", directory.c_str(), start_fn, found);
|
printf("Directory: %s, start_fn: %d, found: %d\n", directory.c_str(), start_fn, found);
|
||||||
directory = directory.substr(start_fn, found - start_fn + 1);
|
directory = directory.substr(start_fn, found - start_fn + 1);
|
||||||
printf("Directory danach: %s\n", directory.c_str());
|
printf("Directory danach 1: %s\n", directory.c_str());
|
||||||
|
|
||||||
directory = "/fileserver" + directory;
|
directory = "/fileserver" + directory;
|
||||||
printf("Directory danach: %s\n", directory.c_str());
|
printf("Directory danach 2: %s\n", directory.c_str());
|
||||||
|
|
||||||
/* Redirect onto root to see the updated file list */
|
/* Redirect onto root to see the updated file list */
|
||||||
httpd_resp_set_status(req, "303 See Other");
|
httpd_resp_set_status(req, "303 See Other");
|
||||||
@@ -500,11 +500,13 @@ static esp_err_t upload_post_handler(httpd_req_t *req)
|
|||||||
httpd_resp_set_hdr(req, "Location", directory.c_str());
|
httpd_resp_set_hdr(req, "Location", directory.c_str());
|
||||||
httpd_resp_sendstr(req, "File uploaded successfully");
|
httpd_resp_sendstr(req, "File uploaded successfully");
|
||||||
|
|
||||||
|
/*
|
||||||
if (strcmp(filepath, CONFIG_FILE) == 0) {
|
if (strcmp(filepath, CONFIG_FILE) == 0) {
|
||||||
printf("New config foung. Reload handler.");
|
printf("New config found. Reload handler.");
|
||||||
gpio_handler_deinit();
|
gpio_handler_deinit();
|
||||||
MQTTdestroy();
|
MQTTdestroy();
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
@@ -606,10 +608,10 @@ static esp_err_t delete_post_handler(httpd_req_t *req)
|
|||||||
int start_fn = strlen(((struct file_server_data *)req->user_ctx)->base_path);
|
int start_fn = strlen(((struct file_server_data *)req->user_ctx)->base_path);
|
||||||
printf("Directory: %s, start_fn: %d, found: %d\n", directory.c_str(), start_fn, found);
|
printf("Directory: %s, start_fn: %d, found: %d\n", directory.c_str(), start_fn, found);
|
||||||
directory = directory.substr(start_fn, found - start_fn + 1);
|
directory = directory.substr(start_fn, found - start_fn + 1);
|
||||||
printf("Directory danach: %s\n", directory.c_str());
|
printf("Directory danach 3: %s\n", directory.c_str());
|
||||||
|
|
||||||
directory = "/fileserver" + directory;
|
directory = "/fileserver" + directory;
|
||||||
printf("Directory danach: %s\n", directory.c_str());
|
printf("Directory danach 4: %s\n", directory.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -107,6 +107,8 @@ esp_err_t set_content_type_from_file(httpd_req_t *req, const char *filename)
|
|||||||
return httpd_resp_set_type(req, "text/html");
|
return httpd_resp_set_type(req, "text/html");
|
||||||
} else if (IS_FILE_EXT(filename, ".jpeg")) {
|
} else if (IS_FILE_EXT(filename, ".jpeg")) {
|
||||||
return httpd_resp_set_type(req, "image/jpeg");
|
return httpd_resp_set_type(req, "image/jpeg");
|
||||||
|
} else if (IS_FILE_EXT(filename, ".jpg")) {
|
||||||
|
return httpd_resp_set_type(req, "image/jpeg");
|
||||||
} else if (IS_FILE_EXT(filename, ".ico")) {
|
} else if (IS_FILE_EXT(filename, ".ico")) {
|
||||||
return httpd_resp_set_type(req, "image/x-icon");
|
return httpd_resp_set_type(req, "image/x-icon");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -130,11 +130,9 @@ bool ClassFlow::getNextLine(FILE* pfile, string *rt)
|
|||||||
*rt = trim(*rt);
|
*rt = trim(*rt);
|
||||||
while ((zw[0] == ';' || zw[0] == '#' || (rt->size() == 0)) && !(zw[1] == '[')) // Kommentarzeilen (; oder #) und Leerzeilen überspringen, es sei denn es ist ein neuer auskommentierter Paragraph
|
while ((zw[0] == ';' || zw[0] == '#' || (rt->size() == 0)) && !(zw[1] == '[')) // Kommentarzeilen (; oder #) und Leerzeilen überspringen, es sei denn es ist ein neuer auskommentierter Paragraph
|
||||||
{
|
{
|
||||||
|
*rt = "";
|
||||||
if (!fgets(zw, 1024, pfile))
|
if (!fgets(zw, 1024, pfile))
|
||||||
{
|
|
||||||
*rt = "";
|
|
||||||
return false;
|
return false;
|
||||||
}
|
|
||||||
printf("%s", zw);
|
printf("%s", zw);
|
||||||
*rt = zw;
|
*rt = zw;
|
||||||
*rt = trim(*rt);
|
*rt = trim(*rt);
|
||||||
|
|||||||
@@ -173,9 +173,12 @@ void ClassFlowControll::InitFlow(std::string config)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
fgets(zw, 1024, pFile);
|
line = "";
|
||||||
printf("%s", zw);
|
if (fgets(zw, 1024, pFile) && !feof(pFile))
|
||||||
line = std::string(zw);
|
{
|
||||||
|
printf("Read: %s", zw);
|
||||||
|
line = std::string(zw);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -328,7 +331,7 @@ string ClassFlowControll::GetPrevalue(std::string _number)
|
|||||||
return std::string();
|
return std::string();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string ClassFlowControll::UpdatePrevalue(std::string _newvalue, std::string _numbers)
|
std::string ClassFlowControll::UpdatePrevalue(std::string _newvalue, std::string _numbers, bool _extern)
|
||||||
{
|
{
|
||||||
float zw;
|
float zw;
|
||||||
char* p;
|
char* p;
|
||||||
@@ -350,7 +353,7 @@ std::string ClassFlowControll::UpdatePrevalue(std::string _newvalue, std::string
|
|||||||
|
|
||||||
if (flowpostprocessing)
|
if (flowpostprocessing)
|
||||||
{
|
{
|
||||||
flowpostprocessing->SetPreValue(zw, _numbers);
|
flowpostprocessing->SetPreValue(zw, _numbers, _extern);
|
||||||
return _newvalue;
|
return _newvalue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ public:
|
|||||||
bool getStatusSetupModus(){return SetupModeActive;};
|
bool getStatusSetupModus(){return SetupModeActive;};
|
||||||
string getReadout(bool _rawvalue, bool _noerror);
|
string getReadout(bool _rawvalue, bool _noerror);
|
||||||
string getReadoutAll(int _type);
|
string getReadoutAll(int _type);
|
||||||
string UpdatePrevalue(std::string _newvalue, std::string _numbers);
|
string UpdatePrevalue(std::string _newvalue, std::string _numbers, bool _extern);
|
||||||
string GetPrevalue(std::string _number = "");
|
string GetPrevalue(std::string _number = "");
|
||||||
bool ReadParameter(FILE* pfile, string& aktparamgraph);
|
bool ReadParameter(FILE* pfile, string& aktparamgraph);
|
||||||
|
|
||||||
|
|||||||
@@ -152,7 +152,7 @@ bool ClassFlowMQTT::doFlow(string zwtime)
|
|||||||
|
|
||||||
for (int i = 0; i < NUMBERS.size(); ++i)
|
for (int i = 0; i < NUMBERS.size(); ++i)
|
||||||
{
|
{
|
||||||
result = NUMBERS[i]->ReturnValueNoError;
|
result = NUMBERS[i]->ReturnValue;
|
||||||
resulterror = NUMBERS[i]->ErrorMessageText;
|
resulterror = NUMBERS[i]->ErrorMessageText;
|
||||||
resultrate = std::to_string(NUMBERS[i]->FlowRateAct);
|
resultrate = std::to_string(NUMBERS[i]->FlowRateAct);
|
||||||
resulttimestamp = NUMBERS[i]->timeStamp;
|
resulttimestamp = NUMBERS[i]->timeStamp;
|
||||||
|
|||||||
@@ -37,12 +37,22 @@ string ClassFlowPostProcessing::GetPreValue(std::string _number)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClassFlowPostProcessing::SetPreValue(float zw, string _numbers)
|
void ClassFlowPostProcessing::SetPreValue(float zw, string _numbers, bool _extern)
|
||||||
{
|
{
|
||||||
|
printf("SetPrevalue: %f, %s\n", zw, _numbers.c_str());
|
||||||
for (int j = 0; j < NUMBERS.size(); ++j)
|
for (int j = 0; j < NUMBERS.size(); ++j)
|
||||||
{
|
{
|
||||||
|
// printf("Number %d, %s\n", j, NUMBERS[j]->name.c_str());
|
||||||
if (NUMBERS[j]->name == _numbers)
|
if (NUMBERS[j]->name == _numbers)
|
||||||
|
{
|
||||||
NUMBERS[j]->PreValue = zw;
|
NUMBERS[j]->PreValue = zw;
|
||||||
|
if (_extern)
|
||||||
|
{
|
||||||
|
time(&(NUMBERS[j]->lastvalue));
|
||||||
|
localtime(&(NUMBERS[j]->lastvalue));
|
||||||
|
}
|
||||||
|
// printf("Found %d! - set to %f\n", j, NUMBERS[j]->PreValue);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
UpdatePreValueINI = true;
|
UpdatePreValueINI = true;
|
||||||
SavePreValue();
|
SavePreValue();
|
||||||
@@ -207,8 +217,9 @@ void ClassFlowPostProcessing::SavePreValue()
|
|||||||
struct tm* timeinfo = localtime(&NUMBERS[j]->lastvalue);
|
struct tm* timeinfo = localtime(&NUMBERS[j]->lastvalue);
|
||||||
strftime(buffer, 80, PREVALUE_TIME_FORMAT_OUTPUT, timeinfo);
|
strftime(buffer, 80, PREVALUE_TIME_FORMAT_OUTPUT, timeinfo);
|
||||||
NUMBERS[j]->timeStamp = std::string(buffer);
|
NUMBERS[j]->timeStamp = std::string(buffer);
|
||||||
|
// printf("SaverPreValue %d, Value: %f, Nachkomma %d\n", j, NUMBERS[j]->PreValue, NUMBERS[j]->Nachkomma);
|
||||||
|
|
||||||
_zw = NUMBERS[j]->name + "\t" + NUMBERS[j]->timeStamp + "\t" + to_string(NUMBERS[j]->PreValue) + "\n";
|
_zw = NUMBERS[j]->name + "\t" + NUMBERS[j]->timeStamp + "\t" + RundeOutput(NUMBERS[j]->PreValue, NUMBERS[j]->Nachkomma) + "\n";
|
||||||
printf("Write PreValue Zeile: %s\n", _zw.c_str());
|
printf("Write PreValue Zeile: %s\n", _zw.c_str());
|
||||||
|
|
||||||
fputs(_zw.c_str(), pFile);
|
fputs(_zw.c_str(), pFile);
|
||||||
@@ -594,7 +605,7 @@ bool ClassFlowPostProcessing::doFlow(string zwtime)
|
|||||||
|
|
||||||
if ((!NUMBERS[j]->AllowNegativeRates) && (NUMBERS[j]->Value < NUMBERS[j]->PreValue))
|
if ((!NUMBERS[j]->AllowNegativeRates) && (NUMBERS[j]->Value < NUMBERS[j]->PreValue))
|
||||||
{
|
{
|
||||||
NUMBERS[j]->ErrorMessageText = NUMBERS[j]->ErrorMessageText + "Neg. Rate - Read: " + zwvalue + " - Raw: " + NUMBERS[j]->ReturnRawValue + " - Pre: " + std::to_string(NUMBERS[j]->Value) + " ";
|
NUMBERS[j]->ErrorMessageText = NUMBERS[j]->ErrorMessageText + "Neg. Rate - Read: " + zwvalue + " - Raw: " + NUMBERS[j]->ReturnRawValue + " - Pre: " + RundeOutput(NUMBERS[j]->PreValue, NUMBERS[j]->Nachkomma) + " ";
|
||||||
NUMBERS[j]->Value = NUMBERS[j]->PreValue;
|
NUMBERS[j]->Value = NUMBERS[j]->PreValue;
|
||||||
zwvalue = RundeOutput(NUMBERS[j]->Value, NUMBERS[j]->AnzahlAnalog - NUMBERS[j]->DecimalShift);
|
zwvalue = RundeOutput(NUMBERS[j]->Value, NUMBERS[j]->AnzahlAnalog - NUMBERS[j]->DecimalShift);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ public:
|
|||||||
string getReadoutTimeStamp(int _number = 0);
|
string getReadoutTimeStamp(int _number = 0);
|
||||||
void SavePreValue();
|
void SavePreValue();
|
||||||
string GetPreValue(std::string _number = "");
|
string GetPreValue(std::string _number = "");
|
||||||
void SetPreValue(float zw, string _numbers);
|
void SetPreValue(float zw, string _numbers, bool _extern = false);
|
||||||
std::vector<NumberPost*> GetNumbers(){return NUMBERS;};
|
std::vector<NumberPost*> GetNumbers(){return NUMBERS;};
|
||||||
|
|
||||||
string name(){return "ClassFlowPostProcessing";};
|
string name(){return "ClassFlowPostProcessing";};
|
||||||
|
|||||||
@@ -569,7 +569,7 @@ esp_err_t handler_prevalue(httpd_req_t *req)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
zw = "SetPrevalue to " + tfliteflow.UpdatePrevalue(_size, _numbers);
|
zw = "SetPrevalue to " + tfliteflow.UpdatePrevalue(_size, _numbers, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
resp_str = zw.c_str();
|
resp_str = zw.c_str();
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
const char* GIT_REV="03b5e36";
|
const char* GIT_REV="17a87b2";
|
||||||
const char* GIT_TAG="";
|
const char* GIT_TAG="";
|
||||||
const char* GIT_BRANCH="master";
|
const char* GIT_BRANCH="master";
|
||||||
const char* BUILD_TIME="2021-07-14 19:54";
|
const char* BUILD_TIME="2021-08-01 21:47";
|
||||||
@@ -13,7 +13,7 @@ extern "C"
|
|||||||
#include "Helper.h"
|
#include "Helper.h"
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
|
|
||||||
const char* GIT_BASE_BRANCH = "master - v8.0.0 - 2021-07-14";
|
const char* GIT_BASE_BRANCH = "master - v8.0.5 - 2021-08-01";
|
||||||
|
|
||||||
|
|
||||||
const char* git_base_branch(void)
|
const char* git_base_branch(void)
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
const char* GIT_REV="03b5e36";
|
const char* GIT_REV="17a87b2";
|
||||||
const char* GIT_TAG="";
|
const char* GIT_TAG="";
|
||||||
const char* GIT_BRANCH="master";
|
const char* GIT_BRANCH="master";
|
||||||
const char* BUILD_TIME="2021-07-14 19:53";
|
const char* BUILD_TIME="2021-08-01 21:47";
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
sd-card/config/dig1110s1q.tflite
Normal file
BIN
sd-card/config/dig1110s1q.tflite
Normal file
Binary file not shown.
@@ -367,9 +367,6 @@ textarea {
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
|
|
||||||
ExtendedResolution
|
|
||||||
|
|
||||||
<tr class="expert" id="ex10">
|
<tr class="expert" id="ex10">
|
||||||
<td width="20px" style="padding-left: 40px;"> </td>
|
<td width="20px" style="padding-left: 40px;"> </td>
|
||||||
<td> <class id="Analog_ModelInputSize_text" style="color:black;">ModelInputSize</class> </td>
|
<td> <class id="Analog_ModelInputSize_text" style="color:black;">ModelInputSize</class> </td>
|
||||||
@@ -1659,12 +1656,12 @@ function UpdateInput() {
|
|||||||
WriteParameter(param, category, "MakeImage", "Brightness", false);
|
WriteParameter(param, category, "MakeImage", "Brightness", false);
|
||||||
// WriteParameter(param, category, "MakeImage", "Contrast", false);
|
// WriteParameter(param, category, "MakeImage", "Contrast", false);
|
||||||
// WriteParameter(param, category, "MakeImage", "Saturation", false);
|
// WriteParameter(param, category, "MakeImage", "Saturation", false);
|
||||||
WriteParameter(param, category, "MakeImage", "ImageSize", false, true);
|
WriteParameter(param, category, "MakeImage", "ImageSize", false);
|
||||||
WriteParameter(param, category, "MakeImage", "FixedExposure", false, true);
|
WriteParameter(param, category, "MakeImage", "FixedExposure", false);
|
||||||
|
|
||||||
WriteParameter(param, category, "Alignment", "SearchFieldX", false);
|
WriteParameter(param, category, "Alignment", "SearchFieldX", false);
|
||||||
WriteParameter(param, category, "Alignment", "SearchFieldY", false);
|
WriteParameter(param, category, "Alignment", "SearchFieldY", false);
|
||||||
WriteParameter(param, category, "Alignment", "AlignmentAlgo", true, true);
|
WriteParameter(param, category, "Alignment", "AlignmentAlgo", true);
|
||||||
|
|
||||||
WriteParameter(param, category, "Digits", "Model", false);
|
WriteParameter(param, category, "Digits", "Model", false);
|
||||||
WriteParameter(param, category, "Digits", "LogImageLocation", true);
|
WriteParameter(param, category, "Digits", "LogImageLocation", true);
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
9.5.0
|
9.5.2
|
||||||
Reference in New Issue
Block a user