Warning: session_start(): open(/var/lib/php/sessions/sess_iue4gbsrrafdm0nbhj35lo1870, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
!7
static double spaceWidth = 8;
// typical line dists: 6, 21
static float lineDist1 = 6, lineDist2 = 22;
static float lineHeight = lineDist2-lineDist1;
p-type {
RGBImage img = rgbShootScreenHidingConsole(;
Rect r = ocr_findSnippetSource(img;
if (r == null) {
print("No snippet source found.";
ret;
}
print("Scanning: " + r;
BWImage bwImage = new BWImage(img.clip(r;
L clips = autoSegment(bwImage;
L r2 = ocr_mergeOverlappingY(clips;
//L r2 = ocr_mergeOverlappingY_plusPercent(clips, 7;
r2 = sortByField(r2, "y");
/*for (Rect rx : r2) {
print("h=" + rx.h + ". " + struct(bwImageRowBrightnesses(bwImage.clip(rx;
}*/
// Split rows
for i over r2: {
Rect rx = r2.get(i;
BWImage cImg = bwImage.clip(rx);
int h = rx.h/2;
//float[] rows = bwImageRowBrightnesses(bwImage.clip(rx));
//float b = rows[l(rows)/2];
float b = (float) cImg.clip(0, h, rx.w, 1).averageBrightness();
if (b > 0.93f) {
Rect upper = new Rect(rx.x, rx.y, rx.w, h);
Rect lower = new Rect(rx.x, rx.y+h, rx.w, rx.h-h);
r2.set(i, lower);
r2.add(i++, upper);
}
}
// Merge rows
for (int i = 0; i < l(r2)-1; i++) {
Rect a = r2.get(i), b = r2.get(i+1);
if (b.h < a.h/2 && (b.y-a.y2()) < 2) { // fix the dangling underscore
r2.set(i, mergeRects(a, b));
r2.remove(i+1);
}
}
r2 = bwAutoCropClips(bwImage, r2);
showImageWithSelections(bwImage.getBufferedImage(), r2;
focusConsole();
growToTop(consoleFrame());
enableFullSearchInSimpleRecognizer(filledSimpleRecognizer_cached());
L lines = ocr_recognizeTextClips(bwImage, r2;
lines = map(f ocr_unescape, lines);
addIndents(lines, r2);
addEmptyRows(lines, r2);
printNumbered_flushed(lines;
}
svoid addIndents(L lines, L rects) {
int n = l(lines);
assertEquals(n, l(rects));
int leftBorder = toInt(collectMinInt(rects, "x"));
for i to n: {
int dist = rects.get(i).x-leftBorder;
print("dist=" + dist);
int spaces = iround(dist/spaceWidth;
if (spaces > 0)
lines.set(i, rep(spaces, ' ') + lines.get(i));
}
}
svoid addEmptyRows(L lines, L rects) {
int n = l(lines);
assertEquals(n, l(rects));
for (int i = 0; i+1 < n; i++) {
Rect a = rects.get(i), b = rects.get(i+1);
if (a != null && b != null) {
int dist = b.y-a.y2();
float frows = (dist-lineDist1)/lineHeight;
int rows = iround(frows);
print("dist=" + dist + ", rows=" + frows);
if (rows > 0) {
lines.addAll(i+1, rep("", rows));
rects.addAll(i+1, rep((Rect) null, rows));
i += rows-1;
}
}
}
}