国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Qt利用VCPKG和CMake和OpenCV和Tesseract實(shí)現(xiàn)中英文OCR

這篇具有很好參考價(jià)值的文章主要介紹了Qt利用VCPKG和CMake和OpenCV和Tesseract實(shí)現(xiàn)中英文OCR。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

Qt利用VCPKG和CMake和OpenCV和Tesseract實(shí)現(xiàn)中英文OCR

??今天看 OpenCV 方面的教程,pdf 格式的,因?yàn)橐恍?qiáng)迫癥的習(xí)慣,喜歡添加一些書(shū)簽,手動(dòng)是不太愿意的,自然就想到利用OCR來(lái)實(shí)現(xiàn)。

??想要自己編碼實(shí)現(xiàn)OCR,方案比較簡(jiǎn)單就是 Tesseract 。單獨(dú)使用 Tesseract 也可以,但最好利用 OpenCV 來(lái)進(jìn)行圖像方面的處理,一大堆方法可以濾波,變換,就是不停地調(diào)參數(shù)讓人心煩,不同的圖,需要使用不同的方法,也不清爽。出于總結(jié)的需要,把過(guò)程記錄下。

??這個(gè)項(xiàng)目就是個(gè)Demo,比較簡(jiǎn)單,網(wǎng)上的水貨,只有 Qt Creator 和 CMake 和 vcpkg 的配合使用 ,有點(diǎn)參考價(jià)值。

1. 開(kāi)發(fā)平臺(tái)

  • os : win10 x64
  • Qt:6.6
  • compiler:msvc2022
  • 項(xiàng)目管理:cmake
  • 包管理: vcpkg
  • 開(kāi)發(fā)庫(kù)版本:
    • OpenCV : 4.8 ,這個(gè)很友好,有編譯出來(lái)的庫(kù),不需要自己去弄
    • Tesseract-ocr : 5.3 巨坑,二進(jìn)制文件為啥不包含lib ? ??

2. 下載文件

  • 先說(shuō)說(shuō)踩過(guò)的坑,希望有相關(guān)經(jīng)驗(yàn)的大佬,給點(diǎn)指點(diǎn)吧。

    • Tesseract 的坑

      在 Tesseract 的 https://github.com/tesseract-ocr/tesseract#installing-tesseract,有二進(jìn)制包,興沖沖地下載后,一看原來(lái)不是庫(kù)文件,是可執(zhí)行文件,這如何編碼,用進(jìn)程對(duì)話(huà)來(lái)實(shí)現(xiàn)?這包何用,對(duì)開(kāi)發(fā)無(wú)益

      tesseract-ocr-w64-setup-5.3.3.20231005.exe (64 bit) 安裝后 沒(méi)有l(wèi)ib庫(kù),只有可執(zhí)行文件

    • sw 坑

      既然沒(méi)有 Tesseract 現(xiàn)成的庫(kù),那就需要自己編譯了,在Tesseract 上接觸到了 sw,這也是一個(gè)包管理方面的東西,關(guān)鍵是會(huì)自動(dòng)下載,自動(dòng)解決包依賴(lài)的問(wèn)題,看上去很方便,興沖沖地下載使用,發(fā)現(xiàn)網(wǎng)速也是剛剛的,cmake 也能使用,看看文檔 下載、添加環(huán)境變量、在cmake設(shè)置依賴(lài)的包,然后等待成功吧。

      find_package(SW REQUIRED)
      sw_add_package(
      	org.sw.demo.glennrp.png
      )
      sw_execute()
      
      
      add_executable(mytarget ${MY_SOURCES})
      target_link_libraries(mytarget
      	org.sw.demo.glennrp.png
      )
      

      看上去很美好,但是 sw_execute() 這一步時(shí)間長(zhǎng)的也是讓人醉了,只要CMakeFiles.txt 一有變動(dòng),這玩意就會(huì)折騰好一陣子。

      有大佬會(huì)的么,指點(diǎn)一下細(xì)節(jié)。這東西看上去不錯(cuò),值得鼓掌和期待。希望好起來(lái)吧。

      還有個(gè)swgui的客戶(hù)端,也是折騰了一下,但是最后也沒(méi)掌握,也搞不懂。遂棄之。

2.1 下載安裝 OpenCV 庫(kù)

??這一步很簡(jiǎn)單,官網(wǎng)有很多版本的,我就找了一個(gè)最新的

??Releases - OpenCV
Qt利用VCPKG和CMake和OpenCV和Tesseract實(shí)現(xiàn)中英文OCR,# Qt 案例,qt,opencv,ocr

下載安裝,添加環(huán)境變量就行。就可以省略向生成的目錄下 復(fù)制 dll 的步驟。

2.2 下載安裝 Tesseract-OCR庫(kù)

??踩過(guò)了SW的坑,還是回到了VCPKG。利用 IDM 和 迅雷 實(shí)現(xiàn)手動(dòng)加速網(wǎng)絡(luò)。過(guò)程比較繁瑣,但是沒(méi)啥難度。另外使用PowerShell 會(huì)方便一點(diǎn)。

vcpkg install tesseract --triplet=x64-windows

具體步驟:

  • 執(zhí)行 vcpkg install tesseract --triplet=x64-windows
  • ctrl + c 中斷
  • 復(fù)制下載鏈接,手動(dòng) IDM 或者 迅雷
  • 重命名
  • 繼續(xù) 執(zhí)行 vcpkg install tesseract --triplet=x64-windows

慢慢征途,應(yīng)該有本小說(shuō)在伴。祝網(wǎng)速好運(yùn)。

另外不要自己去手動(dòng)編譯 Tesseract 庫(kù),這庫(kù)依賴(lài)也多,依賴(lài) leptonica 、archive.dll、bz2.dll、clang_rt.asan_dynamic-x86_64.dll、gif.dll、jpeg62.dll、libcrypto-3-x64.dll、libcurl.dll、liblzma.dll、libpng16.dll、libsharpyuv.dll、libwebp.dll、libwebpmux.dll、lz4.dll、openjp2.dll、tiff.dll、zlib1.dll、zstd.dll,煩透啦。

2.3 下載訓(xùn)練好的語(yǔ)言包

  • tessdata_best: https://github.com/tesseract-ocr

  • eng.traineddata 和 chi_sim.traineddata

  • 點(diǎn)擊進(jìn)去下載raw

3. CMakeLists.txt 內(nèi)容

cmake_minimum_required(VERSION 3.24)

project(36_Opencv4_Tesseract_OCR LANGUAGES CXX)

#set(CMAKE_CXX_STANDARD 17)
#set(CMAKE_CXX_STANDARD_REQUIRED ON)

##################### 設(shè)置 QT庫(kù)   #####################
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

# 添加自定義代碼的 include 和 source 路徑
#include_directories  (D:/Project/qt_common_tools/global_define)
#aux_source_directory (D:/Project/qt_common_tools/global_define COMMON_TOOLS_LIST)

find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core )
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core )


##################### vcpkg 庫(kù)  #####################
#尋找 TESSERACT 庫(kù)
FIND_PACKAGE(tesseract REQUIRED)
#尋找 LEPTONICA 庫(kù)
FIND_PACKAGE(leptonica REQUIRED)


##################### opencv 庫(kù)  #####################
set(OpenCV_DIR C:/OpenCV/opencv/build)

#尋找OpenCV庫(kù)
FIND_PACKAGE(OpenCV REQUIRED)

##打印調(diào)試信息
#MESSAGE(STATUS "Project: ${PROJECT_NAME}")
#MESSAGE(STATUS "OpenCV library status:")
#MESSAGE(STATUS "    version: ${OpenCV_VERSION}")
#MESSAGE(STATUS "    libraries: ${OpenCV_LIBS}")
#MESSAGE(STATUS "    include path: ${OpenCV_INCLUDE_DIRS}")


##################### 修改入口點(diǎn)  #####################
# 設(shè)置程序?yàn)?windows 程序 修改入口點(diǎn),不顯示 console
#set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /ENTRY:mainCRTStartup")

#################### 內(nèi)存泄露檢查 #####################
#SET(CMAKE_CXX_FLAGS "-fsanitize=address")

#獲取代碼,在項(xiàng)目中,將所有代碼都放在src文件夾中
AUX_SOURCE_DIRECTORY(. DIR_SRCS)
#MESSAGE(STATUS "Src file: ${DIR_SRCS}")



#################### 設(shè)置源碼編碼  ####################
#add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/source-charset:utf-8>")
#add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/execution-charset:GBK>")


#{{{{{{{{{{{{{{{{{{{ 編譯可執(zhí)行程序 }}}}}}}}}}}}}}}}}}}}#
add_executable( ${PROJECT_NAME}
#    WIN32
    ${DIR_SRCS}
    ${COMMON_TOOLS_LIST}
)



#################### 添加鏈接庫(kù)    #####################
set(VCPKG_INCLUDE_DIR C:/vcpkg/installed/x64-windows/include)
set(VCPKG_LIB_DIR     C:/vcpkg/installed/x64-windows/lib)

# 頭文件路徑
TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} PUBLIC ${VCPKG_INCLUDE_DIR})

# lib文件路徑
TARGET_LINK_DIRECTORIES(${PROJECT_NAME}
        PUBLIC
        ${VCPKG_LIB_DIR})

# lib文件
TARGET_LINK_LIBRARIES(${PROJECT_NAME} PUBLIC
     ${OpenCV_LIBS}
     tesseract53
     leptonica
     Qt${QT_VERSION_MAJOR}::Core
)

# 設(shè)置默認(rèn)打開(kāi)VCPKG
#set_target_properties(${PROJECT_NAME} PROPERTIES VS_GLOBAL_VcpkgEnabled true)

#################### 設(shè)置app ico  #####################
##set(app_icon_resource_windows ${CMAKE_CURRENT_SOURCE_DIR}/logo.rc)
##message(STATUS "${app_icon_resource_windows}")

4. Main.cpp

//#include "chinese.h"
#include "qdebug.h"

#include <iostream>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <tesseract/baseapi.h> // tesseract main header

#include <QBuffer>
using namespace cv;

int main()
{
    std::string image_name = "txt.jpg";
    Mat imageMat;
    imageMat = imread(image_name);
    // imshow(ANSI("原圖"), imageMat);
    imshow("origin", imageMat);
    if (imageMat.empty()) {
        printf("No image data \n");
        return -1;
    }
    // Rect ccomp;
    // floodFill(imageMat,Point(3,3),Scalar(255,255,255),&ccomp,Scalar(10,10,10),Scalar(20,20,20));
    cv::cvtColor(imageMat, imageMat, cv::COLOR_BGR2GRAY);

    char *outText;
    tesseract::TessBaseAPI tessbaseApi;

    if (tessbaseApi.Init("./", "chi_sim+eng")) { // chi_sim+eng  把下載的語(yǔ)言包 和 可執(zhí)行文件放到一起
        std::cout << stderr << std::endl;
        exit(1);
    }
    // tesseract 設(shè)置圖片
    tessbaseApi.SetImage((uchar *) imageMat.data, imageMat.cols, imageMat.rows, 1, imageMat.cols);

    // 獲取 ocr 結(jié)果
    outText = tessbaseApi.GetUTF8Text();
    if (outText == nullptr) {
        std::cout << "沒(méi)有數(shù)據(jù)" << std::endl;
    }
    QBuffer buf;
    buf.setData(outText);
    buf.open(QIODevice::ReadOnly);
    while (!buf.atEnd()) {
        QString line = buf.readLine();
        // line = removedSpaceInterChinese(line); // 自定義的函數(shù) , 移除中文之間的空格 可以不考慮
        if (!line.trimmed().isEmpty())
            qDebug() << line;
    }

    delete[] outText;

    waitKey();
    return 0;
}

4.1 中英文混合OCR

tessbaseApi.Init("./", "chi_sim+eng")  

使用 + 號(hào) 連接 chi_sim、eng 就行

5. 在Qt Creator 中設(shè)置 CMake + vcpkg

cmake導(dǎo)入庫(kù): 可以手動(dòng)編寫(xiě) ,但既然能夠偷懶,為啥要?jiǎng)邮?O(∩_∩)O

但是第一步還得手動(dòng):

5.1 在初始化配置文件里修改

Qt利用VCPKG和CMake和OpenCV和Tesseract實(shí)現(xiàn)中英文OCR,# Qt 案例,qt,opencv,ocr
如果切換編譯模式 realease —> debug 也得手動(dòng)添加 /(ㄒoㄒ)/~~

5.2 在構(gòu)建配置里修改

剛剛又搗鼓出來(lái)了一個(gè),直接在 工具配置里 添加 -DCMAKE_TOOLCHAIN_FILE:STRING=C:/vcpkg/scripts/buildsystems/vcpkg.cmake 就行

推薦指數(shù):?????
Qt利用VCPKG和CMake和OpenCV和Tesseract實(shí)現(xiàn)中英文OCR,# Qt 案例,qt,opencv,ocr

說(shuō)明:在Qt工程中CMake使用vcpkg安裝的庫(kù)

# 在Qt工程中使用vcpkg安裝的庫(kù),改成自己的vcpkg安裝目錄
1. qt 在項(xiàng)目中添加
CMAKE_TOOLCHAIN_FILE   C:/vcpkg/scripts/buildsystems/vcpkg.cmake

2. CMakeList.txt
##################### vcpkg 庫(kù)  #####################
#尋找 TESSERACT 庫(kù)
FIND_PACKAGE(tesseract REQUIRED)

#尋找 LEPTONICA 庫(kù)
FIND_PACKAGE(leptonica REQUIRED)

#################### 鏈接庫(kù)    #####################
set(VCPKG_INCLUDE_DIR C:/vcpkg/installed/x64-windows/include)  // 這一步其實(shí)也可以修改,不用絕對(duì)路徑
set(VCPKG_LIB_DIR     C:/vcpkg/installed/x64-windows/lib)

# 頭文件路徑
TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} PUBLIC ${VCPKG_INCLUDE_DIR})

# lib文件路徑
TARGET_LINK_DIRECTORIES(${PROJECT_NAME}
        PUBLIC
        ${VCPKG_LIB_DIR})

# lib文件
TARGET_LINK_LIBRARIES(${PROJECT_NAME} PUBLIC
     tesseract53
     leptonica
)

6. 效果截圖

Qt利用VCPKG和CMake和OpenCV和Tesseract實(shí)現(xiàn)中英文OCR,# Qt 案例,qt,opencv,ocr
Qt利用VCPKG和CMake和OpenCV和Tesseract實(shí)現(xiàn)中英文OCR,# Qt 案例,qt,opencv,ocr

7. 小結(jié)

構(gòu)建套件:Desktop Qt 6.6 MSVC2019 64bit 可以使用 MSVC2022 版的c 和 c++的編譯器,也算方便。如果msvc添加了142生成工具,那也可以手動(dòng)添加編譯,選擇 msvc2019模式就行。

如果沒(méi)有使用Qt的模塊【就這個(gè)程序而言,完全可以不用qt】,用std::cout 輸出,會(huì)發(fā)現(xiàn) QC的應(yīng)用程序輸出框全是亂碼,但是不要慌!

用cmd去執(zhí)行程序,代碼頁(yè)切換到utf-8 : chcp 65001

想說(shuō)的也說(shuō)完了,大功告成!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-742842.html

到了這里,關(guān)于Qt利用VCPKG和CMake和OpenCV和Tesseract實(shí)現(xiàn)中英文OCR的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • PYTHON實(shí)現(xiàn)AES加密,中英文通用?。?!

    AES是一種對(duì)稱(chēng)加密,所謂對(duì)稱(chēng)加密就是加密與解密使用的秘鑰是一個(gè)。在日常的開(kāi)發(fā)中,無(wú)論是實(shí)現(xiàn)前后端的接口數(shù)據(jù)加密,還是數(shù)據(jù)傳輸安全性,都使用了AES加密,本文章將從python的角度去實(shí)現(xiàn)AES的加密和解密 AES的加密方式有很多種,例如ECB、CBC、CTR、OFB、CFB,最常用的是

    2024年02月12日
    瀏覽(92)
  • Vue前端使用I18實(shí)現(xiàn)中英文切換

    Vue前端使用I18實(shí)現(xiàn)中英文切換

    一、配置vue-i18 1. 進(jìn)入src/locales/index.js 2. 查看 src/utils/tool.js文件 3. 查看 src/locales/lang/zh-cn.js、src/locales/lang/en.js 二、配置頁(yè)面 進(jìn)入需要有翻譯功能的頁(yè)面進(jìn)行配置,如 login.vue 1. HTML內(nèi)容 2. JS內(nèi)容 三、主要步驟 方法一 ① 頁(yè)面上添加小地球選擇語(yǔ)言顯示選項(xiàng) ② 實(shí)現(xiàn)添加的小地

    2024年04月25日
    瀏覽(96)
  • dedecms織夢(mèng)實(shí)現(xiàn)中英文分頁(yè)功能方法步驟

    前言 之前做項(xiàng)目的時(shí)候遇到一個(gè)需求,因?yàn)槭侵杏⑽陌姹镜木W(wǎng)站,所以分頁(yè)也就需要對(duì)應(yīng)的英文,在論壇、百度等地方搜索了很久均沒(méi)能找到滿(mǎn)意的答案,不過(guò)今天找到下面這篇內(nèi)容,并進(jìn)行測(cè)試,發(fā)現(xiàn)可以適合織夢(mèng)目前最新的5.7版,并且已經(jīng)成功的實(shí)現(xiàn),所以與大家分享下

    2023年04月24日
    瀏覽(109)
  • 微信小程序配置實(shí)現(xiàn)中英文國(guó)際化語(yǔ)言切換

    微信小程序配置實(shí)現(xiàn)中英文國(guó)際化語(yǔ)言切換

    目錄 1,在根目錄新建文件夾和js文件 2. 在main.js中設(shè)置全局語(yǔ)言狀態(tài)(默認(rèn)設(shè)置為中文) 3. 頁(yè)面添加? 語(yǔ)言切換按鈕(登錄頁(yè)面) 4. 在需要顯示的頁(yè)面導(dǎo)入使用 根目錄新建一個(gè)locales.js文件, 通用的一些函數(shù)可以放在此文件該文件夾下?,如下圖所示 配置中英文字段,字段要一

    2024年02月12日
    瀏覽(95)
  • STM32學(xué)習(xí)記錄——SIM900A實(shí)現(xiàn)中英文短信發(fā)送

    STM32學(xué)習(xí)記錄——SIM900A實(shí)現(xiàn)中英文短信發(fā)送

    目錄 調(diào)試 32控制 硬件連接 百度網(wǎng)盤(pán)源碼? 發(fā)短信失敗大概率跟你的模塊供電有關(guān)系,由于GSM模塊發(fā)射信號(hào)功率較大,電腦的USB供電電流較小,板子供電不足問(wèn)題需要外接充電寶供電。(充電寶比電腦USB電流大) 首先用串轉(zhuǎn)USB模塊調(diào)試。 TEST(UCS2)模式下發(fā)送中英文短息,短消

    2023年04月12日
    瀏覽(100)
  • 微信小程序英文版:實(shí)現(xiàn)一鍵切換中英雙語(yǔ)版(已組件化)

    微信小程序英文版:實(shí)現(xiàn)一鍵切換中英雙語(yǔ)版(已組件化)

    已經(jīng)重新優(yōu)化代碼做成了組件,需要可自?。篽ttps://github.com/CrystalCAI11/wechat-language-compoment 所有操作都打包在組件里不需要在額外的地方添加代碼,直接在你需要的頁(yè)面里導(dǎo)入組件,再在對(duì)應(yīng)頁(yè)面的onLoad()里set文本就行了。 第一步,找個(gè)地方新建中英文兩個(gè)字典,我是放在ut

    2024年04月17日
    瀏覽(94)
  • Vray中英文對(duì)照

    渲染元素,中英文對(duì)照表 【英文】 【中文翻譯】 VRayAlpha VRay Alpha VRayAO VRay AO VRayDRBucket VRay DR 渲染塊 VRayMtlReflectIOR VRay Mtl 反射IOR VRayMtlReflectHilightGlossiness VRay Mtl 反射高光光澤度 VRayMtlReflectGlossiness VRay Mtl 反射光澤度 VRayMtlRefractGlossiness VRay Mtl 折射光澤度 VRayZDepth VRay Z 深度 VR

    2024年02月05日
    瀏覽(93)
  • 面試算法十問(wèn)2(中英文)

    算法題 1: 數(shù)組和字符串 Q: How would you find the first non-repeating character in a string? 問(wèn):你如何找到字符串中的第一個(gè)不重復(fù)字符? Explanation: Use a hash table to store the count of each character, then iterate through the string to find the first character with a count of one. 解釋?zhuān)?使用哈希表存儲(chǔ)每個(gè)字符的計(jì)

    2024年04月25日
    瀏覽(100)
  • 汽車(chē)研發(fā)與制造中英文對(duì)照

    FPDS(Ford Product Development System)福特產(chǎn)品開(kāi)發(fā)系統(tǒng) threetype chassis 三類(lèi)底盤(pán) inter-citybus 長(zhǎng)途客車(chē) PassengerVehicle 乘用車(chē) MPV(Multi-PurposeVehicle)多用途汽車(chē) SUV(Sports Utility Vehicle) 運(yùn)動(dòng)型多用途車(chē) four-wheeldrive 四輪驅(qū)動(dòng) front-wheeldrive 前輪驅(qū)動(dòng) DFA-Design For Assembly 面向裝配的設(shè)計(jì) toolb

    2024年02月21日
    瀏覽(91)
  • 網(wǎng)絡(luò)安全中英文術(shù)語(yǔ)大全

    01享級(jí)持久感動(dòng)(APT) 一種阿絡(luò)攻擊。使用復(fù)雜的技術(shù)持續(xù)對(duì)目標(biāo) 政府和公司進(jìn)行網(wǎng)絡(luò)間諜活造或其他咨意活 動(dòng)。遺常由具有豐富專(zhuān)業(yè)知識(shí)和大量安滲的 對(duì)手進(jìn)行-通營(yíng)與民族國(guó)家參與者相關(guān)。 這些攻擊往往來(lái)自多個(gè)入口點(diǎn),并且可能使 用多個(gè)攻擊媒介 《例運(yùn),同絡(luò)攻擊,

    2024年02月05日
    瀏覽(98)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包