0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

探索OpenVINO? 手寫(xiě)字符使用方法

英特爾物聯(lián)網(wǎng) ? 來(lái)源:英特爾物聯(lián)網(wǎng) ? 作者:英特爾物聯(lián)網(wǎng) ? 2021-07-28 09:23 ? 次閱讀

引言

手寫(xiě)數(shù)字識(shí)別是一個(gè)很基礎(chǔ)的模式識(shí)別問(wèn)題,從傳統(tǒng)特征提取加機(jī)器學(xué)習(xí)訓(xùn)練方法到深度神經(jīng)網(wǎng)絡(luò)訓(xùn)練的識(shí)別方法識(shí)別都會(huì)達(dá)到比較高的精度,同時(shí)手寫(xiě)數(shù)字識(shí)別也是一個(gè)特別不穩(wěn)定,很難具備普適性的模型,需要針對(duì)性的數(shù)據(jù)集與訓(xùn)練,然后才得到比較好的識(shí)別精度。

OpenVINO 在2021.4 版本中已經(jīng)加入了手寫(xiě)數(shù)字識(shí)別的預(yù)訓(xùn)練模型,開(kāi)始支持手寫(xiě)數(shù)字識(shí)別,下面讓我們一起探索與嘗試下它的使用方法與效果如何!

模型介紹

在OpenVINO 2021.4版本中支持的手寫(xiě)數(shù)字識(shí)別模型為handwritten-score-recognition-0003

,支持《digit》 or 《digit》?!禿igit》 格式的數(shù)字識(shí)別與小數(shù)點(diǎn)識(shí)別。該模型的結(jié)構(gòu)有兩個(gè)部分組成,前面是一個(gè)典型的CNN骨干網(wǎng)絡(luò),采用的是VGG-16類似的架構(gòu),實(shí)現(xiàn)特征提取;后面是一個(gè)雙向的LSTM網(wǎng)絡(luò),實(shí)現(xiàn)序列預(yù)測(cè);最終的預(yù)測(cè)結(jié)果基于CTC解析即可。其輸入與輸出格式如下:

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

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

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

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

模型使用與演示

使用該模型必須是基于常見(jiàn)文字檢測(cè)得到的ROI區(qū)域,然后轉(zhuǎn)化為灰度圖象,使用該模型完成預(yù)測(cè),關(guān)于場(chǎng)景文字檢測(cè),在前面一篇文章中我已經(jīng)詳細(xì)交代過(guò)了,這里就不再贅述。這里小可腦洞大開(kāi),針對(duì)常見(jiàn)的文本圖象,采用OpenCV二值圖象輪廓分析來(lái)完成數(shù)字ROI區(qū)域得截取,同樣取得了不錯(cuò)得效果。基本的流程是這樣:

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函數(shù)實(shí)現(xiàn)對(duì)灰度圖象自適應(yīng)二值化,參數(shù)blockSize=25表示高斯窗口大小,constants=10表示自適應(yīng)常量值。需要注意的是參數(shù)blockSize值必須為奇數(shù)。

Step 2: 使用輪廓分析過(guò)填充過(guò)濾小噪點(diǎn)

代碼如下

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表示輪廓發(fā)現(xiàn),RETR_EXTERNAL表示采用發(fā)現(xiàn)最外層輪廓,CHAIN_APPROX_SIMPLE表示采用簡(jiǎn)單的鏈?zhǔn)骄幋a收集輪廓上的像素點(diǎn)集。contourArea表示計(jì)算一個(gè)輪廓的面積,計(jì)算方式基于格林積分公式。drawContours表示繪制輪廓,其中thickness參數(shù)為-1表示填充,大于零表示繪制邊緣。這里通過(guò)對(duì)白色噪點(diǎn)填充為黑色,完成噪聲去除,

Step 3:膨脹預(yù)處理

對(duì)第二步輸出的圖象我們不能直接通過(guò)輪廓發(fā)現(xiàn)截取ROI,然后交給數(shù)字識(shí)別網(wǎng)絡(luò)去識(shí)別,原因是這樣會(huì)導(dǎo)致ROI區(qū)域的寬高比失衡,導(dǎo)致輸入的數(shù)字resize之后發(fā)現(xiàn)畸變,識(shí)別精度會(huì)降低,所以通過(guò)膨脹操作,把數(shù)字適度的加寬與加高,主要是加寬,這樣保持輸入ROI區(qū)域resize之后不變性,就很容易識(shí)別了。這部分預(yù)處理的代碼如下:

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

Mat temp;

dilate(binary, temp, se);

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

Step 4:數(shù)字識(shí)別推理與解析

對(duì)圖-4進(jìn)行輪廓發(fā)現(xiàn),截取ROI,遍歷每個(gè)輪廓,調(diào)用識(shí)別推理即可輸出。其中加載模型與獲取推理請(qǐng)求,這里就不再贅述了,截取ROI與推理解析部分的代碼如下:

// 處理輸出結(jié)果

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);

}

}

// 執(zhí)行預(yù)測(cè)

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);

}

首先進(jìn)行輪廓發(fā)現(xiàn),然后根據(jù)每個(gè)輪廓截取ROI區(qū)域,設(shè)置輸入數(shù)據(jù),推理,解析輸出采用CTC方式。

擴(kuò)展探索

這里我沒(méi)有采用場(chǎng)景文字檢測(cè)來(lái)獲取ROI,而是采用傳統(tǒng)的二值圖象分析來(lái)完成,主要是避免跟前面的文字內(nèi)容重疊,同時(shí)啟發(fā)更多的思路。另外采用膨脹擴(kuò)展。

有時(shí)候并非是上上之選,還可以直接修改ROI大小來(lái)擴(kuò)展,這部分其實(shí)可以參考上一篇場(chǎng)景文字識(shí)別的代碼,輪廓發(fā)現(xiàn)獲取外接矩形,直接修改ROI大小的方式,同時(shí)根據(jù)橫縱比過(guò)濾非數(shù)字符號(hào)。改動(dòng)部分就是去掉第三步膨脹,然后直接在第四步循環(huán)中添加下面的代碼;

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴

原文標(biāo)題:OpenVINO? 手寫(xiě)字符識(shí)別模型與使用

文章出處:【微信號(hào):英特爾物聯(lián)網(wǎng),微信公眾號(hào):英特爾物聯(lián)網(wǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    AB伺服軟件使用方法

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

    base64編碼和解碼的使用方法

    Base64編碼是一種基于64個(gè)可打印字符來(lái)表示二進(jìn)制數(shù)據(jù)的編碼方法。它將每3個(gè)字節(jié)的二進(jìn)制數(shù)據(jù)編碼為4個(gè)字符,如果不足3個(gè)字節(jié),則使用填充字符(通常是 = )來(lái)補(bǔ)足。 2. Bas
    的頭像 發(fā)表于 11-10 10:48 ?1169次閱讀

    探針頭型使用方法有哪些

    探針頭型的使用方法多種多樣,具體取決于探針頭型的類型、被測(cè)對(duì)象的特性以及測(cè)試需求。以下是一些常見(jiàn)探針頭型的使用方法概述: 1. 凹頭探針 用途 :主要用于測(cè)試長(zhǎng)導(dǎo)腳、端子及繞線柱等較長(zhǎng)或較粗的被測(cè)點(diǎn)
    的頭像 發(fā)表于 09-07 10:57 ?686次閱讀

    LangChain框架關(guān)鍵組件的使用方法

    LangChain,開(kāi)發(fā)者可以輕松構(gòu)建基于RAG或者Agent流水線的復(fù)雜應(yīng)用體系,而目前我們已經(jīng)可以在LangChain的關(guān)鍵組件LLM,Text Embedding和Reranker中直接調(diào)用OpenVINO進(jìn)行模型部署,提升本地RAG和Agent服務(wù)的性能,接下來(lái)就讓我們一起看下這些組件的
    的頭像 發(fā)表于 08-30 16:55 ?616次閱讀
    LangChain框架關(guān)鍵組件的<b class='flag-5'>使用方法</b>

    DC/DC模擬的基本使用方法和特性確認(rèn)方法

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

    淺談錫膏的儲(chǔ)存及使用方法

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

    可編程電源使用方法

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

    手柄控制代碼及使用方法

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

    Microsoft Excel融入手寫(xiě)筆功能,助您快速插入、刪除單元格數(shù)據(jù)

     Microsoft今日宣布,向Microsoft 365內(nèi)部人士開(kāi)放Windows版本Excel的“Ink to Text”功能的試用機(jī)會(huì)。此工具旨在將手寫(xiě)字跡轉(zhuǎn)為文字,使表格數(shù)據(jù)填充更便捷高效。
    的頭像 發(fā)表于 04-30 14:16 ?1008次閱讀

    微軟發(fā)布Windows版OneNote應(yīng)用AI手寫(xiě)矯正功能

    微軟官方解釋稱,這一功能旨在優(yōu)化和調(diào)整手寫(xiě)字體,使之更加整潔美觀且更具連貫性。這不僅能提升OneNote中的手寫(xiě)字體可讀性,而且不會(huì)改變?cè)?b class='flag-5'>手寫(xiě)字效的獨(dú)特風(fēng)格與個(gè)性化特點(diǎn),方便用戶日后再次審閱及分享。
    的頭像 發(fā)表于 04-18 10:59 ?573次閱讀

    手機(jī)信號(hào)屏蔽器:功能、原理及使用方法詳解

    深圳特信電子|手機(jī)信號(hào)屏蔽器:功能、原理及使用方法詳解
    的頭像 發(fā)表于 04-01 09:09 ?3149次閱讀

    555集成芯片的使用方法

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

    OpenVINO添加對(duì)Paddle 2.5的支持

    我是飛槳黑客馬拉松第五期 OpenVINO 賽題獲獎(jiǎng)?wù)摺獮?OpenVINO 添加了對(duì) Paddle 2.5 的支持。在此記錄下來(lái)貢獻(xiàn)的過(guò)程,希望有更多的同學(xué)可以參與到 OpenVINO 的社區(qū)
    的頭像 發(fā)表于 01-19 09:20 ?646次閱讀

    基于OpenVINO?和AIxBoard的智能安檢盒子設(shè)計(jì)

    公共安全問(wèn)題日益凸顯,傳統(tǒng)安檢手段面臨挑戰(zhàn)。為提高安檢效率和保障公共安全,基于 OpenVINO? 和 AIxBoard 的智能安檢盒子應(yīng)運(yùn)而生。
    的頭像 發(fā)表于 01-18 17:31 ?834次閱讀
    基于<b class='flag-5'>OpenVINO</b>?和AIxBoard的智能安檢盒子設(shè)計(jì)

    磁場(chǎng)探頭和電場(chǎng)探頭的使用方法與技巧

    磁場(chǎng)探頭和電場(chǎng)探頭的使用方法與技巧? 磁場(chǎng)探頭和電場(chǎng)探頭是用于測(cè)量磁場(chǎng)和電場(chǎng)的儀器。它們?cè)诳茖W(xué)實(shí)驗(yàn)、工程設(shè)計(jì)和實(shí)際應(yīng)用中都起著重要的作用。本文將詳細(xì)介紹磁場(chǎng)探頭和電場(chǎng)探頭的使用方法和技巧。 一、磁場(chǎng)
    的頭像 發(fā)表于 01-05 14:31 ?943次閱讀