Tesseract OCR (C++) 无法评估输出字符串
Tesseract OCR (C++) Cannot Evaluate Output String
我正在尝试从 OpenCV 矩阵 window 中提取输出字符串并对其进行评估,但它似乎 return 类似于“someString\n”而不是“someString”。这使得很难比较已知有 (x) 个空格的数量。
我试过了:
创建一个省略空格的字符数组(我知道我只评估 5 个索引)
std::string redef;
char charArr[100] = {NULL};
strcpy_s(charArr, str.c_str());
for (int i = 0; i < 5; i++)
{
if (charArr[i] != ' ')
{
redef += charArr[i];
}
}
std::cout << "analyseAction ran:" << redef << "white-space?";
但是字符串 return 类似于
analyseAction ran:redefString
white-space?
main函数中的相关代码运行:
api->Recognize(0);
outText = api->GetUTF8Text();
analyseAction(outText);
波纹管,请注意运行 else 语句,因为当 long 在 window.
中直观显示时,redef 不等于“long”
void analyseAction(std::string str)
{
std::string redef;
char charArr[100] = {NULL};
strcpy_s(charArr, str.c_str());
for (int i = 0; i < 5; i++)
{
if (charArr[i] != ' ')
{
redef += charArr[i];
}
}
std::cout << "analyseAction ran:" << redef << "white-space?";
//alot of missing code, trying to show what is relevant
if (redef == "long") //check if it has white space after long, seems like it new line's
{
//NOTE FOR FUTURE: Stop being lazy and make this a function of its own
//BUY
std::cout << "Long ran";
for (int i = 0; i < a; i++) //no comma with first line so 0 element
{
context += inData[i];
}
x = std::stoi(context);
for (int i = a+1; i < a1; i++)
{
context += inData[i];
}
y = std::stoi(context);
simClick(x,y);
//BUY CONFIRM
for (int i = a1+1; i < b; i++) //starting from pipeline??
{
context += inData[i];
}
x = std::stoi(context);
for (int i = b+1; i < b1; i++) //starting with comma? +1 to fix
{
context += inData[i];
}
y = std::stoi(context);
simClick(x, y);
}
else
{
std::cout << "long does not match";
}
}
我很困惑,为什么字符串出现换行?我怎样才能成功评估输出?我是 C++ 的菜鸟,所以非常感谢任何帮助。
至于为什么返回一个字符串和一个换行符,我无法回答。但是我可以为您提供一个替代系统来完成您想要完成的任务。删除 analyseAction 函数中的第一个 for 循环和 if 语句中的“长”传递... if(charArr[0] == 'l') {//do stuff}
如果您正在评估许多以“l”开头的单词,这确实有一个限制,在这种情况下评估单词的前两个或三个字母,只要它们不少于 2 或 3 个字母的单词。 PS。这是在手机上写的。
我正在尝试从 OpenCV 矩阵 window 中提取输出字符串并对其进行评估,但它似乎 return 类似于“someString\n”而不是“someString”。这使得很难比较已知有 (x) 个空格的数量。
我试过了:
创建一个省略空格的字符数组(我知道我只评估 5 个索引)
std::string redef;
char charArr[100] = {NULL};
strcpy_s(charArr, str.c_str());
for (int i = 0; i < 5; i++)
{
if (charArr[i] != ' ')
{
redef += charArr[i];
}
}
std::cout << "analyseAction ran:" << redef << "white-space?";
但是字符串 return 类似于
analyseAction ran:redefString
white-space?
main函数中的相关代码运行:
api->Recognize(0);
outText = api->GetUTF8Text();
analyseAction(outText);
波纹管,请注意运行 else 语句,因为当 long 在 window.
中直观显示时,redef 不等于“long”void analyseAction(std::string str)
{
std::string redef;
char charArr[100] = {NULL};
strcpy_s(charArr, str.c_str());
for (int i = 0; i < 5; i++)
{
if (charArr[i] != ' ')
{
redef += charArr[i];
}
}
std::cout << "analyseAction ran:" << redef << "white-space?";
//alot of missing code, trying to show what is relevant
if (redef == "long") //check if it has white space after long, seems like it new line's
{
//NOTE FOR FUTURE: Stop being lazy and make this a function of its own
//BUY
std::cout << "Long ran";
for (int i = 0; i < a; i++) //no comma with first line so 0 element
{
context += inData[i];
}
x = std::stoi(context);
for (int i = a+1; i < a1; i++)
{
context += inData[i];
}
y = std::stoi(context);
simClick(x,y);
//BUY CONFIRM
for (int i = a1+1; i < b; i++) //starting from pipeline??
{
context += inData[i];
}
x = std::stoi(context);
for (int i = b+1; i < b1; i++) //starting with comma? +1 to fix
{
context += inData[i];
}
y = std::stoi(context);
simClick(x, y);
}
else
{
std::cout << "long does not match";
}
}
我很困惑,为什么字符串出现换行?我怎样才能成功评估输出?我是 C++ 的菜鸟,所以非常感谢任何帮助。
至于为什么返回一个字符串和一个换行符,我无法回答。但是我可以为您提供一个替代系统来完成您想要完成的任务。删除 analyseAction 函数中的第一个 for 循环和 if 语句中的“长”传递... if(charArr[0] == 'l') {//do stuff}
如果您正在评估许多以“l”开头的单词,这确实有一个限制,在这种情况下评估单词的前两个或三个字母,只要它们不少于 2 或 3 个字母的单词。 PS。这是在手机上写的。