Bagaimana saya bisa menggunakan tesseract dan opencv untuk mengekstrak teks dari kamera

Saya menggunakan tesseract 3.02 dan opencv agar tesseract mengenali teks dari kamera saya secara realtime.

Namun dampaknya cukup buruk. Hasil tidak terbaca dan tidak dapat menampilkan gambar dengan lancar. Saya pikir itu masalah kode saya.

Bisakah seseorang memberi saya saran tentang cara memodifikasinya?

Terima kasih banyak!

#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;
}

person user1866046    schedule 26.12.2012    source sumber


Jawaban (1)


Tesseract dirancang untuk memproses buku yang dipindai. Ini beroperasi pada halaman putih di mana hanya ada teks hitam, terlihat jelas dengan distorsi minimal. Gambar sebagian besar berwarna Hitam Putih. Gambar Anda berada pada tingkat abu-abu sehingga kinerja Tesseract akan sangat buruk. Ini bukan masalah kode Anda tetapi masalah Tesseract. Jika Anda mengarahkan kamera ke sebuah buku, Anda akan bisa mendapatkan teksnya (dengan asumsi gambar terfokus) tetapi jika Anda ingin membaca teks umum (seperti rambu jalan, logo di kaus seseorang, maka tidak ada cara untuk melakukannya) .Maaf mengecewakanmu.

Namun, jika Anda ingin mengenali teks tertentu, seperti nomor kartu kredit atau rambu jalan, Anda bisa melakukannya.

  1. Mulailah dengan mengambil banyak gambar teks Anda.
  2. Lakukan sedikit pra-pemrosesan pada gambar, ubah menjadi BW,
  3. melatih Tesseract dengan banyak contoh.

Dan kemudian itu akan dapat menyelesaikan tugas Anda.

person DanielHsH    schedule 27.12.2012
comment
Terima kasih atas informasi Anda. Mengenali teks dari buku juga tidak masalah bagi saya. Tapi saya tidak hanya menghadapi masalah akurasi. Masalah lainnya adalah tidak dapat menampilkan gambar dengan lancar. Penundaan ini sangat serius. Saya kira itu mungkin karena saya meng-ocr setiap frame. Saya ingin tahu cara menstabilkannya? Haruskah saya mengambil sesuatu seperti tangkapan layar atau apa? Saya hanya ingin menampilkan teks yang ditunjuk kamera saya. Jadi saya kira kode saya masih memiliki beberapa masalah - person user1866046; 27.12.2012
comment
Saya mengerti apa yang Anda katakan. Kamu butuh - person DanielHsH; 27.12.2012
comment
Saya mengerti apa yang Anda katakan. Anda perlu menjalankan algoritma stabilisasi gambar (mencocokkan gambar secara berurutan). Dari tesseract Anda bisa mendapatkan kotak (lokasi setiap huruf pada gambar). Kemudian Anda menjalankannya sekali dalam 1[detik], menyimpan kotak-kotak itu dan menggambarnya sesuai dengan pergerakan kamera - person DanielHsH; 27.12.2012
comment
Saya sudah mencobanya tetapi tidak menyelesaikan masalah pengenalan. Saya mengarahkan kamera ke sebuah buku tetapi masih tidak dapat dibaca. Saya akan memposting ulang kode saya. Bisakah Anda membantu saya memeriksa apakah ada yang salah? Itu akan sangat membantu. Terima kasih banyak! - person user1866046; 03.01.2013