aboutsummaryrefslogtreecommitdiff
path: root/cpp/libchelleport.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/libchelleport.cpp')
-rw-r--r--cpp/libchelleport.cpp41
1 files changed, 39 insertions, 2 deletions
diff --git a/cpp/libchelleport.cpp b/cpp/libchelleport.cpp
index 4ec3599..5653068 100644
--- a/cpp/libchelleport.cpp
+++ b/cpp/libchelleport.cpp
@@ -19,6 +19,8 @@ OCRMatch *findWordCoordinates(const char *image_path, int *size) {
// for (const auto &match : matches)
// showMatch(match);
+ printf("Count: %ld\n", matches.size());
+
*size = matches.size();
return ptr;
}
@@ -38,12 +40,16 @@ std::vector<OCRMatch> extractTextCoordinates(const char *imagePath) {
return results;
}
+ preprocessImage(&image);
+
+ // printf("imagePath: %s\n", imagePath);
+ // pixWrite(imagePath, image, IFF_JFIF_JPEG);
+
tesseract->SetImage(image);
tesseract->Recognize(0);
tesseract::ResultIterator *iterator = tesseract->GetIterator();
auto level = RESULT_ITER_MODE;
- int x1, y1, x2, y2;
if (iterator != 0) {
do {
@@ -52,8 +58,11 @@ std::vector<OCRMatch> extractTextCoordinates(const char *imagePath) {
if (conf > CONFIDENCE_THRESHOLD && word != nullptr &&
strlen(word) >= MIN_CHARACTER_COUNT) {
+ int x1, y1, x2, y2;
iterator->BoundingBox(level, &x1, &y1, &x2, &y2);
- results.push_back(OCRMatch{x1, y1, x2, y2, word});
+ results.push_back(
+ OCRMatch{(int)(x1 / scaleFactor), (int)(y1 / scaleFactor),
+ (int)(x2 / scaleFactor), (int)(y2 / scaleFactor), word});
}
} while (iterator->Next(level));
}
@@ -66,6 +75,34 @@ std::vector<OCRMatch> extractTextCoordinates(const char *imagePath) {
return results;
}
+void preprocessImage(Pix **image) {
+ Pix *temp;
+
+ // Scale
+ if (scaleFactor != 1) {
+ temp = pixScale(*image, scaleFactor, scaleFactor);
+ pixDestroy(image);
+ *image = temp;
+ }
+
+ // Grayscale
+ if (pixGetDepth(*image) > 8) {
+ temp = pixConvertRGBToGray(*image, grayscaleWeightRed, grayscaleWeightGreen,
+ grayscaleWeightBlue);
+ pixDestroy(image);
+ *image = temp;
+ }
+
+ // Contrast
+ pixContrastTRC(*image, *image, contrast);
+
+ // Sharpness
+ // temp = pixUnsharpMaskingGrayFast(*image, 1, sharpness, 1);
+ temp = pixUnsharpMasking(*image, 1, sharpness);
+ pixDestroy(image);
+ *image = temp;
+}
+
void showMatch(const OCRMatch &match) {
std::cout << "Text: " << match.text << "; Position: (" << match.startX << ","
<< match.startY << ") -> (" << match.endX << "," << match.endY