最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c++調(diào)用python實(shí)現(xiàn)圖片ocr識(shí)別

 更新時(shí)間:2023年09月05日 08:19:39   作者:方方洛  
所謂c++調(diào)用python,實(shí)際上就是在c++中把整個(gè)python當(dāng)作一個(gè)第三方庫(kù)引入,然后使用特定的接口來(lái)調(diào)用python的函數(shù)或者直接執(zhí)行python腳本,本文介紹的是調(diào)用python實(shí)現(xiàn)圖片ocr識(shí)別,感興趣的可以了解下

一、簡(jiǎn)介

本文來(lái)使用c++調(diào)用python實(shí)現(xiàn)圖像的ocr。

所謂c++調(diào)用python,實(shí)際上就是在c++中把整個(gè)python當(dāng)作一個(gè)第三方庫(kù)引入,然后使用特定的接口來(lái)調(diào)用python的函數(shù)或者直接執(zhí)行python腳本。

文章中使用的操作系統(tǒng)是windows10,visual stdio 2022 c++編譯環(huán)境是Release x64。

二、具體實(shí)現(xiàn)

1.python 部分的 ocr 代碼

我們首先要保證 python 代碼能夠正常運(yùn)行,因此要先安裝 python 的第三方庫(kù)。

pip install paddlepaddle-gpu paddleocr opencv-python

如果文件目錄中有中文,比如出現(xiàn)用戶名為中文的情況,paddleocr 就無(wú)法運(yùn)行。

from paddleocr import PaddleOCR
import cv2
?
ocr = PaddleOCR(use_angle_cls=True, lang="en")
?
def ocrImage():
 ? ?image = cv2.imread('./images/images.jpg')
 ? ?text = ocr.ocr(image, cls=True)[0]
 ? ?res = ""
 ? ?for t in text:
 ? ? ? ?// t[0] 中記錄了識(shí)別目標(biāo)在圖片中的位置
 ? ? ? ?// t[1][0] 記錄的是識(shí)別目標(biāo)的文本
 ? ? ? ?res = res + t[1][0] + " "
 ? ?return res

我們先引入 paddleocr 和 opencv,然后初始化ocr,再定義一個(gè) ocrImage 函數(shù)來(lái)實(shí)現(xiàn)我們 python 部分的主體邏輯。因?yàn)橹皇亲鳛橐粋€(gè)例子,所以邏輯并沒(méi)有那么復(fù)雜。在 ocrImage 函數(shù)內(nèi),我們使用 opencv 將圖片讀入內(nèi)存,然后傳遞給 ocr.ocr 函數(shù),獲取識(shí)別后的所有文本。接著將文本中間間隔空格拼接,之后返回,這么寫主要是供 cpp 調(diào)用,便于演示。

我們本次所識(shí)別的圖片是下面這張:

paddleocr 是按行識(shí)別文字的,打印每個(gè)識(shí)別結(jié)果(t[1][0])的結(jié)果是:

如果所要識(shí)別的文本是英文和數(shù)字,那么推薦在初始化 PaddleOCR 的時(shí)候使用 en(英文),這樣準(zhǔn)確率幾乎可以達(dá)到100%。雖然語(yǔ)言選擇 ch(中文)也可以識(shí)別英文和數(shù)字,但是在識(shí)別英文和數(shù)字準(zhǔn)確率會(huì)大幅下降,會(huì)出現(xiàn)把 6 識(shí)別成 9 的情況,因?yàn)?6 倒過(guò)來(lái)看是9。

2.在c++中引入Python.h

首先初始化一個(gè) c++ 空項(xiàng)目,將調(diào)試屬性改變?yōu)镽elease x64。接著在 visual stdio 中點(diǎn)擊項(xiàng)目->項(xiàng)目名稱+屬性。點(diǎn)擊 VC++ 目錄,在包含目錄中添加:

C:\Users\xxx\AppData\Local\Programs\Python\Python39\include

在庫(kù)目錄中添加:

C:\Users\xxx\AppData\Local\Programs\Python\Python39\libs

也就是找到 python 的安裝位置,分別引入python下的 include 和 libs 文件夾。我所使用的 python 版本是 3.9。

接著點(diǎn)擊展開(kāi)鏈接器->輸入。在附加依賴項(xiàng)中添加 python39.lib,如果是 debug 環(huán)境,需要添加python39_d.lib。

如果更改了調(diào)試屬性,則需要重新引入之前沒(méi)有添加的第三方庫(kù)。

3.c++ 中調(diào)用 python

創(chuàng)建一個(gè) main.cpp 文件,寫入以下代碼

#include<iostream>
#include<Python.h>
#include<string>
?
using namespace std;
?
int main() {
    Py_SetPythonHome(L"C:\Users\xxx\AppData\Local\Programs\Python\Python39");
    Py_Initialize();
    PyRun_SimpleString("import sys");
    PyRun_SimpleString("sys.path.append('./')");
?
    PyObject* pName = PyUnicode_FromString("ocr");
    PyObject* pyModule = PyImport_Import(pName);
?
    if (!pyModule) {
        cout << "Cannot found pyModule!" << endl;
        return 0;
    }
    PyObject* ocrFunc = PyObject_GetAttrString(pyModule, "ocrImage");
    PyObject* pyReturnValue = PyObject_CallObject(ocrFunc, NULL);
    char* res = NULL;
    PyArg_Parse(pyReturnValue, "s", &res);
    string tag(res);
    cout << tag << endl;
    return 0;
};

我們先引入了iostream、Python.h、string,使用了命名空間std。在 main 函數(shù)中,我們首先使用 Py_SetPythonHome 設(shè)置了 python 包的目錄,然后使用 Py_Initialize 初始化了 python 的解釋器。

接下來(lái)在 c++ 里運(yùn)行了兩行 python 腳本設(shè)置了 python 的工作目錄,如果在上面 ocr 的 python 代碼中讀入圖片使用的是相對(duì)地址,那么相對(duì)的就是此處設(shè)置的工作目錄,即 項(xiàng)目根目錄/項(xiàng)目名稱 文件夾下。

再往后使用 PyImport_Import 引入 名稱為 ocr 的 py 腳本,獲取 ocr 中名為 ocrImage 的函數(shù),使用 PyObject_CallObject 調(diào)用該函數(shù),獲取返回值,打印輸出。

最終結(jié)果如下:

到此這篇關(guān)于c++調(diào)用python實(shí)現(xiàn)圖片ocr識(shí)別的文章就介紹到這了,更多相關(guān)c++ python圖片ocr內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C/C++整數(shù)乘積的溢出問(wèn)題的解決

    C/C++整數(shù)乘積的溢出問(wèn)題的解決

    整數(shù)乘積的溢出問(wèn)題是指兩個(gè)整數(shù)相乘得到的結(jié)果超過(guò)了所能表示的數(shù)據(jù)類型的范圍,本文給大家介紹了C/C++整數(shù)乘積的溢出問(wèn)題的解決,需要的朋友可以參考下
    2024-02-02
  • c++11 符號(hào)修飾與函數(shù)簽名、函數(shù)指針、匿名函數(shù)、仿函數(shù)、std::function與std::bind

    c++11 符號(hào)修飾與函數(shù)簽名、函數(shù)指針、匿名函數(shù)、仿函數(shù)、std::function與std::bind

    這篇文章主要介紹了c++11 符號(hào)修飾與函數(shù)簽名、函數(shù)指針、匿名函數(shù)、仿函數(shù)、std::function與std::bind,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • C語(yǔ)言中二叉樹(shù)的后序遍歷詳解

    C語(yǔ)言中二叉樹(shù)的后序遍歷詳解

    大家好,本篇文章主要講的是C語(yǔ)言中二叉樹(shù)的后序遍歷詳解,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • C++ primer類的基礎(chǔ)精講

    C++ primer類的基礎(chǔ)精講

    C++類,是指系統(tǒng)在第一次在程序中遇到一個(gè)類時(shí)為這個(gè)類建立它的所有類變量的拷貝 - 這個(gè)類的所有實(shí)例共享它的類變量
    2022-07-07
  • C/C++中多重繼承詳解及其作用介紹

    C/C++中多重繼承詳解及其作用介紹

    這篇文章主要介紹了C/C++中多重繼承詳解及其作用介紹,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • C語(yǔ)言實(shí)現(xiàn)翻譯功能

    C語(yǔ)言實(shí)現(xiàn)翻譯功能

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的翻譯功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • C++中cin>>n的返回值

    C++中cin>>n的返回值

    這篇文章主要介紹了C++中cin>>n的返回值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • C++示例詳解Prim算法與優(yōu)先隊(duì)列

    C++示例詳解Prim算法與優(yōu)先隊(duì)列

    這篇文章介紹了C++ Prim算法、優(yōu)先隊(duì)列,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • C++ vector刪除符合條件的元素示例分享

    C++ vector刪除符合條件的元素示例分享

    這篇文章主要介紹了C++ vector刪除符合條件的元素示例,需要的朋友可以參考下
    2014-02-02
  • c語(yǔ)言:基于函數(shù)指針的兩個(gè)示例分析

    c語(yǔ)言:基于函數(shù)指針的兩個(gè)示例分析

    本篇文章是對(duì)c語(yǔ)言中函數(shù)指針的兩個(gè)示例做了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05

最新評(píng)論

西宁市| 巩留县| 海门市| 阿拉善右旗| 太原市| 滦平县| 乌拉特中旗| 辽阳县| 广昌县| 普兰店市| 藁城市| 静宁县| 恩平市| 怀远县| 河东区| 大新县| 长乐市| 曲阳县| 柳州市| 上虞市| 平利县| 博白县| 和平区| 郸城县| 广平县| 招远市| 庆阳市| 保德县| 民权县| 淳化县| 惠安县| 彭山县| 盖州市| 宜昌市| 天门市| 个旧市| 孙吴县| 邓州市| 遂宁市| 门头沟区| 汤原县|