Remove legacy code
This commit is contained in:
parent
cd89cca984
commit
162318b439
File diff suppressed because it is too large
Load Diff
@ -1,129 +0,0 @@
|
||||
class DebugCanvas {
|
||||
constructor(ardConf){
|
||||
this.conf = ardConf;
|
||||
this.targetWidth = 1280;
|
||||
this.targetHeight = 720;
|
||||
this.targetOffsetTop = 1080;
|
||||
this.targetOffsetLeft = 100;
|
||||
}
|
||||
|
||||
init(canvasSize, canvasPosition, targetCanvasSize) {
|
||||
console.log("initiating DebugCanvas")
|
||||
|
||||
var body = document.getElementsByTagName('body')[0];
|
||||
|
||||
if(!canvasPosition){
|
||||
canvasPosition = {
|
||||
top: 1200,
|
||||
left: 800
|
||||
}
|
||||
}
|
||||
if(!this.canvas){
|
||||
this.canvas = document.createElement("canvas");
|
||||
body.appendChild(this.canvas);
|
||||
}
|
||||
|
||||
if(targetCanvasSize){
|
||||
this.targetWidth = targetCanvasSize.width;
|
||||
this.targetHeight = targetCanvasSize.height;
|
||||
}
|
||||
|
||||
this.canvas.style.position = "absolute";
|
||||
this.canvas.style.left = `${canvasPosition.left}px`;
|
||||
this.canvas.style.top = `${canvasPosition.top}px`;
|
||||
this.canvas.style.zIndex = 10002;
|
||||
// this.canvas.id = "uw_debug_canvas";
|
||||
|
||||
this.context = this.canvas.getContext("2d");
|
||||
|
||||
this.canvas.width = canvasSize.width;
|
||||
this.canvas.height = canvasSize.height;
|
||||
|
||||
this.calculateCanvasZoom();
|
||||
|
||||
console.log("debug canvas is:", this.canvas, "context:", this.context)
|
||||
}
|
||||
|
||||
calculateCanvasZoom(){
|
||||
var canvasZoom = this.targetWidth / this.canvas.width;
|
||||
var translateX = (this.canvas.width - this.targetWidth)/2;
|
||||
var translateY = (this.canvas.height - this.targetHeight)/2;
|
||||
|
||||
this.canvas.style.transform = `scale(${canvasZoom},${canvasZoom}) translateX(${translateX}px) translateY(${translateY}px)`;
|
||||
}
|
||||
|
||||
destroy(){
|
||||
if(this.canvas)
|
||||
this.canvas.remove();
|
||||
}
|
||||
|
||||
setBuffer(buffer) {
|
||||
// this.imageBuffer = buffer.splice(0);
|
||||
this.imageBuffer = new Uint8ClampedArray(buffer);
|
||||
}
|
||||
|
||||
trace(arrayIndex, colorClass) {
|
||||
this.imageBuffer[arrayIndex ] = colorClass.colorRgb[0];
|
||||
this.imageBuffer[arrayIndex+1] = colorClass.colorRgb[1];
|
||||
this.imageBuffer[arrayIndex+2] = colorClass.colorRgb[2];
|
||||
}
|
||||
|
||||
update() {
|
||||
var start = performance.now();
|
||||
try{
|
||||
if(this.context && this.imageBuffer instanceof Uint8ClampedArray){
|
||||
try{
|
||||
var idata = new ImageData(this.imageBuffer, this.canvas.width, this.canvas.height);
|
||||
} catch (ee) {
|
||||
console.log("[DebugCanvas.js::update] can't create image data. Trying to correct canvas size. Error was:", ee);
|
||||
this.canvas.width = this.conf.canvas.width;
|
||||
this.canvas.height = this.conf.canvas.height;
|
||||
|
||||
this.calculateCanvasZoom();
|
||||
// this.context = this.canvas.getContext("2d");
|
||||
var idata = new ImageData(this.imageBuffer, this.canvas.width, this.canvas.height);
|
||||
}
|
||||
this.putImageData(this.context, idata, 0, 0, 0, 0, this.canvas.width, this.canvas.height);
|
||||
}
|
||||
} catch(e) {
|
||||
console.log("[DebugCanvas.js::update] updating canvas failed.", e);
|
||||
}
|
||||
console.log("[DebugCanvas.js::update] update took", (performance.now() - start), "ms.");
|
||||
}
|
||||
|
||||
|
||||
putImageData(ctx, imageData, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight) {
|
||||
var data = imageData.data;
|
||||
var height = imageData.height;
|
||||
var width = imageData.width;
|
||||
dirtyX = dirtyX || 0;
|
||||
dirtyY = dirtyY || 0;
|
||||
dirtyWidth = dirtyWidth !== undefined? dirtyWidth: width;
|
||||
dirtyHeight = dirtyHeight !== undefined? dirtyHeight: height;
|
||||
var limitBottom = Math.min(dirtyHeight, height);
|
||||
var limitRight = Math.min(dirtyWidth, width);
|
||||
for (var y = dirtyY; y < limitBottom; y++) {
|
||||
for (var x = dirtyX; x < limitRight; x++) {
|
||||
var pos = y * width + x;
|
||||
ctx.fillStyle = 'rgba(' + data[pos*4+0]
|
||||
+ ',' + data[pos*4+1]
|
||||
+ ',' + data[pos*4+2]
|
||||
+ ',' + (data[pos*4+3]/255) + ')';
|
||||
ctx.fillRect(x + dx, y + dy, 1, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
DebugCanvasClasses = {
|
||||
VIOLATION: {color: '#ff0000', colorRgb: [255, 0, 0], text: 'violation (general)'},
|
||||
WARN: {color: '#d0d039', colorRgb: [208, 208, 57], text: 'lesser violation (general)'},
|
||||
GUARDLINE_BLACKBAR: {color: '#3333FF', colorRgb: [51, 51, 255], text: 'guardline/blackbar (expected value)'},
|
||||
GUARDLINE_IMAGE: {color: '#000088', colorRgb: [0, 0, 136], text: 'guardline/image (expected value)'},
|
||||
|
||||
EDGEDETECT_ONBLACK: {color: '#444444', colorRgb: [68, 68, 68], text: 'edge detect - perpendicular (to edge)'},
|
||||
EDGEDETECT_CANDIDATE: {color: '#FFFFFF', colorRgb: [255, 255, 255], text: 'edge detect - edge candidate'},
|
||||
EDGEDETECT_CANDIDATE_SECONDARY: {color: '#OOOOOO', colorRgb: [0, 0, 0], text: 'edge detect - edge candidate, but for when candidate is really bright'},
|
||||
EDGEDETECT_BLACKBAR: {color: '#07ac93', colorRgb: [7, 172, 147], text: 'edge detect - parallel, black test'},
|
||||
EDGEDETECT_IMAGE: {color: '#046c5c', colorRgb: [4, 108, 92], text: 'edge detect - parallel, image test'}
|
||||
}
|
@ -1,291 +0,0 @@
|
||||
import Debug from '../../conf/Debug';
|
||||
import Settings from '../Settings';
|
||||
import ArDetector from './ArDetector';
|
||||
|
||||
export type GuardLineBar = {
|
||||
top?: number;
|
||||
bottom?: number;
|
||||
}
|
||||
|
||||
export type ImageCheckResult = {
|
||||
success: boolean;
|
||||
}
|
||||
|
||||
class GuardLine {
|
||||
blackbar: GuardLineBar;
|
||||
imageBar: GuardLineBar;
|
||||
|
||||
aard: ArDetector;
|
||||
settings: Settings;
|
||||
|
||||
blackbarThreshold: number;
|
||||
imageThreshold: number;
|
||||
|
||||
|
||||
// ardConf — reference to ArDetector that has current GuardLine instance
|
||||
constructor (ardConf){
|
||||
this.blackbar = {top: undefined, bottom: undefined};
|
||||
this.imageBar = {top: undefined, bottom: undefined};
|
||||
|
||||
this.aard = ardConf;
|
||||
this.settings = ardConf.settings;
|
||||
}
|
||||
|
||||
reset() {
|
||||
this.blackbar = {top: undefined, bottom: undefined};
|
||||
this.imageBar = {top: undefined, bottom: undefined};
|
||||
}
|
||||
|
||||
setBlackbar(bbconf){
|
||||
let bbTop = bbconf.top - this.settings.active.arDetect.guardLine.edgeTolerancePx;
|
||||
let bbBottom = bbconf.bottom + this.settings.active.arDetect.guardLine.edgeTolerancePx;
|
||||
|
||||
// to odstrani vse neveljavne nastavitve in vse možnosti, ki niso smiselne
|
||||
// this removes any configs with invalid values or values that dont make sense
|
||||
if (bbTop < 0 || bbBottom >= this.aard.glCanvas.height ){
|
||||
throw {error: "INVALID_SETTINGS_IN_GUARDLINE", bbTop, bbBottom}
|
||||
}
|
||||
|
||||
this.blackbar = {
|
||||
top: bbTop,
|
||||
bottom: bbBottom
|
||||
}
|
||||
|
||||
this.imageBar = {
|
||||
top: bbconf.top + 1 + this.settings.active.arDetect.guardLine.edgeTolerancePx,
|
||||
bottom: bbconf.bottom - 1 - this.settings.active.arDetect.guardLine.edgeTolerancePx
|
||||
}
|
||||
}
|
||||
|
||||
check(image){
|
||||
// calculate once and save object-instance-wide
|
||||
this.blackbarThreshold = this.aard.blackLevel + this.settings.active.arDetect.blackbar.threshold;
|
||||
this.imageThreshold = this.blackbarThreshold + this.settings.active.arDetect.blackbar.imageThreshold;
|
||||
|
||||
// actual checks
|
||||
let guardLineResult = this.guardLineCheck(image);
|
||||
|
||||
// blackbar violation detected. We don't even need to check for presence of image
|
||||
// as aspect ratio just decreased
|
||||
if(! guardLineResult.success) {
|
||||
return {
|
||||
blackbarFail: true,
|
||||
offenders: guardLineResult.offenders,
|
||||
imageFail: false
|
||||
}
|
||||
}
|
||||
|
||||
let imageCheckResult = this.imageCheck(image);
|
||||
|
||||
return {
|
||||
blackbarFail: false,
|
||||
imageFail: ! imageCheckResult.success
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// don't use methods below this line outside this class
|
||||
guardLineCheck(image){
|
||||
// this test tests for whether we crop too aggressively
|
||||
|
||||
// if this test is passed, then aspect ratio probably didn't change from wider to narrower. However, further
|
||||
// checks are needed to determine whether aspect ratio got wider.
|
||||
// if this test fails, it returns a list of offending points.
|
||||
|
||||
// if the upper edge is null, then edge hasn't been detected before. This test is pointless, therefore it
|
||||
// should succeed by default. Also need to check bottom, for cases where only one edge is known
|
||||
|
||||
if (!this.blackbar.top || !this.blackbar.bottom) {
|
||||
return { success: true };
|
||||
}
|
||||
|
||||
let offset = (this.aard.glCanvas.width * this.settings.active.arDetect.guardLine.ignoreEdgeMargin) << 2;
|
||||
|
||||
let offenders = [];
|
||||
let offenderCount = -1; // doing it this way means first offender has offenderCount==0. Ez index.
|
||||
|
||||
// TODO: implement logo check.
|
||||
|
||||
// preglejmo obe vrstici
|
||||
// check both rows
|
||||
let edge_lower, edge_upper;
|
||||
|
||||
edge_upper = this.blackbar.top;
|
||||
edge_lower = this.blackbar.bottom;
|
||||
|
||||
let rowStart, rowEnd;
|
||||
|
||||
// <<<=======| checking upper row |========>>>
|
||||
|
||||
rowStart = ((edge_upper * this.aard.glCanvas.width) << 2) + offset;
|
||||
rowEnd = rowStart + ( this.aard.glCanvas.width << 2 ) - (offset * 2);
|
||||
|
||||
if (Debug.debugCanvas.enabled && Debug.debugCanvas.guardLine) {
|
||||
// offenderCount = this._gl_debugRowCheck(image, rowStart, rowEnd, offenders, offenderCount);
|
||||
} else {
|
||||
offenderCount = this._gl_rowCheck(image, rowStart, rowEnd, offenders, offenderCount);
|
||||
}
|
||||
// <<<=======| checking lower row |========>>>
|
||||
|
||||
rowStart = ((edge_lower * this.aard.glCanvas.width) << 2) + offset;
|
||||
rowEnd = rowStart + ( this.aard.glCanvas.width << 2 ) - (offset * 2);
|
||||
|
||||
if (Debug.debugCanvas.enabled && Debug.debugCanvas.guardLine) {
|
||||
// offenderCount = this._gl_debugRowCheck(image, rowStart, rowEnd, offenders, offenderCount);
|
||||
} else {
|
||||
offenderCount = this._gl_rowCheck(image, rowStart, rowEnd, offenders, offenderCount);
|
||||
}
|
||||
|
||||
// če nismo našli nobenih prekrškarjev, vrnemo uspeh. Drugače vrnemo seznam prekrškarjev
|
||||
// vrnemo tabelo, ki vsebuje sredinsko točko vsakega prekrškarja (x + width*0.5)
|
||||
//
|
||||
// if we haven't found any offenders, we return success. Else we return list of offenders
|
||||
// we return array of middle points of offenders (x + (width * 0.5) for every offender)
|
||||
|
||||
if(offenderCount == -1){
|
||||
return {success: true};
|
||||
}
|
||||
|
||||
let ret = new Array(offenders.length);
|
||||
for(let o in offenders){
|
||||
ret[o] = offenders[o].x + (offenders[o].width * 0.25);
|
||||
}
|
||||
|
||||
return {success: false, offenders: ret};
|
||||
}
|
||||
|
||||
imageCheck(image): ImageCheckResult {
|
||||
if(!this.imageBar.top || !this.imageBar.bottom)
|
||||
return { success: false };
|
||||
|
||||
let offset = (this.aard.glCanvas.width * this.settings.active.arDetect.guardLine.ignoreEdgeMargin) << 2;
|
||||
|
||||
// TODO: implement logo check.
|
||||
|
||||
let edge_upper = this.imageBar.top;
|
||||
let edge_lower = this.imageBar.bottom;
|
||||
|
||||
// how many non-black pixels we need to consider this check a success. We only need to detect enough pixels
|
||||
// on one edge (one of the edges can be black as long as both aren't)
|
||||
let successThreshold = (this.aard.glCanvas.width * this.settings.active.arDetect.guardLine.imageTestThreshold);
|
||||
let rowStart, rowEnd;
|
||||
|
||||
|
||||
// <<<=======| checking upper row |========>>>
|
||||
|
||||
rowStart = ((edge_upper * this.aard.glCanvas.width) << 2) + offset;
|
||||
rowEnd = rowStart + ( this.aard.glCanvas.width << 2 ) - (offset * 2);
|
||||
|
||||
let res = false;
|
||||
|
||||
if(Debug.debugCanvas.enabled && Debug.debugCanvas.guardLine){
|
||||
// res = this._ti_debugCheckRow(image, rowStart, rowEnd, successThreshold);
|
||||
} else {
|
||||
res = this._ti_checkRow(image, rowStart, rowEnd,successThreshold);
|
||||
}
|
||||
|
||||
if (res) {
|
||||
return {success: true};
|
||||
}
|
||||
|
||||
// <<<=======| checking lower row |========>>>
|
||||
|
||||
rowStart = ((edge_lower * this.aard.glCanvas.width) << 2) + offset;
|
||||
// rowEnd = rowStart + ( this.conf.canvas.width << 2 ) - (offset * 2);
|
||||
|
||||
|
||||
if(Debug.debugCanvas.enabled && Debug.debugCanvas.guardLine){
|
||||
// res = this._ti_debugCheckRow(image, rowStart, rowEnd, successThreshold);
|
||||
} else {
|
||||
res = this._ti_checkRow(image, rowStart, rowEnd,successThreshold);
|
||||
}
|
||||
|
||||
return {success: res};
|
||||
}
|
||||
|
||||
// pomožne metode
|
||||
// helper methods
|
||||
|
||||
|
||||
_gl_rowCheck(image, rowStart, rowEnd, offenders, offenderCount){
|
||||
let firstOffender = -1;
|
||||
for(let i = rowStart; i < rowEnd; i+=4){
|
||||
|
||||
// we track sections that go over what's supposed to be a black line, so we can suggest more
|
||||
// columns to sample
|
||||
if(image[i] > this.blackbarThreshold || image[i+1] > this.blackbarThreshold || image[i+2] > this.blackbarThreshold){
|
||||
if(firstOffender < 0){
|
||||
firstOffender = (i - rowStart) >> 2;
|
||||
offenderCount++;
|
||||
offenders.push({x: firstOffender, width: 1});
|
||||
}
|
||||
else{
|
||||
offenders[offenderCount].width++
|
||||
}
|
||||
}
|
||||
else{
|
||||
// is that a black pixel again? Let's reset the 'first offender'
|
||||
firstOffender = -1;
|
||||
}
|
||||
}
|
||||
|
||||
return offenderCount;
|
||||
}
|
||||
|
||||
// _gl_debugRowCheck(image, rowStart, rowEnd, offenders, offenderCount){
|
||||
// let firstOffender = -1;
|
||||
// for(let i = rowStart; i < rowEnd; i+=4){
|
||||
|
||||
// // we track sections that go over what's supposed to be a black line, so we can suggest more
|
||||
// // columns to sample
|
||||
// if(image[i] > this.blackbarThreshold || image[i+1] > this.blackbarThreshold || image[i+2] > this.blackbarThreshold){
|
||||
// this.aard.debugCanvas.trace(i, DebugCanvasClasses.VIOLATION);
|
||||
// if(firstOffender < 0){
|
||||
// firstOffender = (i - rowStart) >> 2;
|
||||
// offenderCount++;
|
||||
// offenders.push({x: firstOffender, width: 1});
|
||||
// }
|
||||
// else{
|
||||
// offenders[offenderCount].width++
|
||||
// }
|
||||
// }
|
||||
// else{
|
||||
// this.aard.debugCanvas.trace(i, DebugCanvasClasses.GUARDLINE_BLACKBAR);
|
||||
// // is that a black pixel again? Let's reset the 'first offender'
|
||||
// firstOffender = -1;
|
||||
// }
|
||||
|
||||
// }
|
||||
|
||||
// return offenderCount;
|
||||
// }
|
||||
|
||||
_ti_checkRow(image, rowStart, rowEnd, successThreshold): boolean {
|
||||
for(let i = rowStart; i < rowEnd; i+=4){
|
||||
if(image[i] > this.imageThreshold || image[i+1] > this.imageThreshold || image[i+2] > this.imageThreshold){
|
||||
if(successThreshold --<= 0){
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// _ti_debugCheckRow(image, rowStart, rowEnd, successThreshold) {
|
||||
// for(let i = rowStart; i < rowEnd; i+=4){
|
||||
// if(image[i] > this.imageThreshold || image[i+1] > this.imageThreshold || image[i+2] > this.imageThreshold){
|
||||
// this.aard.debugCanvas.trace(i, DebugCanvasClasses.GUARDLINE_IMAGE);
|
||||
// if(successThreshold --<= 0){
|
||||
// return true;
|
||||
// }
|
||||
// } else {
|
||||
// this.aard.debugCanvas.trace(i, DebugCanvasClasses.WARN);
|
||||
// }
|
||||
// }
|
||||
|
||||
// return false;
|
||||
// }
|
||||
}
|
||||
|
||||
export default GuardLine;
|
File diff suppressed because it is too large
Load Diff
@ -1,6 +0,0 @@
|
||||
enum EdgeDetectPrimaryDirection {
|
||||
Vertical = 0,
|
||||
Horizontal = 1
|
||||
};
|
||||
|
||||
export default EdgeDetectPrimaryDirection;
|
@ -1,6 +0,0 @@
|
||||
enum EdgeDetectQuality {
|
||||
Fast = 0,
|
||||
Improved = 1
|
||||
};
|
||||
|
||||
export default EdgeDetectQuality;
|
@ -1,6 +0,0 @@
|
||||
enum EdgeStatus {
|
||||
ARUnknown = 0,
|
||||
ARKnown = 1,
|
||||
};
|
||||
|
||||
export default EdgeStatus;
|
Loading…
Reference in New Issue
Block a user