Linux我用 LinuxOpenCv

在Linux下搭建Qt+Opencv+Tesseract环境

2019-05-19  本文已影响6人  Ice_spring

Qt下载与安装

Qt官网下载链接
进入后点击最新的Linux版本

Qt下载
选择Linux版本下载即可,下载后双击即可直接安装
Qt下载
这一步点击skip即可,社区版本足够我们使用了
Qt安装
随后等待安装成功即可
安装后为使用方便,为QtCreeater创建桌面快捷方式
QtCreater
安装完成后打开Qt新建项目测试安装是否成功
第一次使用控制台可能出现的报错cannot find -lGL,这是因为缺少相关依赖,解决办法如下:
打开终端,输入命令:
sudo apt-get install libgl1-mesa-dev

之后就可以正确运行了

Opencv库下载与安装

我们从GitHub下载
Opencv下载链接
下载后解压,解压后的文件夹名为:

OpenCV库
为了安装opencv还需要一些必要的软件或包,如cmake工具等,用命令安装如下:
sudo apt-get install cmake
sudo apt-get install build-essential cmake libgtk2.0-dev pkg-config python-dev python-numpy libavcodec-dev libavformat-dev libswscale-dev  

现在我们可以开始编译opencv了,进入opencv-master文件夹

cd opencv-master

新建个release文件夹(这里取什么名字都可以)用于存放编译后的文件:

mkdir release

然后进入release文件夹,这时可以执行cmake了,usr/local是lib文件的存放目录

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..  

上步完成之后输入命令

sudo make

这一步可能会出现一些不可预知的错误,因为计算机环境之类的原因,比如笔者安装了anaconda,于是安装opencv时出现了诸多如下错误

[opencv error: undefined reference to 'png_set_expand_gray_1_2_4_to_8@PNG16_0']

解决办法:

cd /usr/lib/x86_64-linux-gnu
sudo ln -s ~home/icespring/anaconda3/lib/libpng16.so.16 libpng16.so.16
sudo ldconfig

这一步一般错误不一,具体情况要看错误而定。其它少什么一般就用命令,其中路径和文件和lib相关。
sudo ln -s ~home/icespring/anaconda3/lib/xxx
编译完成后接着输入命令开始安装

sudo make install

等待片刻,即安装完成了,可以在usr/local/lib下看到编译好的opencv函数库:


opencv函数库

还不算完,最后还得配置好opencv的环境变量:

sudo gedit /etc/ld.so.conf.d/opencv.conf

打开该文件后在最后加上/usr/local/lib,保存退出后执行:sudo ldconfig生效配置。
接着配置环境变量:

sudo gedit /etc/bash.bashrc

去到这个文件的最后,写入
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig export PKG_CONFIG_PATH,保存退出后执行:source ~/.bashrc生效配置。
至此opencv环境配置完毕。

Qt中测试opencv

新建项目test1,在项目主目录放入一张图片,笔者放的是1.jpg


Qt-test1

在test1.pro文件中加入(加入的包含路径也是视情况而定的,具体与相关头文件目录位置有关):

INCLUDEPATH += /usr/local/include \
                /usr/local/include/opencv \
                /usr/local/include/opencv2 \
        /usr/local/include/opencv4 \
        /usr/local/include/opencv4/opencv2

LIBS += /usr/local/lib/libopencv_highgui.so \
        /usr/local/lib/libopencv_core.so    \
        /usr/local/lib/libopencv_imgproc.so \
        /usr/local/lib/libopencv_imgcodecs.so

在main中输入代码:

#include <QCoreApplication>
#include <core.hpp>
#include <highgui.hpp>
#include <imgproc.hpp>
using namespace cv;
int main(){
    namedWindow( "src", WINDOW_AUTOSIZE );
    Mat src1 = imread( "/home/icespring/Qt-workplace/test1/1.jpg" );
    while(1){
        imshow( "src", src1 );
        char c =  waitKey(30);
        if( 27==c )
            return 0;
    }
}

运行后可以发现,1.jpg被展示在屏幕上:


焰灵姬

Tesseract下载与安装

首先安装依赖库leptioncal

wget http://www.leptonica.com/source/leptonica-1.71.tar.gz
  1. 执行解压指令 tar -xvf leptonica-1.71.tar.gz,也可直接解压提取

  2. 进入leptonica-1.71目录cd leptonica-1.71 ,执行配置指令./configure

  3. 执行编译指令 make

  4. 执行安装指令 make install

至此,leptonica安装完毕
接下来安装Tesseract
下载Tesseract 3.04版本

wget https://github.com/tesseract-ocr/tesseract/archive/3.04.00.tar.gz
  1. 解压或提取文件

  2. 进入tesseract-3.04.00目录cd tesseract-3.04.00 ,进入目录后发现目录下有一个autogen.sh,执行./autogen.sh,然后执行配置指令./configure

  3. 执行编译指令 make

  4. 执行安装指令 make install

  5. 之后在/etc/ld.so.conf中加入/usr/local/lib这一行,gedit /etc/ld.so.conf,保存退出后执行sudo /sbin/ldconfig -v

至此Tesseract已安装配置完毕。

Qt中测试Tesseract

首先下载语言包(chi_sim则是中文包):

wget --no-check-certificate https://github.com/tesseract-ocr/tessdata/raw/master/eng.traineddata

下载后将其拷贝到Tesseract的tessdata里:
sudo cp eng.traineddata /usr/local/share/tessdata
然后在Qt中新建项目myMainWindow,在.pro中添加(具体内容与对应链接目录有关):

INCLUDEPATH += /usr/local/include/tesseract \
                /usr/include/leptonica \
                /usr/local/include/leptonica \
                /usr/local/lib

LIBS += -L/usr/local/lib/ -llept -ltesseract \

myMainWindow.cpp中添加代码:

QString model::picToWord(const QString &path)
{
    char *outText;
    tesseract::TessBaseAPI *api = new tesseract::TessBaseAPI();
    // Initialize tesseract-ocr with English, without specifying tessdata path
    if (api->Init(NULL, "eng"))//chi_sim which is Chinese/eng
    {
        fprintf(stderr, "Could not initialize tesseract.\n");
        exit(1);
    }

    //QByteArray ba=fileNames.at(0).toLatin1();
    // Open input image with leptonica library
    //qDebug()<<ba;
    std::string str = path.toStdString();
    const char* ch = str.c_str();
    //qDebug()<<ch;
    Pix *image = pixRead(ch); //absolute path of file //ba.data()
    api->SetImage(image);

    // Get OCR result
    outText = api->GetUTF8Text();
    printf("OCR output:\n%s", outText);

    // Destroy used object and release memory
    api->End();
    delete [] outText;
    pixDestroy(&image);
    return outText;

}

传入图片路径即可识别了。
参考文章:Qt+Opencv安装

上一篇下一篇

猜你喜欢

热点阅读