我想使用tesseract进行序列号识别,我只想识别单个字符,没有单词,没有字典.因此,我想使用已经训练过的tesseract字体类型之一来获得更好的识别结果.
这些是训练有素的Tesseract字体类型:
Andale_Mono.ttf
Arial_Black.ttf
Arial_Bold.ttf
Arial.ttf
Comic_Sans_MS_Bold.ttf
Comic_Sans_MS.ttf
Courier_New_Bold.ttf
Courier_New.ttf
Georgia_Bold.ttf
Georgia.ttf
Gottf
Impact.ttf
Times_New_Roman_Bold.ttf
Times_New_Roman.ttf
Trebuchet_MS_Bold.ttf
Trebuchet_MS.ttf
Verdana_Bold.ttf
Verdana.ttf
Run Code Online (Sandbox Code Playgroud)
由于训练的字体类型也具有不同的字体设计样式,因此在区分例如"Z"和"2"字符方面存在问题.Times New Roman的设计更加圆润,而Arial只有更多的直线.

我的经验是,由于其他字体设计的相似性改变,tesseract在区分"Z"和"2"方面存在问题.
因此,如果只使用一种字体类型(例如Arial)用于使用tesseract进行字符识别,我认为我可以获得更好的识别结果.
题:
是否有可能在tesseract中指定字体类型?
类似但较旧的主题(2012年10月)链接
我正在使用tesseract来识别序列号.这是可接受的常见问题,如错误识别零和"O",6和5,或M和H存在.除此之外,这个tesseract为识别的单词添加了空格,图像中没有空格.以下图像被识别为"HI 3H".

此图片导致"FBKHJ 1R1"

因此,tesseract增加了一个空间,尽管图像中没有真正的空间.是否有可能参数化tesseract的间距行为?
编辑
对不起,忘了添加,我也有包含空格的序列号.因此,我无法删除已识别序列号中的所有空格.
例如,在将tesseract识别为J4 F1583BB之后,包含序列号中包含空格的以下图像.除了对字符的识别是错误的,用该图像识别空间是正确的.

我的tesseract的实际参数是:
tesseract::TessBaseAPI tess;
tess.Init(NULL, "eng", tesseract::OEM_TESSERACT_ONLY);
tess.SetPageSegMode(tesseract::PSM_SINGLE_BLOCK);
tess.SetVariable("tessedit_char_whitelist",
"ABCDEFGHIJKLMNOPQRSTUVWXYZ012345789");
char* out = tess.GetUTF8Text();
string text = string(out);
Run Code Online (Sandbox Code Playgroud)
编辑
从现有答案中可以看出,"J"和"I"之间的空间似乎比其他字符之间的空间要小得多.我选择的字体类型是Monotype字体.原因是我想,这有助于确定字符识别.这种Monospace字体类型的缺点是每个字符具有相同的宽度,即内核(字符之间的空格)不同.请参阅以下源Source的示例图像

您认为哪种字体类型会获得更好的识别效果?
我想使用 OpenCV 将瓶子上的弯曲矩形标签转换为标准化形式。
我知道:
我的示例图片:
我已经找到了一些类似的主题,例如果酱或瓶子标签的转变。jam example但这不是在 OpenCV 中完成的。果酱标签的示例图像:
如何从弯曲图像中获得最佳变换后的矩形图像?和/或者我必须在 OpenCV 中使用哪些函数?
恢复我的 Whatsapp 备份后,我遇到了问题,图像创建日期设置为当前日期。这导致了 android 库的混乱。
我想将OpenSuse用作使用VirtualBox在Windows上运行的虚拟机.此外,我想使用两台机器之间的"共享文件夹"轻松共享数据.虽然我已经在VirtualBox中找到了"共享文件夹"选项,但我还没有找出该文件夹应该出现在哪里?或者还有其他事情要做,以启用"共享文件夹"?
我正在计算C++中图像内多个平方区域的平均值.因此,我在图像上移动一个平方区域,并使用openCV"mean"函数计算平均值,但用std替换它.平均计算(见下文),这意外地更快.然而,在Android设备上需要大约8ms,因为平均计算大约需要400次(每次平均计算需要~0.025ms)
uchar rectSize = 10;
Rect roi(0,0,rectSize, rectSize);
int pxNumber = rectSize * rectSize;
uchar value;
//Shifting the region to the bottom
for(uchar y=0; y<NumberOfRectangles_Y; y++)
{
p = outBitMat.ptr<uchar>(y);
roi.x = rectSize;
//Shifting the region to the right
for(uchar x=0; x<NumberOfRectangles_X; x++, ++p)
{
meanCalc(normalized(roi),rectSize, pxNumber, value);
roi.x += rectSize;
}
roi.y += rectSize;
}
void meanCalc(const cv::Mat& normalized, uchar& rectSize, int& pxNumber, uchar& value)
{
for(uchar y=0; y < rectSize; y++)
{
p = normalized.ptr<uchar>(y);
for(uchar x=0; x …Run Code Online (Sandbox Code Playgroud) c++ ×3
opencv ×3
ocr ×2
tesseract ×2
exif ×1
fonts ×1
homography ×1
mean ×1
opensuse ×1
performance ×1
python ×1
spaces ×1
virtualbox ×1
whatsapp ×1