在Linux下搭建Qt+Opencv+Tesseract环境
Qt下载与安装
Qt官网下载链接
进入后点击最新的Linux版本
选择Linux版本下载即可,下载后双击即可直接安装
Qt下载
这一步点击skip即可,社区版本足够我们使用了
Qt安装
随后等待安装成功即可
安装后为使用方便,为QtCreeater创建桌面快捷方式
QtCreater
安装完成后打开Qt新建项目测试安装是否成功
第一次使用控制台可能出现的报错
cannot find -lGL
,这是因为缺少相关依赖,解决办法如下:打开终端,输入命令:
sudo apt-get install libgl1-mesa-dev
之后就可以正确运行了
Opencv库下载与安装
我们从GitHub下载
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
-
执行解压指令
tar -xvf leptonica-1.71.tar.gz
,也可直接解压提取 -
进入leptonica-1.71目录
cd leptonica-1.71
,执行配置指令./configure
-
执行编译指令
make
-
执行安装指令
make install
至此,leptonica安装完毕
接下来安装Tesseract
下载Tesseract 3.04版本
wget https://github.com/tesseract-ocr/tesseract/archive/3.04.00.tar.gz
-
解压或提取文件
-
进入tesseract-3.04.00目录
cd tesseract-3.04.00
,进入目录后发现目录下有一个autogen.sh,执行./autogen.sh
,然后执行配置指令./configure
-
执行编译指令
make
-
执行安装指令
make install
-
之后在/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安装