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