Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Tlya
10 / 10 / 10
Регистрация: 20.11.2015
Сообщений: 258
Завершенные тесты: 4
#1

Tesseract: лишние символы (шум) при записи в файл - C++

16.05.2017, 04:06. Просмотров 203. Ответов 3
Метки нет (Все метки)

Господа, помогите кто знает.
http://www.cyberforum.ru/cpp-beginners/thread1038792.html
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <fstream>
#include <stdio.h>
#include <allheaders.h> //lept
#include <baseapi.h> //tess
 
using namespace std;
using namespace tesseract;
 
int main() {
    setlocale(LC_ALL, "Russian");
    TessBaseAPI *myOCR = new TessBaseAPI();
        if (myOCR->Init(NULL, "eng")) {
            fprintf(stderr, "Невозможна инициализация тес-а.\n");
            exit(1);
        }
        const int razmer=50;
        Pix *pix = pixRead("te.jpg");
        myOCR->SetImage(pix);
        char outText[razmer];
        lstrcpy(outText, myOCR->GetUTF8Text());
        printf("ПОЛУЧЕННЫЙ ТЕКСТ:\n\n");
        printf(outText);
        //Сохраняем
        FILE *file;
        if ((file = fopen("folders.txt", "w")) == NULL) {
            printf("Невозможно открыть файл\n");
            exit(1);
        };
        fwrite(outText, sizeof(char), razmer, file);
        fclose(file);
    system("pause");
}
При выводе на консоль, всё чётко, но если пытаюсь закинуть данные в файл (или же перевести в string) добавляется всякий шлак, как побороть?
0
Миниатюры
Tesseract: лишние символы (шум) при записи в файл  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.05.2017, 04:06
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Tesseract: лишние символы (шум) при записи в файл (C++):

Непонятные символы при записи в файл
Доброго времени суток. Вот снова прошу о помощи гуру программирования. Код еще...

Ненужные символы при записи в файл
Добрый день! Столкнулся с такой проблемой: создаю в программе новый файл и...

Лишние символы в конце строки, записанной в файл
Записываю текст в бинарный файл, но в файле нет каракуль а этот же текст. И...

Лишние символы при чтении из файла
Здравствуйте! Есть текстовый файл следующего содержания: DROP FUNCTION IF...

Лишние символы при выводе строк
При создании игрового поля для тетриса (вывод строк, в соответствии с заданным...

3
hoggy
Заблокирован
16.05.2017, 04:48 #2
Цитата Сообщение от Tlya Посмотреть сообщение
как побороть?
записывать пока не повстречается '\0'
а не строго 50 символов.
0
Tlya
10 / 10 / 10
Регистрация: 20.11.2015
Сообщений: 258
Завершенные тесты: 4
16.05.2017, 17:50  [ТС] #3
hoggy, не подскажите как оформить? а то я немного нуб

Добавлено через 43 минуты
Попробовал так, не очень помогает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <iostream>
#include <string>
#include <allheaders.h> //lept
#include <baseapi.h> //tess
 
using namespace tesseract;
using namespace std;
 
string slovo = "";
string vStroku(char simvol) {
        if ((simvol <= '9') && (simvol >= '0'))
            slovo += simvol;
        if (simvol == ' ')
            slovo += " ";
    return slovo;
}
int main() {
    setlocale(LC_ALL, "Russian");
        TessBaseAPI *myOCR = new TessBaseAPI();
        if (myOCR->Init(NULL, "eng")) {
            fprintf(stderr, "Невозможна инициализация тес-а.\n");
            exit(1);
        }
        Pix *pix = pixRead("te.jpg");
        myOCR->SetImage(pix);
        char outText[50];
        lstrcpy(outText, myOCR->GetUTF8Text());
        printf("ПОЛУЧЕННЫЙ ТЕКСТ:\n\n");
        //В ОДНО ДЛИННОЕ СЛОВО
        for (int i = 0; i < sizeof(outText); i++) {
            if (outText[i] != '\0')
                vStroku(outText[i]);
            else
                break;
        }
        //В МАССИВ СЛОВ
        vector<string> arrayS;
        istringstream is(slovo);
        string s;
        while (getline(is, s, ' '))
            arrayS.push_back(s);
        for (int kk = 0; kk < arrayS.size(); kk++)
            if (arrayS[kk].length()>0)
                cout << arrayS[kk] << "|" << endl;
        cout << "_________________________" << endl;
//Сохраняем
        FILE *file;
        if ((file = fopen("folders.txt", "w")) == NULL) {
            printf("Невозможно открыть файл\n");
            exit(1);
        };
        fwrite(outText, sizeof(string), arrayS.size(), file);
        fclose(file);
    system("pause");
}
0
Tlya
10 / 10 / 10
Регистрация: 20.11.2015
Сообщений: 258
Завершенные тесты: 4
18.05.2017, 05:40  [ТС] #4
Можете меня поздравить, получилось Все шумы убраны, только голые цифры!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <fstream>
#include <allheaders.h> //lept
#include <baseapi.h> //tess
#include <opencv2\highgui\highgui.hpp>
 
using namespace tesseract;
using namespace std;
 
int main() {
    setlocale(LC_ALL, "Russian");
        TessBaseAPI *myOCR = new TessBaseAPI();
        myOCR->SetPageSegMode(tesseract::PSM_SINGLE_CHAR);
        myOCR->SetVariable("tessedit_char_whitelist", "0123456789");
        if (myOCR->Init(NULL, "eng")) {
            fprintf(stderr, "Невозможна инициализация тес-а.\n");
            exit(1);}
        Pix *pix = pixRead("te.jpg");
        myOCR->SetImage(pix);
        char outText[50];
        lstrcpy(outText, myOCR->GetUTF8Text());
        printf("ПОЛУЧЕННЫЙ ТЕКСТ:\n\n");
        printf(outText);
        cout << "_________________________" << endl;
        string slovo_cifra = "";
        string slovo = (const char*)outText;
        
        for (int i = 0; i < slovo.size(); i++)
        {
            if (isdigit(slovo[i]))
                slovo_cifra+=slovo[i];
            if (slovo[i]==' ')
                slovo_cifra += " ";
            if (slovo[i] == '\0')
                slovo_cifra += " ";
            if (slovo[i] == '\n')
                slovo_cifra += " ";
        }
        cout << slovo_cifra << endl;
        cout << "_________________________" << endl;
        //В МАССИВ СЛОВ
        vector<string> arrayS;
        // split
        istringstream is(slovo_cifra);
        string s;
        while (getline(is, s, ' '))
            arrayS.push_back(s);
        // print
        for (int kk = 0; kk < arrayS.size(); kk++)
            if (arrayS[kk].length()>0)
                cout << arrayS[kk] << "|" << endl;
        cout << "_________________________" << endl;
        //Сохраняем
        ofstream outfile("folders.txt");
        for (int ar = 0; ar < arrayS.size(); ar++) {
            outfile << arrayS[ar]<<endl;
        }
    system("pause");
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.05.2017, 05:40
Привет! Вот еще темы с решениями:

Добавляются лишние символы при выводе
Программа просто должна из строки букв и цифр (или только цифр) вывести цифры в...

Лишние символы при считывании файла
Считываю структуру с файла и вывожу в консоль, при выводе появляются лишние...

При выводе на экран появляются лишние символы
#include &lt;iostream&gt; // ??? printf #include &lt;string.h&gt; // ??? strtok bool...

Лишние символы при копирование текстового файла
не могу понять почему при копировании текстового файла у меня вставляются в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru