0
我正在使用tesseract 3.02和opencv让tesseract实时识别来自相机的文本。如何使用tesseract和opencv从相机中提取文本
但效果非常糟糕。结果不可读,无法流利地显示图像。我认为这是我的代码问题。
有人能告诉我如何修改它吗?
非常感谢!
#include "stdafx.h"
#include <string>
#include <opencv2/opencv.hpp>
#include <time.h>
using namespace std;
using namespace cv;
int main() {
// [1]
tesseract::TessBaseAPI *myOCR =
new tesseract::TessBaseAPI();
// [2]
printf("Tesseract-ocr version: %s\n",
myOCR->Version());
printf("Leptonica version: %s\n",
getLeptonicaVersion());
// [3]
if (myOCR->Init(NULL, "eng")) {
fprintf(stderr, "Could not initialize tesseract.\n");
exit(1);
}
//声明IplImage指针
IplImage* pFrame = NULL;
//获取摄像头
CvCapture* pCapture = cvCreateCameraCapture(-1);
//创建窗口
cvNamedWindow("video", 1);
//显示视屏
time_t last_time = time(NULL);
while(1)
{
pFrame=cvQueryFrame(pCapture);
if(!pFrame) break;
cvShowImage("video",pFrame);
char c=cvWaitKey(33);
if(c==27)break;
time_t this_time = time(NULL);
if(this_time != last_time)
{
last_time = this_time;
myOCR->SetRectangle(0,0,pFrame->width,pFrame->height);
myOCR->SetImage((uchar*)pFrame->imageData,pFrame->width,pFrame- >height,pFrame->depth/8,pFrame->width*(pFrame->depth/8));
myOCR->Recognize(NULL);
const char* out = myOCR->GetUTF8Text();
printf("%s\n",out);
}
}
cvReleaseCapture(&pCapture);
cvDestroyWindow("video");
cv::waitKey(-1);
return 0;
}
谢谢您的信息。认识书中的文字对我来说也是可以的。但我不仅面临准确性的问题。另一个问题是它无法顺利显示图像。延误非常严重。我想这可能是因为我碰到每一帧。我想知道如何稳定它?我应该采取像截图或什么?我只是想让它显示我的相机指向的文字。所以我想我的代码仍然有一些问题 – user1866046
我明白你说什么。你需要 – DanielHsH
我明白你的意思。您需要运行图像稳定算法(匹配连续图像)。从tesseract中,您可以获得方框(图像上每个字母的位置)。然后你运行它在1 [秒]一次,存储的方块,并根据相机移动绘制他们 – DanielHsH