色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

探索OpenVINO? 手寫字符使用方法

英特爾物聯網 ? 來源:英特爾物聯網 ? 作者:英特爾物聯網 ? 2021-07-28 09:23 ? 次閱讀

引言

手寫數字識別是一個很基礎的模式識別問題,從傳統特征提取加機器學習訓練方法到深度神經網絡訓練的識別方法識別都會達到比較高的精度,同時手寫數字識別也是一個特別不穩定,很難具備普適性的模型,需要針對性的數據集與訓練,然后才得到比較好的識別精度。

OpenVINO 在2021.4 版本中已經加入了手寫數字識別的預訓練模型,開始支持手寫數字識別,下面讓我們一起探索與嘗試下它的使用方法與效果如何!

模型介紹

在OpenVINO 2021.4版本中支持的手寫數字識別模型為handwritten-score-recognition-0003

,支持《digit》 or 《digit》。《digit》 格式的數字識別與小數點識別。該模型的結構有兩個部分組成,前面是一個典型的CNN骨干網絡,采用的是VGG-16類似的架構,實現特征提取;后面是一個雙向的LSTM網絡,實現序列預測;最終的預測結果基于CTC解析即可。其輸入與輸出格式如下:

輸入格式為:[NCHW]= [1x1x32x64]

輸出格式為:[WxBxL]=[16x1x13]

其中13表示“0123456789._#”,#表示空白、_表示非數字的字符

對輸出格式的解碼方式支持CTC貪心與Beam搜索,演示程序使用CTC貪心解碼,這種方式相對簡單,前面一篇文章中我們已經詳細介紹過了,后面就直接套用即可!

模型使用與演示

使用該模型必須是基于常見文字檢測得到的ROI區域,然后轉化為灰度圖象,使用該模型完成預測,關于場景文字檢測,在前面一篇文章中我已經詳細交代過了,這里就不再贅述。這里小可腦洞大開,針對常見的文本圖象,采用OpenCV二值圖象輪廓分析來完成數字ROI區域得截取,同樣取得了不錯得效果。基本的流程是這樣:

Step 1: 讀取圖象并二值化

代碼如下

Mat src = imread(“D:/images/zsxq/ocr.png”);

imshow(“input”, src);

Mat gray, binary;

cvtColor(src, gray, COLOR_BGR2GRAY);

adaptiveThreshold(gray, binary, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY_INV, 25, 10);

其中adaptiveThreshold函數實現對灰度圖象自適應二值化,參數blockSize=25表示高斯窗口大小,constants=10表示自適應常量值。需要注意的是參數blockSize值必須為奇數。

Step 2: 使用輪廓分析過填充過濾小噪點

代碼如下

std::vector《vector《Point》》 contours;

std::vector《Vec4i》 hireachy;

findContours(binary, contours, hireachy, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);

int image_height = src.rows;

int image_width = src.cols;

for (size_t t = 0; t 《 contours.size(); t++) {

double area = contourArea(contours[t]);

if (area 《 10) {

drawContours(binary, contours, t, Scalar(0), -1, 8);

}

}

上面的代碼findContours表示輪廓發現,RETR_EXTERNAL表示采用發現最外層輪廓,CHAIN_APPROX_SIMPLE表示采用簡單的鏈式編碼收集輪廓上的像素點集。contourArea表示計算一個輪廓的面積,計算方式基于格林積分公式。drawContours表示繪制輪廓,其中thickness參數為-1表示填充,大于零表示繪制邊緣。這里通過對白色噪點填充為黑色,完成噪聲去除,

Step 3:膨脹預處理

對第二步輸出的圖象我們不能直接通過輪廓發現截取ROI,然后交給數字識別網絡去識別,原因是這樣會導致ROI區域的寬高比失衡,導致輸入的數字resize之后發現畸變,識別精度會降低,所以通過膨脹操作,把數字適度的加寬與加高,主要是加寬,這樣保持輸入ROI區域resize之后不變性,就很容易識別了。這部分預處理的代碼如下:

Mat se = getStructuringElement(MORPH_RECT, Size(45, 5));

Mat temp;

dilate(binary, temp, se);

其中dilate表示膨脹操作、然后對得到temp圖象。

Step 4:數字識別推理與解析

對圖-4進行輪廓發現,截取ROI,遍歷每個輪廓,調用識別推理即可輸出。其中加載模型與獲取推理請求,這里就不再贅述了,截取ROI與推理解析部分的代碼如下:

// 處理輸出結果

findContours(temp, contours, hireachy, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);

for (size_t t = 0; t 《 contours.size(); t++) {

Rect box = boundingRect(contours[t]);

Mat roi = gray(box);

size_t image_size = h*w;

Mat blob_image;

resize(roi, blob_image, Size(w, h));

// NCHW

unsigned char* data = static_cast《unsigned char*》(input-》buffer());

for (size_t row = 0; row 《 h; row++) {

for (size_t col = 0; col 《 w; col++) {

data[row*w + col] = blob_image.at《uchar》(row, col);

}

}

// 執行預測

infer_request.Infer();

auto output = infer_request.GetBlob(output_name);

const float* blob_out = static_cast《PrecisionTrait《Precision::FP32》::value_type*》(output-》buffer());

const SizeVector reco_dims = output-》getTensorDesc().getDims();

const int RW = reco_dims[0];

const int RB = reco_dims[1];

const int RL = reco_dims[2];

std::string ocr_txt = ctc_decode(blob_out, RW, RL);

std::cout 《《 ocr_txt 《《 std::endl;

cv::putText(src, ocr_txt, box.tl(), cv::FONT_HERSHEY_PLAIN, 1.0, cv::Scalar(255, 0, 0), 1);

cv::rectangle(src, box, Scalar(0, 0, 255), 2, 8, 0);

}

首先進行輪廓發現,然后根據每個輪廓截取ROI區域,設置輸入數據,推理,解析輸出采用CTC方式。

擴展探索

這里我沒有采用場景文字檢測來獲取ROI,而是采用傳統的二值圖象分析來完成,主要是避免跟前面的文字內容重疊,同時啟發更多的思路。另外采用膨脹擴展。

有時候并非是上上之選,還可以直接修改ROI大小來擴展,這部分其實可以參考上一篇場景文字識別的代碼,輪廓發現獲取外接矩形,直接修改ROI大小的方式,同時根據橫縱比過濾非數字符號。改動部分就是去掉第三步膨脹,然后直接在第四步循環中添加下面的代碼;

Rect box = boundingRect(contours[t]);

float rate = box.width / box.height;

if (rate 》 1.5) {

continue;

}

box.x = box.x - 15;

box.width = box.width + 30;

box.y = box.y - 5;

box.height = box.height + 10;

編輯:jq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數字識別
    +關注

    關注

    2

    文章

    19

    瀏覽量

    10154

原文標題:OpenVINO? 手寫字符識別模型與使用

文章出處:【微信號:英特爾物聯網,微信公眾號:英特爾物聯網】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    AB伺服軟件使用方法

    AB伺服軟件使用方法
    發表于 12-24 14:45 ?0次下載

    base64編碼和解碼的使用方法

    Base64編碼是一種基于64個可打印字符來表示二進制數據的編碼方法。它將每3個字節的二進制數據編碼為4個字符,如果不足3個字節,則使用填充字符(通常是 = )來補足。 2. Bas
    的頭像 發表于 11-10 10:48 ?1248次閱讀

    示波器高壓探頭使用方法

    示波器高壓探頭是一種用于測量高電壓信號的儀器,通常用于高壓電源、電機、變壓器等電氣設備的測試。以下是示波器高壓探頭的詳細使用方法
    的頭像 發表于 10-03 16:43 ?459次閱讀

    探針頭型使用方法有哪些

    探針頭型的使用方法多種多樣,具體取決于探針頭型的類型、被測對象的特性以及測試需求。以下是一些常見探針頭型的使用方法概述: 1. 凹頭探針 用途 :主要用于測試長導腳、端子及繞線柱等較長或較粗的被測點
    的頭像 發表于 09-07 10:57 ?711次閱讀

    LangChain框架關鍵組件的使用方法

    LangChain,開發者可以輕松構建基于RAG或者Agent流水線的復雜應用體系,而目前我們已經可以在LangChain的關鍵組件LLM,Text Embedding和Reranker中直接調用OpenVINO進行模型部署,提升本地RAG和Agent服務的性能,接下來就讓我們一起看下這些組件的
    的頭像 發表于 08-30 16:55 ?621次閱讀
    LangChain框架關鍵組件的<b class='flag-5'>使用方法</b>

    DC/DC模擬的基本使用方法和特性確認方法

    本篇介紹了DC/DC模擬的基本使用方法及確認基本特性的方法
    的頭像 發表于 08-20 17:08 ?723次閱讀
    DC/DC模擬的基本<b class='flag-5'>使用方法</b>和特性確認<b class='flag-5'>方法</b>

    淺談錫膏的儲存及使用方法

    錫膏(焊錫膏)是電子組裝過程中常用的材料,它的儲存和使用方法對保證焊接質量和性能至關重要。以下是詳細的儲存及使用方法
    的頭像 發表于 06-27 10:02 ?933次閱讀

    可編程電源使用方法

    可編程電源使用方法 可編程電源使用方法 摘要:本文詳細介紹了可編程電源的使用方法,包括其基本概念、主要功能、選擇原則、操作步驟、注意事項以及實際應用案例,旨在幫助讀者全面了解可編程電源
    的頭像 發表于 06-10 15:29 ?1056次閱讀

    手柄控制代碼及使用方法

    手柄控制代碼及使用方法
    的頭像 發表于 05-15 10:19 ?1887次閱讀

    Microsoft Excel融入手寫筆功能,助您快速插入、刪除單元格數據

     Microsoft今日宣布,向Microsoft 365內部人士開放Windows版本Excel的“Ink to Text”功能的試用機會。此工具旨在將手寫字跡轉為文字,使表格數據填充更便捷高效。
    的頭像 發表于 04-30 14:16 ?1020次閱讀

    微軟發布Windows版OneNote應用AI手寫矯正功能

    微軟官方解釋稱,這一功能旨在優化和調整手寫字體,使之更加整潔美觀且更具連貫性。這不僅能提升OneNote中的手寫字體可讀性,而且不會改變原始手寫字效的獨特風格與個性化特點,方便用戶日后再次審閱及分享。
    的頭像 發表于 04-18 10:59 ?578次閱讀

    手機信號屏蔽器:功能、原理及使用方法詳解

    深圳特信電子|手機信號屏蔽器:功能、原理及使用方法詳解
    的頭像 發表于 04-01 09:09 ?3184次閱讀

    555集成芯片的使用方法

    555集成芯片的使用方法主要依賴于其特定的引腳功能和電路設計。
    的頭像 發表于 03-25 14:39 ?1538次閱讀

    OpenVINO添加對Paddle 2.5的支持

    我是飛槳黑客馬拉松第五期 OpenVINO 賽題獲獎者——為 OpenVINO 添加了對 Paddle 2.5 的支持。在此記錄下來貢獻的過程,希望有更多的同學可以參與到 OpenVINO 的社區
    的頭像 發表于 01-19 09:20 ?647次閱讀

    基于OpenVINO?和AIxBoard的智能安檢盒子設計

    公共安全問題日益凸顯,傳統安檢手段面臨挑戰。為提高安檢效率和保障公共安全,基于 OpenVINO? 和 AIxBoard 的智能安檢盒子應運而生。
    的頭像 發表于 01-18 17:31 ?846次閱讀
    基于<b class='flag-5'>OpenVINO</b>?和AIxBoard的智能安檢盒子設計
    主站蜘蛛池模板: 蛇缚dvd| 国产一卡2卡3卡4卡孕妇网站| 欧美亚洲日韩欧洲不卡| 高清视频在线观看SEYEYE| 亚洲永久精品ww47app| 人妻少妇久久久久久97人妻| 精品久久久久中文字幕| 高h喷水荡肉爽文总攻| 91日本在线观看亚洲精品| 亚洲免费中文| 涩涩涩涩爱网站| 欧美午夜精品A片一区二区HD| 精品一二三区久久AAA片| 国产成人免费视频| 99热久久这里只有精品| 亚洲欧洲日产国产 最新| 失禁 调教 刺激 哭喊男男| 男人被绑着强行摸j| 精品午夜中文字幕熟女人妻在线| 国产精品久久一区二区三区蜜桃| XXX欧美性兽交| 97视频精品| 主播蜜汁丝袜精品自拍| 亚洲三级视频在线| 小小水蜜桃视频高清在线观看免费| 热九九99香蕉精品品| 男女XX00上下抽搐动态图| 久久久精品免费视频| 精品国产在线手机在线| 国产中文视频| 国产欧美无码亚洲毛片| 国产国拍亚洲精品永久软件| 丰满艳妇亲伦| 国产AV天堂一区二区三区| 成年人视频在线免费| mxgs-877痉挛媚药按摩| 99久久精品国产一区二区三区| 中文字幕亚洲综合小综合在线| 夜夜穞狠狠穞| 浓毛BWBWBWBWBW日本| 老外的好大c的我好爽|