Compare commits

..

24 Commits

Author SHA1 Message Date
jomjol
9862ae8e7a Update to v6.5.0 2021-03-25 20:58:44 +01:00
jomjol
7bc4e63209 Merge pull request #165 from jomjol/rolling
Update to v6.5.0
2021-03-25 20:51:30 +01:00
jomjol
ad40150cfa Update 2021-03-25 20:50:10 +01:00
jomjol
970530d99f Update Rolling to v6.5.0 2021-03-25 20:48:19 +01:00
jomjol
c6ae989b82 Update Restart Hostname 2021-03-21 20:56:30 +01:00
jomjol
a0ebf354b1 Create focus_adjustment.jpg 2021-03-21 19:52:23 +01:00
jomjol
97ecbc792e Create focus_adjustment.jpg 2021-03-21 19:50:01 +01:00
jomjol
5934a59489 Update 2021-03-21 19:41:34 +01:00
jomjol
ee18046581 Rolling 20210321 2021-03-21 19:24:20 +01:00
jomjol
1e4e38c02f Merge pull request #158 from jomjol/master
Update rolling to v6.4.0
2021-03-21 12:56:08 +01:00
jomjol
7a3038eceb Update FeatureRequest.md 2021-03-21 12:49:23 +01:00
jomjol
7d2f86b72e Update README.md 2021-03-21 12:45:52 +01:00
jomjol
3aaa319505 Update README.md 2021-03-21 12:45:03 +01:00
jomjol
f4075f0a51 Create FeatureRequest.md 2021-03-21 12:39:28 +01:00
jomjol
59643a8d52 Update README.md 2021-03-21 11:44:46 +01:00
jomjol
baf2a880e4 Merge pull request #157 from jomjol/master
Align Rolling to v6.4.0
2021-03-20 09:49:22 +01:00
jomjol
d71e8320c7 Update to v6.4.0 2021-03-20 09:47:50 +01:00
jomjol
3b3d924f40 final update 2021-03-16 21:14:09 +01:00
jomjol
60701bc007 Merge branch 'rolling' into master 2021-03-16 21:10:07 +01:00
jomjol
5ca3e184e0 Prepare v6.3.1 2021-03-16 21:02:27 +01:00
jomjol
2903d1a0a6 Update 2021-03-14 12:59:14 +01:00
jomjol
5f0f1802a4 Merge pull request #150 from jomjol/rolling
Rolling
2021-03-14 12:55:44 +01:00
jomjol
5be56d9b00 Prepare for 6.3.0 2021-03-14 12:52:23 +01:00
jomjol
d3fd1b5045 Rollling 20210313 2021-03-13 17:48:12 +01:00
29 changed files with 434 additions and 271 deletions

View File

@@ -1,6 +1,130 @@
# Versions
##### 5.0.0 Setup Modus - (2020-12-06)
* Implementation of initial setup modus for fresh installation
* Code restructuring (full compatibility between pure ESP-IDF and Platformio w/ espressif)
##### 4.1.1 Configuration editor - (2020-12-02)
* Bug fixing: internal improvement of file handling (reduce not responding)
##### 4.1.0 Configuration editor - (2020-11-30)
* Implementation of configuration editor (including basic and expert mode)
* Adjustable time zone to adjust to local time setting (incl. daylight saving time)
* MQTT: additional topic for error reporting
* standardized access to current logfile via `http://IP-ADRESS/logfileact`
* Update digital CNN to v7.2.0, analog CNN to 6.3.0
* Bug fixing: truncation error, CheckDigitConsistency & PreValue implementation
##### 4.0.0 Tflite Core - (2020-11-15)
* Implementation of rolling log-files
* Update Tflite-Core to master@20201108 (v2.4)
* Bug-fixing for reducing reboots
##### 3.1.0 MQTT-Client - (2020-10-26)
* Update digital CNN to v6.5.0 and HTML (Info to hostname, IP, ssid)
* New implementation of "checkDigitConsistency" also for digits
* MQTT-Adapter: user and password for sign in MQTT-Broker
##### 3.0.0 MQTT-Client (2020-10-14)
* Implementation of MQTT Client
* Improved Version Control
* bug-fixing
##### 2.2.1 Version Control (2020-09-27)
* Bug-Fixing (hostname in wlan.ini and error handling inside flow)
##### 2.2.0 Version Control (2020-09-27)
* Integrated automated versioning system (menu: SYSTEM --> INFO)
* Update Build-System to PlatformIO - Espressif 32 v2.0.0 (ESP-IDF 4.1)
##### 2.1.0 Decimal Shift, Chrome & Edge (2020-09-25)
* Implementation of Decimal Shift
* Update default CNN for digits to v6.4.0
* Improvement HTML
* Support for Chrome and Edge
* Reduce logging to minimum - extended logging on demand
* Implementation of hostname in wlan.ini (`hostname = "HOSTNAME")`
* Bug fixing, code corrections
##### 2.0.0 Layout update (2020-09-12)
* Update to **new and modern layout**
* Support for Chrome improved
* Improved robustness: improved error handling in auto flow reduces spontaneous reboots
* File server: Option for "DELETE ALL"
* WLan: support of spaces in SSID and password
* Reference Image: Option for mirror image, option for image update on the fly
* additional parameter in `wasserzaehler.html?noerror=true` to suppress an potential error message
* bug fixing
##### 1.1.3 (2020-09-09)
* **Bug in configuration of analog ROIs corrected** - correction in v.1.0.2 did not work properly
* Improved update page for the web server (`/html` can be updated via a zip-file, which is provided in `/firmware/html.zip`)
* Improved Chrome support
##### 1.1.0 (2020-09-06)
* Implementation of "delete complete directory"
**Attention: beside the `firmware.bin`, also the content of `/html` needs to be updated!**
##### 1.0.2 (2020-09-06)
* Bug in configuration of analog ROIs corrected
* minor bug correction
##### 1.0.1 (2020-09-05)
* preValue.ini Bug corrected
* minor bug correction
##### 1.0.0 (2020-09-04)
* **First usable version** - compatible to previous project (https://github.com/jomjol/water-meter-system-complete)
* NEW:
* no docker container for CNN calculation necessary
* web based configuration editor on board
##### 0.1.0 (2020-08-07)
* Initial Version

61
FeatureRequest.md Normal file
View File

@@ -0,0 +1,61 @@
## Feature Requests
**There are a lot of ideas for further improvements, but only limited capacity on side of the developer. **Therefore I have created this page as a collection of ideas.
1. Who ever has a new idea can put it here, so it that it is not forgotten.
2. Who ever has time, capacity and passion to support, can take any of the ideas and implement them.
I will support and help where ever I can!
____
#### #3 Allow grouping of digits to multiple reading values
* https://github.com/jomjol/AI-on-the-edge-device/issues/123
Implementation of two different independent readouts in one setup
To do:
* Extend the configuration, setting and processing flow for two independend readouts
####
https://github.com/jomjol/AI-on-the-edge-device/issues/123
____
#### #2 MQTT-controll with callback
* https://github.com/jomjol/AI-on-the-edge-device/issues/105
Extend the MQTT client to also enable callbacks for configuration setting
To do:
* implement callback for receiving information and override `config.ini` settings
* change configuration management to handle online updates (currently changes need a restart)
* think about the startup, as there the default config is loaded
____
#### #1 Optional GPIO for external flash/lighting
* https://github.com/jomjol/AI-on-the-edge-device/issues/133
Implementation of an an extrnal flash / lightning through GPIOs.
* available GPIOs: 12 & 13 (currently in use for html switching)
To do:
* 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

157
README.md
View File

@@ -41,6 +41,23 @@ If you would like to support the developer with a cup of coffee you can do that
##### 6.5.0 Image Processing in Memory - (2021-03-25)
* Upgrade digital CNN to v8.2.0 (added new type of digits)
* Supporting alignment structures in ROI definition
* Bug fixing: definition of hostname in `config.ini`
##### 6.4.0 Image Processing in Memory - (2021-03-20)
* Additional alignment marks for settings the ROIs (analog and digit)
* Upgrade analog CNN to v7.0.0 (added new type of pointer)
##### 6.3.1 Image Processing in Memory - (2021-03-16)
* NEW: 6.3.1: bug fixing in initial edit reference image and `config.ini` (Spelling error in `InitialRotate`)
* Initial setup mode: bug fixing, error correction
* Bug-fixing
##### 6.2.2 Image Processing in Memory - (2021-03-10)
* NEW 6.2.2: bug fixing
@@ -70,151 +87,43 @@ If you would like to support the developer with a cup of coffee you can do that
* **Major change**: image processing fully in memory - no need of SD card buffer anymore
* Need to limit camera resolution to VGA (due to memory limits)
* MQTT: Last Will Testament (LWT) implemented: "connection lost" in case of connection lost to `TopicError`
* Disabled `CheckDigitIncreaseConsistency` in default configuration - must now be explicit enabled if needed
* Update digital CNN to v7.2.1 (additional digital images trained)
* Setting of arbitrary time server in `config.ini`
* Option for fixed IP-, DNS-Settings in `wlan.ini`
* Increased stability (internal image and camera handling)
* Bug fixing: edit digits, handling PreValue, html-bugs
## Additional ideas
There are some ideas and feature request, which are not followed currently - mainly due to capacity reasons on side of the developer. They are collected here: [FeatureRequest.md](FeatureRequest.md)
------
## History
##### 5.0.0 Setup Modus - (2020-12-06)
* Implementation of initial setup modus for fresh installation
* Code restructuring (full compatibility between pure ESP-IDF and Platformio w/ espressif)
##### 4.1.1 Configuration editor - (2020-12-02)
* Bug fixing: internal improvement of file handling (reduce not responding)
##### 4.1.0 Configuration editor - (2020-11-30)
* Implementation of configuration editor (including basic and expert mode)
* Adjustable time zone to adjust to local time setting (incl. daylight saving time)
* MQTT: additional topic for error reporting
* standardized access to current logfile via `http://IP-ADRESS/logfileact`
* Update digital CNN to v7.2.0, analog CNN to 6.3.0
* Bug fixing: truncation error, CheckDigitConsistency & PreValue implementation
##### 4.0.0 Tflite Core - (2020-11-15)
* Implementation of rolling log-files
* Update Tflite-Core to master@20201108 (v2.4)
* Bug-fixing for reducing reboots
##### 3.1.0 MQTT-Client - (2020-10-26)
* Update digital CNN to v6.5.0 and HTML (Info to hostname, IP, ssid)
* New implementation of "checkDigitConsistency" also for digits
* MQTT-Adapter: user and password for sign in MQTT-Broker
##### 3.0.0 MQTT-Client (2020-10-14)
* Implementation of MQTT Client
* Improved Version Control
* bug-fixing
##### 2.2.1 Version Control - (2020-09-27)
##### 2.2.1 Version Control (2020-09-27)
* Bug-Fixing (hostname in wlan.ini and error handling inside flow)
##### 2.1.0 Decimal Shift, Chrome & Edge - (2020-09-25)
##### 2.2.0 Version Control (2020-09-27)
##### 2.0.0 Layout update - (2020-09-12)
* Integrated automated versioning system (menu: SYSTEM --> INFO)
* Update Build-System to PlatformIO - Espressif 32 v2.0.0 (ESP-IDF 4.1)
##### 2.1.0 Decimal Shift, Chrome & Edge (2020-09-25)
* Implementation of Decimal Shift
* Update default CNN for digits to v6.4.0
* Improvement HTML
* Support for Chrome and Edge
* Reduce logging to minimum - extended logging on demand
* Implementation of hostname in wlan.ini (`hostname = "HOSTNAME")`
* Bug fixing, code corrections
##### 2.0.0 Layout update (2020-09-12)
* Update to **new and modern layout**
* Support for Chrome improved
* Improved robustness: improved error handling in auto flow reduces spontaneous reboots
* File server: Option for "DELETE ALL"
* WLan: support of spaces in SSID and password
* Reference Image: Option for mirror image, option for image update on the fly
* additional parameter in `wasserzaehler.html?noerror=true` to suppress an potential error message
* bug fixing
##### 1.1.3 (2020-09-09)
* **Bug in configuration of analog ROIs corrected** - correction in v.1.0.2 did not work properly
* Improved update page for the web server (`/html` can be updated via a zip-file, which is provided in `/firmware/html.zip`)
* Improved Chrome support
##### 1.1.0 (2020-09-06)
* Implementation of "delete complete directory"
**Attention: beside the `firmware.bin`, also the content of `/html` needs to be updated!**
##### 1.0.2 (2020-09-06)
* Bug in configuration of analog ROIs corrected
* minor bug correction
##### 1.0.1 (2020-09-05)
* preValue.ini Bug corrected
* minor bug correction
##### 1.0.0 (2020-09-04)
* **First usable version** - compatible to previous project (https://github.com/jomjol/water-meter-system-complete)
* NEW:
* no docker container for CNN calculation necessary
* web based configuration editor on board
##### 0.1.0 (2020-08-07)
* Initial Version
##### 1.1.3 Initial Version - (2020-09-09)
#### [Full Changelog](Changelog.md)

View File

@@ -292,11 +292,14 @@ bool ChangeHostName(std::string fn, std::string _newhostname)
for (int i = 0; i < neuesfile.size(); ++i)
{
printf(neuesfile[i].c_str());
fputs(neuesfile[i].c_str(), pFile);
}
fclose(pFile);
printf("*** Update hostname done ***\n");
return true;
}

View File

@@ -9,4 +9,5 @@ static const char *TAGPARTOTA = "server_ota";
void register_server_ota_sdcard_uri(httpd_handle_t server);
void CheckOTAUpdate();
void doReboot();
void hard_restart();

View File

@@ -382,6 +382,9 @@ bool ClassFlowControll::ReadParameter(FILE* pfile, string& aktparamgraph)
{
// reboot notwendig damit die neue wlan.ini auch benutzt wird !!!
fclose(pfile);
printf("do reboot\n");
esp_restart();
hard_restart();
doReboot();
}
}

View File

@@ -1,4 +1,4 @@
const char* GIT_REV="5cc873a";
const char* GIT_REV="7bc4e63";
const char* GIT_TAG="";
const char* GIT_BRANCH="rolling";
const char* BUILD_TIME="2021-03-10 21:09";
const char* GIT_BRANCH="master";
const char* BUILD_TIME="2021-03-25 20:52";

View File

@@ -13,7 +13,7 @@ extern "C"
#include "Helper.h"
#include <fstream>
const char* GIT_BASE_BRANCH = "master - v6.2.2 - 2020-03-10";
const char* GIT_BASE_BRANCH = "master - v6.5.0 - 2020-03-25";
const char* git_base_branch(void)

View File

@@ -1,11 +0,0 @@
This directory is intended for PlatformIO Unit Testing and project tests.
Unit Testing is a software testing method by which individual units of
source code, sets of one or more MCU program modules together with associated
control data, usage procedures, and operating procedures, are tested to
determine whether they are fit for use. Unit testing finds problems early
in the development cycle.
More information about PlatformIO Unit Testing:
- https://docs.platformio.org/page/plus/unit-testing.html

View File

@@ -1,4 +1,4 @@
const char* GIT_REV="5cc873a";
const char* GIT_REV="7bc4e63";
const char* GIT_TAG="";
const char* GIT_BRANCH="rolling";
const char* BUILD_TIME="2021-03-10 21:09";
const char* GIT_BRANCH="master";
const char* BUILD_TIME="2021-03-25 20:52";

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
images/focus_adjustment.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 682 KiB

Binary file not shown.

View File

@@ -5,19 +5,19 @@ WaitBeforeTakingPicture = 5
ImageQuality = 5
ImageSize = VGA
;Brightness = -2
FixedExposure = true
FixedExposure = false
[Alignment]
InitalRotate=180
InitialRotate=180
/config/ref0.jpg 119 273
/config/ref1.jpg 456 138
SearchFieldX = 20
SearchFieldY = 20
InitialMirror= false
AlignmentAlgo = Default
[Digits]
Model = /config/dig0811s1.tflite
Model = /config/dig0820s2q.tflite
;LogImageLocation = /log/digit
;LogfileRetentionInDays = 3
ModelInputSize = 20 32
@@ -26,7 +26,7 @@ digit2 355 120 37 67
digit3 404 120 37 67
[Analog]
Model = /config/ana0630s2.tflite
Model = /config/ana0700s1lq.tflite
;LogImageLocation = /log/analog
;LogfileRetentionInDays = 3
ModelInputSize = 32 32

Binary file not shown.

View File

@@ -85,13 +85,14 @@ select {
<table>
<tr>
<td colspan="2"><input class="button" type="submit" name="saveroi" onclick="SaveToConfig()" value="Save to Config.ini"></td>
<td colspan="2"><input class="button" type="submit" name="saveroi" onclick="SaveToConfig()" value="Save all to Config.ini"></td>
</tr>
</table>
<script type="text/javascript" src="./gethost.js"></script>
<script type="text/javascript" src="./readconfig.js"></script>
<script type="text/javascript" src="./readconfigcommon.js"></script>
<script type="text/javascript" src="./readconfigcommon.js"></script>
<script language="JavaScript">
var canvas = document.getElementById('canvas'),
@@ -101,7 +102,8 @@ select {
drag = false,
aktindex = 0,
refInfo,
enhanceCon = false;
enhanceCon = false,
param;
basepath = "http://192.168.178.26";
basepath = "";
@@ -111,60 +113,60 @@ function ChangeSelection(){
}
function SaveToConfig(){
refInfo["name"] = document.getElementById("name").value;
refInfo["x"] = document.getElementById("refx").value;
refInfo["y"] = document.getElementById("refy").value;
refInfo["dx"] = document.getElementById("refdx").value;
refInfo["dy"] = document.getElementById("refdy").value;
UpdateConfig(refInfo, aktindex, enhanceCon, basepath);
/*
refInfo[aktindex]["name"] = document.getElementById("name").value;
refInfo[aktindex]["x"] = document.getElementById("refx").value;
refInfo[aktindex]["y"] = document.getElementById("refy").value;
refInfo[aktindex]["dx"] = document.getElementById("refdx").value;
refInfo[aktindex]["dy"] = document.getElementById("refdy").value;
*/
UpdateConfigReference(refInfo, basepath);
}
function EnhanceContrast(){
refInfo["name"] = document.getElementById("name").value;
refInfo["x"] = document.getElementById("refx").value;
refInfo["y"] = document.getElementById("refy").value;
refInfo["dx"] = document.getElementById("refdx").value;
refInfo["dy"] = document.getElementById("refdy").value;
refInfo[aktindex]["name"] = document.getElementById("name").value;
refInfo[aktindex]["x"] = document.getElementById("refx").value;
refInfo[aktindex]["y"] = document.getElementById("refy").value;
refInfo[aktindex]["dx"] = document.getElementById("refdx").value;
refInfo[aktindex]["dy"] = document.getElementById("refdy").value;
enhanceCon = true;
MakeContrastImageZW(refInfo, enhanceCon, basepath);
var url = basepath + "/fileserver" + "/img_tmp/ref_zw.jpg?" + Date.now();
document.getElementById("img_ref").src = url;
var url = basepath + "/fileserver" + "/img_tmp/ref_zw_org.jpg?" + Date.now();
document.getElementById("img_ref_org").src = url;
MakeContrastImageZW(refInfo[aktindex], enhanceCon, basepath);
UpdateReference();
// var url = basepath + "/fileserver" + "/img_tmp/ref_zw.jpg?" + Date.now();
// document.getElementById("img_ref").src = url;
// var url = basepath + "/fileserver" + "/img_tmp/ref_zw_org.jpg?" + Date.now();
// document.getElementById("img_ref_org").src = url;
}
function UpdateReference(){
refInfo = GetCoordinates(aktindex, basepath);
document.getElementById("img_ref").onload = function () {
document.getElementById("refdx").value = this.width;
document.getElementById("refdy").value = this.height;
refInfo["dx"] = this.width;
refInfo["dy"] = this.height;
refInfo[aktindex]["dx"] = this.width;
refInfo[aktindex]["dy"] = this.height;
rect.w = document.getElementById("refdx").value;
rect.h = document.getElementById("refdy").value;
draw();
}
var url = basepath + "/fileserver" + "/img_tmp/ref_zw_org.jpg?" + Date.now();
document.getElementById("img_ref_org").src = url;
var url = basepath + "/fileserver" + "/img_tmp/ref_zw.jpg?" + Date.now();
_filenameurl = refInfo[aktindex]["name"].replace("/config/", "/img_tmp/");
var url = basepath + "/fileserver" + _filenameurl + "?" + Date.now();
document.getElementById("img_ref").src = url;
document.getElementById("name").value = refInfo["name"];
document.getElementById("refx").value = refInfo["x"];
document.getElementById("refy").value = refInfo["y"];
_filenameurl = _filenameurl.replace(".jpg", "_org.jpg");
var url = basepath + "/fileserver" + _filenameurl + "?" + Date.now();
document.getElementById("img_ref_org").src = url;
document.getElementById("name").value = refInfo[aktindex]["name"];
document.getElementById("refx").value = refInfo[aktindex]["x"];
document.getElementById("refy").value = refInfo[aktindex]["y"];
rect.startX = document.getElementById("refx").value;
rect.startY = document.getElementById("refy").value;
document.getElementById("enhancecontrast").disabled = true;
draw();
}
function ParseIni(_basepath) {
loadConfig(_basepath);
ParseConfig();
UpdateReference();
}
function dataURLtoBlob(dataurl) {
var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
@@ -205,13 +207,21 @@ function dataURLtoBlob(dataurl) {
function init() {
function init() {
basepath = getbasepath();
loadConfig(basepath);
ParseConfig();
canvas.addEventListener('mousedown', mouseDown, false);
canvas.addEventListener('mouseup', mouseUp, false);
canvas.addEventListener('mousemove', mouseMove, false);
loadCanvas(basepath + "/fileserver/config/reference.jpg");
ParseIni(basepath);
CopyReferenceToImgTmp(basepath);
refInfo = GetReferencesInfo();
UpdateReference();
drawImage();
}
function drawImage(){
@@ -226,17 +236,13 @@ function dataURLtoBlob(dataurl) {
function CutOutReference(){
refInfo["x"] = document.getElementById("refx").value;
refInfo["y"] = document.getElementById("refy").value;
refInfo["dx"] = document.getElementById("refdx").value;
refInfo["dy"] = document.getElementById("refdy").value;
MakeRefZW(refInfo, basepath);
var url = basepath + "/fileserver" + "/img_tmp/ref_zw.jpg?" + Date.now();
document.getElementById("img_ref_org").src = url;
var url = basepath + "/fileserver" + "/img_tmp/ref_zw_org.jpg?" + Date.now();
document.getElementById("img_ref").src = url;
refInfo[aktindex]["x"] = document.getElementById("refx").value;
refInfo[aktindex]["y"] = document.getElementById("refy").value;
refInfo[aktindex]["dx"] = document.getElementById("refdx").value;
refInfo[aktindex]["dy"] = document.getElementById("refdy").value;
MakeRefZW(refInfo[aktindex], basepath);
UpdateReference();
document.getElementById("enhancecontrast").disabled = false;
draw();
}
function drawGrid(){

View File

@@ -363,7 +363,15 @@ function ParseIni(_basepath) {
var y0 = parseInt(rect.startY) - parseInt(lw/2);
var dx = parseInt(rect.w) + parseInt(lw);
var dy = parseInt(rect.h) + parseInt(lw);
context.strokeRect(x0, y0, dx, dy);
context.strokeRect(x0, y0, dx, dy);
context.lineWidth = 1;
context.beginPath();
context.arc(x0+dx/2, y0+dy/2, dx/2, 0, 2 * Math.PI);
context.moveTo(x0+dx/2, y0);
context.lineTo(x0+dx/2, y0+dy);
context.moveTo(x0, y0+dy/2);
context.lineTo(x0+dx, y0+dy/2);
context.stroke();
ROIInfo[aktindex]["x"] = rect.startX;
ROIInfo[aktindex]["y"] = rect.startY;
ROIInfo[aktindex]["dx"] = rect.w;

View File

@@ -61,7 +61,7 @@ textarea {
</tr>
<tr>
<td width="20px" style="padding-left: 40px;">
<input type="checkbox" id="MakeImage_LogImageLocation_enabled" value="1" onclick = 'document.getElementById("MakeImage_LogImageLocation_value1").disabled = !document.getElementById("MakeImage_LogImageLocation_value1").disabled' unchecked >
<input type="checkbox" id="MakeImage_LogImageLocation_enabled" value="1" onclick = 'InvertEnableItem("MakeImage", "LogImageLocation")' unchecked >
</td>
<td width="200px">
<class id="MakeImage_LogImageLocation_text" style="color:black;">LogImageLocation</class>
@@ -75,7 +75,7 @@ textarea {
</tr>
<tr>
<td width="20px" style="padding-left: 40px;">
<td"><input type="checkbox" id="MakeImage_LogfileRetentionInDays_enabled" value="1" onclick = 'document.getElementById("MakeImage_LogfileRetentionInDays_value1").disabled = !document.getElementById("MakeImage_LogfileRetentionInDays_value1").disabled' unchecked ></td>
<td"><input type="checkbox" id="MakeImage_LogfileRetentionInDays_enabled" value="1" onclick = 'InvertEnableItem("MakeImage", "LogfileRetentionInDays")' unchecked ></td>
</td>
<td>
<class id="MakeImage_LogfileRetentionInDays_text" style="color:black;">LogfileRetentionInDays</class>
@@ -223,7 +223,7 @@ textarea {
</tr>
<tr class="expert" id="AlignmentAlgo_ex8">
<td width="20px" style="padding-left: 40px;">
<input type="checkbox" id="Alignment_AlignmentAlgo_enabled" value="1" onclick = 'document.getElementById("Alignment_AlignmentAlgo_value1").disabled = !document.getElementById("Alignment_AlignmentAlgo_value1").disabled' unchecked >
<input type="checkbox" id="Alignment_AlignmentAlgo_enabled" value="1" onclick = 'InvertEnableItem("Alignment", "AlignmentAlgo")' unchecked >
</td>
<td>
<class id="Alignment_AlignmentAlgo_text" style="color:black;">AlignmentAlgo</class>
@@ -260,7 +260,7 @@ textarea {
</tr>
<tr>
<td width="20px" style="padding-left: 40px;">
<input type="checkbox" id="Digits_LogImageLocation_enabled" value="1" onclick = 'document.getElementById("Digits_LogImageLocation_value1").disabled = !document.getElementById("Digits_LogImageLocation_value1").disabled' unchecked >
<input type="checkbox" id="Digits_LogImageLocation_enabled" value="1" onclick = 'InvertEnableItem("Digits", "LogImageLocation")' unchecked >
</td>
<td>
<class id="Digits_LogImageLocation_text" style="color:black;">LogImageLocation</class>
@@ -274,7 +274,7 @@ textarea {
</tr>
<tr>
<td width="20px" style="padding-left: 40px;">
<td"><input type="checkbox" id="Digits_LogfileRetentionInDays_enabled" value="1" onclick = 'document.getElementById("Digits_LogfileRetentionInDays_value1").disabled = !document.getElementById("Digits_LogfileRetentionInDays_value1").disabled' unchecked ></td>
<td"><input type="checkbox" id="Digits_LogfileRetentionInDays_enabled" value="1" onclick = 'InvertEnableItem("Digits", "LogfileRetentionInDays")' unchecked ></td>
</td>
<td>
<class id="Digits_LogfileRetentionInDays_text" style="color:black;">LogfileRetentionInDays</class>
@@ -313,7 +313,7 @@ textarea {
</tr>
<tr>
<td width="20px" style="padding-left: 40px;">
<input type="checkbox" id="Analog_LogImageLocation_enabled" value="1" onclick = 'document.getElementById("Analog_LogImageLocation_value1").disabled = !document.getElementById("Analog_LogImageLocation_value1").disabled' unchecked >
<input type="checkbox" id="Analog_LogImageLocation_enabled" value="1" onclick = 'InvertEnableItem("Analog", "LogImageLocation")' unchecked >
</td>
<td> <class id="Analog_LogImageLocation_text" style="color:black;">LogImageLocation</class> </td>
<td> <input type="text" name="name" id="Analog_LogImageLocation_value1"> </td>
@@ -321,7 +321,7 @@ textarea {
</tr>
<tr>
<td width="20px" style="padding-left: 40px;">
<td"><input type="checkbox" id="Analog_LogfileRetentionInDays_enabled" value="1" onclick = 'document.getElementById("Analog_LogfileRetentionInDays_value1").disabled = !document.getElementById("Analog_LogfileRetentionInDays_value1").disabled' unchecked ></td>
<td"><input type="checkbox" id="Analog_LogfileRetentionInDays_enabled" value="1" onclick = 'InvertEnableItem("Analog", "LogfileRetentionInDays")' unchecked ></td>
</td>
<td> <class id="Analog_LogfileRetentionInDays_text" style="color:black;">LogfileRetentionInDays</class> </td>
<td> <input type="number" id="Analog_LogfileRetentionInDays_value1" min="0" step="1"> </td>
@@ -330,7 +330,7 @@ textarea {
<tr class="expert" id="Analog_ExtendedResolution_ex10">
<td width="20px" style="padding-left: 40px;">
<input type="checkbox" id="Analog_ExtendedResolution_enabled" value="1" onclick = 'document.getElementById("Analog_ExtendedResolution_value1").disabled = !document.getElementById("Analog_ExtendedResolution_value1").disabled' unchecked >
<input type="checkbox" id="Analog_ExtendedResolution_enabled" value="1" onclick = 'InvertEnableItem("Analog", "ExtendedResolution")' unchecked >
</td>
<td width="200px">
<class id="Analog_ExtendedResolution_text" style="color:black;">ExtendedResolution</class>
@@ -364,7 +364,7 @@ textarea {
</tr>
<tr>
<td width="20px" style="padding-left: 40px;">
<input type="checkbox" id="PostProcessing_DecimalShift_enabled" value="1" onclick = 'document.getElementById("PostProcessing_DecimalShift_value1").disabled = !document.getElementById("PostProcessing_DecimalShift_value1").disabled' unchecked >
<input type="checkbox" id="PostProcessing_DecimalShift_enabled" value="1" onclick = 'InvertEnableItem("PostProcessing", "DecimalShift")' unchecked >
</td>
<td width="200px">
<class id="PostProcessing_DecimalShift_text" style="color:black;">DecimalShift</class>
@@ -378,7 +378,7 @@ textarea {
</tr>
<tr>
<td width="20px" style="padding-left: 40px;">
<input type="checkbox" id="PostProcessing_PreValueUse_enabled" value="1" onclick = 'document.getElementById("PostProcessing_PreValueUse_value1").disabled = !document.getElementById("PostProcessing_PreValueUse_value1").disabled' unchecked >
<input type="checkbox" id="PostProcessing_PreValueUse_enabled" value="1" onclick = 'InvertEnableItem("PostProcessing", "PreValueUse")' unchecked >
</td>
<td width="200px">
<class id="PostProcessing_PreValueUse_text" style="color:black;">PreValueUse</class>
@@ -395,7 +395,7 @@ textarea {
</tr>
<tr class="expert" id="ex11">
<td width="20px" style="padding-left: 40px;">
<input type="checkbox" id="PostProcessing_PreValueAgeStartup_enabled" value="1" onclick = 'document.getElementById("PostProcessing_PreValueAgeStartup_value1").disabled = !document.getElementById("PostProcessing_PreValueAgeStartup_value1").disabled' unchecked >
<input type="checkbox" id="PostProcessing_PreValueAgeStartup_enabled" value="1" onclick = 'InvertEnableItem("PostProcessing", "PreValueAgeStartup")' unchecked >
</td>
<td width="200px">
<class id="PostProcessing_PreValueAgeStartup_text" style="color:black;">PreValueAgeStartup</class>
@@ -409,7 +409,7 @@ textarea {
</tr>
<tr>
<td width="20px" style="padding-left: 40px;">
<input type="checkbox" id="PostProcessing_AllowNegativeRates_enabled" value="1" onclick = 'document.getElementById("PostProcessing_AllowNegativeRates_value1").disabled = !document.getElementById("PostProcessing_AllowNegativeRates_value1").disabled' unchecked >
<input type="checkbox" id="PostProcessing_AllowNegativeRates_enabled" value="1" onclick = 'InvertEnableItem("PostProcessing", "AllowNegativeRates")' unchecked >
</td>
<td width="200px">
<class id="PostProcessing_AllowNegativeRates_text" style="color:black;">AllowNegativeRates</class>
@@ -426,7 +426,7 @@ textarea {
</tr>
<tr>
<td width="20px" style="padding-left: 40px;">
<input type="checkbox" id="PostProcessing_MaxRateValue_enabled" value="1" onclick = 'document.getElementById("PostProcessing_MaxRateValue_value1").disabled = !document.getElementById("PostProcessing_MaxRateValue_value1").disabled' unchecked >
<input type="checkbox" id="PostProcessing_MaxRateValue_enabled" value="1" onclick = 'InvertEnableItem("PostProcessing", "MaxRateValue")' unchecked >
</td>
<td width="200px">
<class id="PostProcessing_MaxRateValue_text" style="color:black;">MaxRateValue</class>
@@ -440,7 +440,7 @@ textarea {
</tr>
<tr class="expert" id="ex12">
<td width="20px" style="padding-left: 40px;">
<input type="checkbox" id="PostProcessing_ErrorMessage_enabled" value="1" onclick = 'document.getElementById("PostProcessing_ErrorMessage_value1").disabled = !document.getElementById("PostProcessing_ErrorMessage_value1").disabled' unchecked >
<input type="checkbox" id="PostProcessing_ErrorMessage_enabled" value="1" onclick = 'InvertEnableItem("PostProcessing", "ErrorMessage")' unchecked >
</td>
<td width="200px">
<class id="PostProcessing_ErrorMessage_text" style="color:black;">ErrorMessage</class>
@@ -457,7 +457,7 @@ textarea {
</tr>
<tr>
<td width="20px" style="padding-left: 40px;">
<input type="checkbox" id="PostProcessing_CheckDigitIncreaseConsistency_enabled" value="1" onclick = 'document.getElementById("PostProcessing_CheckDigitIncreaseConsistency_value1").disabled = !document.getElementById("PostProcessing_CheckDigitIncreaseConsistency_value1").disabled' unchecked >
<input type="checkbox" id="PostProcessing_CheckDigitIncreaseConsistency_enabled" value="1" onclick = 'InvertEnableItem("PostProcessing", "CheckDigitIncreaseConsistency")' unchecked >
</td>
<td width="200px">
<class id="PostProcessing_CheckDigitIncreaseConsistency_text" style="color:black;">CheckDigitIncreaseConsistency</class>
@@ -478,7 +478,7 @@ textarea {
</tr>
<tr>
<td width="20px" style="padding-left: 40px;">
<input type="checkbox" id="MQTT_Uri_enabled" value="1" onclick = 'document.getElementById("MQTT_Uri_value1").disabled = !document.getElementById("MQTT_Uri_value1").disabled' unchecked >
<input type="checkbox" id="MQTT_Uri_enabled" value="1" onclick = 'InvertEnableItem("MQTT", "Uri")' unchecked >
</td>
<td width="200px">
<class id="MQTT_Uri_text" style="color:black;">Uri</class>
@@ -492,7 +492,7 @@ textarea {
</tr>
<tr>
<td width="20px" style="padding-left: 40px;">
<input type="checkbox" id="MQTT_Topic_enabled" value="1" onclick = 'document.getElementById("MQTT_Topic_value1").disabled = !document.getElementById("MQTT_Topic_value1").disabled' unchecked >
<input type="checkbox" id="MQTT_Topic_enabled" value="1" onclick = 'InvertEnableItem("MQTT", "Topic")' unchecked >
</td>
<td width="200px">
<class id="MQTT_Topic_text" style="color:black;">Topic</class>
@@ -506,7 +506,7 @@ textarea {
</tr>
<tr>
<td width="20px" style="padding-left: 40px;">
<input type="checkbox" id="MQTT_TopicError_enabled" value="1" onclick = 'document.getElementById("MQTT_TopicError_value1").disabled = !document.getElementById("MQTT_TopicError_value1").disabled' unchecked >
<input type="checkbox" id="MQTT_TopicError_enabled" value="1" onclick = 'InvertEnableItem("MQTT", "TopicError")' unchecked >
</td>
<td width="200px">
<class id="MQTT_TopicError_text" style="color:black;">TopicError</class>
@@ -520,7 +520,7 @@ textarea {
</tr>
<tr>
<td width="20px" style="padding-left: 40px;">
<input type="checkbox" id="MQTT_ClientID_enabled" value="1" onclick = 'document.getElementById("MQTT_ClientID_value1").disabled = !document.getElementById("MQTT_ClientID_value1").disabled' unchecked >
<input type="checkbox" id="MQTT_ClientID_enabled" value="1" onclick = 'InvertEnableItem("MQTT", "ClientID")' unchecked >
</td>
<td width="200px">
<class id="MQTT_ClientID_text" style="color:black;">ClientID</class>
@@ -534,7 +534,7 @@ textarea {
</tr>
<tr>
<td width="20px" style="padding-left: 40px;">
<input type="checkbox" id="MQTT_user_enabled" value="1" onclick = 'document.getElementById("MQTT_user_value1").disabled = !document.getElementById("MQTT_user_value1").disabled' unchecked >
<input type="checkbox" id="MQTT_user_enabled" value="1" onclick = 'InvertEnableItem("MQTT", "user")' unchecked >
</td>
<td width="200px">
<class id="MQTT_user_text" style="color:black;">user</class>
@@ -548,7 +548,7 @@ textarea {
</tr>
<tr>
<td width="20px" style="padding-left: 40px;">
<input type="checkbox" id="MQTT_password_enabled" value="1" onclick = 'document.getElementById("MQTT_password_value1").disabled = !document.getElementById("MQTT_password_value1").disabled' unchecked >
<input type="checkbox" id="MQTT_password_enabled" value="1" onclick = 'InvertEnableItem("MQTT", "password")' unchecked >
</td>
<td width="200px">
<class id="MQTT_password_text" style="color:black;">password</class>
@@ -566,7 +566,6 @@ textarea {
</tr>
<tr class="expert" id="ex13">
<td width="20px" style="padding-left: 40px;">
<input type="checkbox" id="AutoTimer_AutoStart_enabled" value="1" onclick = 'document.getElementById("AutoTimer_AutoStart_value1").disabled = !document.getElementById("AutoTimer_AutoStart_value1").disabled' unchecked >
</td>
<td width="200px">
<class id="AutoTimer_AutoStart_text" style="color:black;">AutoStart</class>
@@ -583,7 +582,6 @@ textarea {
</tr>
<tr>
<td width="20px" style="padding-left: 40px;">
<input type="checkbox" id="AutoTimer_Intervall_enabled" value="1" onclick = 'document.getElementById("AutoTimer_Intervall_value1").disabled = !document.getElementById("AutoTimerg_Intervall_value1").disabled' unchecked >
</td>
<td width="200px">
<class id="AutoTimer_Intervall_text" style="color:black;">Intervall</class>
@@ -601,7 +599,7 @@ textarea {
</tr>
<tr>
<td width="20px" style="padding-left: 40px;">
<input type="checkbox" id="Debug_Logfile_enabled" value="1" onclick = 'document.getElementById("Debug_Logfile_value1").disabled = !document.getElementById("Debug_Logfile_value1").disabled' unchecked >
<input type="checkbox" id="Debug_Logfile_enabled" value="1" onclick = 'InvertEnableItem("Debug", "Logfile")' unchecked >
</td>
<td width="200px">
<class id="Debug_Logfile_text" style="color:black;">Logfile</class>
@@ -618,7 +616,7 @@ textarea {
</tr>
<tr>
<td width="20px" style="padding-left: 40px;">
<td"><input type="checkbox" id="Debug_LogfileRetentionInDays_enabled" value="1" onclick = 'document.getElementById("Debug_LogfileRetentionInDays_value1").disabled = !document.getElementById("Debug_LogfileRetentionInDays_value1").disabled' unchecked ></td>
<td"><input type="checkbox" id="Debug_LogfileRetentionInDays_enabled" value="1" onclick = 'InvertEnableItem("Debug", "LogfileRetentionInDays")' unchecked ></td>
</td>
<td>
<class id="Debug_LogfileRetentionInDays_text" style="color:black;">LogfileRetentionInDays</class>
@@ -636,7 +634,7 @@ textarea {
</tr>
<tr>
<td width="20px" style="padding-left: 40px;">
<td"><input type="checkbox" id="System_TimeZone_enabled" value="1" onclick = 'document.getElementById("System_TimeZone_value1").disabled = !document.getElementById("System_TimeZone_value1").disabled' unchecked ></td>
<td"><input type="checkbox" id="System_TimeZone_enabled" value="1" onclick = 'InvertEnableItem("System", "TimeZone")' unchecked ></td>
</td>
<td>
<class id="System_TimeZone_text" style="color:black;">TimeZone</class>
@@ -650,7 +648,7 @@ textarea {
</tr>
<tr class="expert" id="ex16">
<td width="20px" style="padding-left: 40px;">
<td"><input type="checkbox" id="System_TimeServer_enabled" value="1" onclick = 'document.getElementById("System_TimeServer_value1").disabled = !document.getElementById("System_TimeServer_value1").disabled' unchecked ></td>
<td"><input type="checkbox" id="System_TimeServer_enabled" value="1" onclick = 'InvertEnableItem("System", "TimeServer")' unchecked ></td>
</td>
<td>
<class id="System_TimeServer_text" style="color:black;">TimeServer</class>
@@ -664,7 +662,7 @@ textarea {
</tr>
<tr class="expert" id="System_Hostname">
<td width="20px" style="padding-left: 40px;">
<td"><input type="checkbox" id="System_Hostname_enabled" value="1" onclick = 'document.getElementById("System_Hostname_value1").disabled = !document.getElementById("System_Hostname_value1").disabled' unchecked ></td>
<td"><input type="checkbox" id="System_Hostname_enabled" value="1" onclick = 'InvertEnableItem("System", "Hostname")' unchecked ></td>
</td>
<td>
<class id="System_Hostname_text" style="color:black;">Hostname</class>
@@ -768,6 +766,33 @@ function WriteParameter(_param, _category, _cat, _name, _optional, _select = fal
EnDisableItem(_category[_cat]["enabled"], _param, _category, _cat, _name, _optional);
}
function InvertEnableItem(_cat, _param)
{
_zw = _cat + "_" + _param + "_enabled";
_isOn = document.getElementById(_zw).checked;
_color = "color:lightgrey;";
if (_isOn) {
_color = "color:black;";
}
_zw = _cat + "_" + _param + "_text";
document.getElementById(_zw).disabled = !_isOn;
document.getElementById(_zw).style = _color;
if (param[_cat][_param]["anzParam"] == 2) {
_color = "width: 30px;" + _color;
}
for (var j = 1; j <= param[_cat][_param]["anzParam"]; ++j) {
document.getElementById(_cat+"_"+_param+"_value"+j).disabled = !_isOn;
document.getElementById(_cat+"_"+_param+"_value"+j).style=_color;
}
}
function EnDisableItem(_status, _param, _category, _cat, _name, _optional)
{
_status = _param[_cat][_name]["found"] && _category[_cat]["enabled"];
@@ -864,8 +889,8 @@ function UpdateInput() {
WriteParameter(param, category, "MQTT", "user", true);
WriteParameter(param, category, "MQTT", "password", true);
WriteParameter(param, category, "AutoTimer", "AutoStart", true, true);
WriteParameter(param, category, "AutoTimer", "Intervall", true);
WriteParameter(param, category, "AutoTimer", "AutoStart", false, true);
WriteParameter(param, category, "AutoTimer", "Intervall", false);
WriteParameter(param, category, "Debug", "Logfile", true, true);
WriteParameter(param, category, "Debug", "LogfileRetentionInDays", true);
@@ -921,8 +946,8 @@ function ReadParameterAll()
ReadParameter(param, "MQTT", "user", true);
ReadParameter(param, "MQTT", "password", true);
ReadParameter(param, "AutoTimer", "AutoStart", true, true);
ReadParameter(param, "AutoTimer", "Intervall", true);
ReadParameter(param, "AutoTimer", "AutoStart", false, true);
ReadParameter(param, "AutoTimer", "Intervall", false);
ReadParameter(param, "Debug", "Logfile", true, true);
ReadParameter(param, "Debug", "LogfileRetentionInDays", true);

View File

@@ -354,7 +354,9 @@ function draw() {
var y0 = parseInt(rect.startY) - parseInt(lw/2);
var dx = parseInt(rect.w) + parseInt(lw);
var dy = parseInt(rect.h) + parseInt(lw);
context.strokeRect(x0, y0, dx, dy);
context.strokeRect(x0, y0, dx, dy);
context.lineWidth = 1;
context.strokeRect(x0+dx*0.2, y0+dy*0.2, dx*0.6, dy*0.6);
ROIInfo[aktindex]["x"] = rect.startX;
ROIInfo[aktindex]["y"] = rect.startY;
ROIInfo[aktindex]["dx"] = rect.w;

View File

@@ -29,23 +29,21 @@ p {font-size: 1em;}
</p>
<p>
This is the first time you the digitizer. You have been automatically routed to the <b>initial setup procedure</b>.
This procedure should adjust the setting to your local counter. Basically you can customize your settings in five steps.
<br>
In the final step the inital setup will be disabled and it will restart to the normal mode.
This is the first time you started the digitizer after the initial installation. You have been automatically routed to the <b>initial setup procedure</b>.
Here you adjust the setting to your local counter within five steps. In the final step the inital setup will be disabled and it will restart to the normal mode.
<br>
<br>
Just use the buttons "Next" and "Previous" to nagivate through the process.
You can navigate forward and backward during the setup with the buttons "Next" and "Previous". Do not forget to save in each step.
<br>
</p>
<p>
Follow the instructions:
This is an overview over the five steps:
</p>
<p>
<ol>
<li>Create reference image <br>
Basis for the position references and the marking of the digits and counters.</li>
Base for the position referencing and the identification of the digits and counters.</li>
<li>Define two unique references <br>
Used to align the individual camera shot and identify the absolut positions</li>
<li>Define the digits <br>
@@ -53,7 +51,7 @@ p {font-size: 1em;}
<li>Define the analog counters <br>
Analog counters to be identified</li>
<li>General settings <br>
Most can stay to the default value - also MQTT connection can be specified here</li>
Most settings can be used with default value at the beginning. MQTT connection can be specified here</li>
</ol>
<p>

View File

@@ -34,9 +34,9 @@ p {font-size: 1em;}
<br>
Once you have pushed below button, the setup modus will be left and the digitizer start to normal operation mode.
<br>
After a view seconds you can reload this page again and will go to normal operation mode.
After a view seconds you can reload this page. It will take two to four minutes, until you get the first reading.
<br>
All settings can be changed later on as well in the configuration menue.
All settings can be changed as well in the configuration menue in normal operation mode.
</p>
<p>

View File

@@ -102,7 +102,7 @@ table {
_brightness = document.getElementById("MakeImage_Brightness_value1").value;
// _contrast = document.getElementById("MakeImage_Contrast_value1").value;
// _saturation = document.getElementById("MakeImage_Saturation_value1").value;
url = basepath + "/editflow.html?task=test_take&bri=" + _brightness;
url = basepath + "/editflow.html?task=test_take&bri=" + _brightness;
}
else
{
@@ -118,9 +118,6 @@ url = basepath + "/editflow.html?task=test_take&bri=" + _brightness;
function loadRawImage(){
url = basepath + "/img_tmp/raw.jpg" + "?session=" + Math.floor((Math.random() * 1000000) + 1);
// document.getElementById("finerotate").value = 0;
// document.getElementById("prerotateangle").value = getPreRotate();
// document.getElementById("mirror").checked = getMirror();
document.getElementById("finerotate").disabled = false;
document.getElementById("prerotateangle").disabled = false;
document.getElementById("updatereferenceimage").disabled = false;
@@ -128,7 +125,9 @@ url = basepath + "/editflow.html?task=test_take&bri=" + _brightness;
if (param["Alignment"]["InitialMirror"].found)
document.getElementById("mirror").disabled = false;
else
{
document.getElementById("labelmirror").style = "color:lightgrey;";
}
if (param["MakeImage"]["Brightness"].found && param["MakeImage"]["Brightness"].enabled)
document.getElementById("MakeImage_Brightness_value1").disabled = false;
@@ -164,6 +163,14 @@ url = basepath + "/editflow.html?task=test_take&bri=" + _brightness;
document.getElementById("MakeImage_Brightness_value1").disabled = true;
// document.getElementById("MakeImage_Saturation_value1").disabled = true;
// document.getElementById("MakeImage_Contrast_value1").disabled = true;
document.getElementById("mirror").disabled = false;
if (!(param["MakeImage"]["Brightness"].found))
{
document.getElementById("MakeImage_Brightness_value1").type = "hidden";
document.getElementById("MakeImage_Brightness_text").style.visibility = "hidden";
}
document.getElementById("mirror").disabled = true;
isActReference = true;
@@ -193,13 +200,15 @@ url = basepath + "/editflow.html?task=test_take&bri=" + _brightness;
ReadParameter(param, "MakeImage", "Brightness", false);
// ReadParameter(param, "MakeImage", "Contrast", false);
// ReadParameter(param, "MakeImage", "Saturation", false);
var textToSave = setConfigParameters(param);
FileDeleteOnServer("/config/config.ini", basepath);
FileSendContent(textToSave, "/config/config.ini", basepath);
}
var canvas = document.getElementById("canvas");
drawRotated(false);
var textToSave = setConfigParameters(param);
FileDeleteOnServer("/config/config.ini", basepath);
FileSendContent(textToSave, "/config/config.ini", basepath);
SaveCanvasToImage(canvas, "/config/reference.jpg", true, basepath);
showReference();
UpdatePage();

View File

@@ -22,11 +22,11 @@ p {font-size: 1em;}
<body style="font-family: arial">
<h4>Reference Image</h4>
The reference image is needed to define the digits, counters and references for alignment.
The reference image is the base to define the digits, counters and references positions.
<p>
The last taken raw image from the camera is taken. Use the Button "Create New Reference" to make your own reference.<br>
Most important feature is a straight alignment of the image. Use the Pre roate Angle and the fine alignment to fine tune the rotation of the image<br>
Finish the step by pushing <b>"Update Reference Image"</b>.
Firstly you see the default image. Use the Button "Create New Reference" to start to create your own reference image.<br>
Most important feature is a straight alignment of the image. Use the Pre-rotate angle and the fine alignment to adjust the rotation of the image<br>
Store the reference image by pushing <b>"Update Reference Image"</b>.
</p>
</body>

View File

@@ -9,7 +9,7 @@ function getbasepath(){
{
// host = "http://192.168.2.118"; // jomjol interner test
// host = "http://192.168.178.26"; // jomjol interner test
host = "http://192.168.178.22"; // jomjol interner Real
host = "http://192.168.178.26"; // jomjol interner Real
// host = "."; // jomjol interner localhost
}

View File

@@ -14,7 +14,9 @@ var digitsEnabled = false;
var posDigitsHeader;
function MakeRefZW(zw, _basepath){
url = _basepath + "/editflow.html?task=cutref&in=/config/reference.jpg&out=/img_tmp/ref_zw_org.jpg&x=" + zw["x"] + "&y=" + zw["y"] + "&dx=" + zw["dx"] + "&dy=" + zw["dy"];
_filetarget = zw["name"].replace("/config/", "/img_tmp/");
_filetarget = _filetarget.replace(".jpg", "_org.jpg");
url = _basepath + "/editflow.html?task=cutref&in=/config/reference.jpg&out="+_filetarget+"&x=" + zw["x"] + "&y=" + zw["y"] + "&dx=" + zw["dx"] + "&dy=" + zw["dy"];
var xhttp = new XMLHttpRequest();
try {
xhttp.open("GET", url, false);
@@ -22,18 +24,30 @@ function MakeRefZW(zw, _basepath){
catch (error)
{
// alert("Deleting Config.ini failed");
}
FileCopyOnServer("/img_tmp/ref_zw_org.jpg", "/img_tmp/ref_zw.jpg", _basepath);
}
_filetarget2 = zw["name"].replace("/config/", "/img_tmp/");
// _filetarget2 = _filetarget2.replace(".jpg", "_org.jpg");
FileCopyOnServer(_filetarget, _filetarget2, _basepath);
}
function GetCoordinates(index, _basepath){
FileCopyOnServer(ref[index]["name"], "/img_tmp/ref_zw.jpg", _basepath);
function CopyReferenceToImgTmp(_basepath)
{
for (index = 0; index < 2; ++index)
{
_filenamevon = ref[index]["name"];
_filenamenach = _filenamevon.replace("/config/", "/img_tmp/");
FileDeleteOnServer(_filenamenach, _basepath);
FileCopyOnServer(_filenamevon, _filenamenach, _basepath);
_filenamevon = _filenamevon.replace(".jpg", "_org.jpg");
_filenamenach = _filenamenach.replace(".jpg", "_org.jpg");
FileDeleteOnServer(_filenamenach, _basepath);
FileCopyOnServer(_filenamevon, _filenamenach, _basepath);
}
}
FileDeleteOnServer("/img_tmp/ref_zw_org.jpg", _basepath);
var namezw = ref[index]["name"].replace(".jpg", "_org.jpg");
FileCopyOnServer(namezw, "/img_tmp/ref_zw_org.jpg", _basepath);
return ref[index];
function GetReferencesInfo(){
return ref;
}
function ParseConfigAlignment(_aktline){
@@ -321,21 +335,31 @@ function UpdateConfigFileReferenceChange(_basepath){
SaveConfigToServer(_basepath);
}
function UpdateConfig(zw, _index, _enhance, _basepath){
var zeile = zw["name"] + " " + zw["x"] + " " + zw["y"];
var _pos = ref[_index]["pos_ref"];
config_split[_pos] = zeile;
function UpdateConfigReference(zw, _basepath){
for (var index = 0; index < 2; ++index)
{
var zeile = zw[index]["name"] + " " + zw[index]["x"] + " " + zw[index]["y"];
var _pos = zw[index]["pos_ref"];
config_split[_pos] = zeile;
_filenamenach = ref[index]["name"];
_filenamevon = _filenamenach.replace("/config/", "/img_tmp/");
FileDeleteOnServer(_filenamenach, _basepath);
FileCopyOnServer(_filenamevon, _filenamenach, _basepath);
_filenamenach = _filenamenach.replace(".jpg", "_org.jpg");
_filenamevon = _filenamevon.replace(".jpg", "_org.jpg");
FileDeleteOnServer(_filenamenach, _basepath);
FileCopyOnServer(_filenamevon, _filenamenach, _basepath);
}
SaveConfigToServer(_basepath);
var namezw = zw["name"];
FileCopyOnServer("/img_tmp/ref_zw.jpg", namezw, _basepath);
var namezw = zw["name"].replace(".jpg", "_org.jpg");
FileCopyOnServer("/img_tmp/ref_zw_org.jpg", namezw, _basepath);
}
function MakeContrastImageZW(zw, _enhance, _basepath){
url = _basepath + "/editflow.html?task=cutref&in=/config/reference.jpg&out=/img_tmp/ref_zw.jpg" + "&x=" + zw["x"] + "&y=" + zw["y"] + "&dx=" + zw["dx"] + "&dy=" + zw["dy"];
_filename = zw["name"].replace("/config/", "/img_tmp/");
url = _basepath + "/editflow.html?task=cutref&in=/config/reference.jpg&out=" + _filename + "&x=" + zw["x"] + "&y=" + zw["y"] + "&dx=" + zw["dx"] + "&dy=" + zw["dy"];
if (_enhance == true){
url = url + "&enhance=true";
}

View File

@@ -172,6 +172,7 @@ function loadConfig(_basepath) {
xhttp.open("GET", url, false);
xhttp.send();
config_gesamt = xhttp.responseText;
config_gesamt = config_gesamt.replace("InitalRotate", "InitialRotate"); // Korrigiere Schreibfehler in config.ini !!!!!
}
catch (error)
{

View File

@@ -1 +1 @@
5.4.1
6.4.1