Halcon中OCR的實現及關鍵函數解析

OCR的實現共分為兩步,1是使用字符數據來訓練OCR。2是使用OCR進行字符的識別

訓練分類器

  訓練分類器共分為4步:

1是使用閾值來分割字符區域

2是調用append_ocr_trainf函數將字符加入訓練集;

3是創建分類器

4是調用trainf_ocr_class_mlp函數來訓練分類器。

*對字符進行訓練得到分類器
TrainingNames := ['F','M','1','4','A','4','2']
FontName := 'F:/YM_Project/SZWX/work_x32_MFOL2/function/MFOL2'
TrainingFileName := FontName+'.trf'
*當dev_set_check的參數為'~give_error'時,這次檢測會被忽略,程序進入后面的操作。
dev_set_check ('~give_error')
*刪除指定位置的文件
delete_file (TrainingFileName)
for i := 0 to |TrainingNames|-1 by 1select_obj (FinalNumbers, CharaterRegions, i+1)*將字符CharaterRegions添加到訓練集TrainingFileName中append_ocr_trainf (CharaterRegions, FourthDarkImage, TrainingNames[i], TrainingFileName)disp_message (WindowID, TrainingNames[i], 'image', MeanRow-40, Column[i]-6, 'yellow', 'false')
endfor
*tuple_uniq( : : Tuple : Uniq)
*相鄰重疊的元組只保留一個。常用于tuple_sort( : : Tuple : Sorted)之后,tuple_sort是升序排列。
CharNames := uniq(sort(TrainingNames))
*創建mlp
create_ocr_class_mlp (8, 10, 'constant', 'default', CharNames, 5, 'none', 10, 42, OCRHandle)
*使用訓練集來訓練mlp
trainf_ocr_class_mlp (OCRHandle, TrainingFileName, 200, 1, 0.01, Error, ErrorLog)
write_ocr_class_mlp (OCRHandle, FontName)
clear_ocr_class_mlp (OCRHandle)

使用分類器進行識別
  使用分類器進行字符識別的函數有兩個:1是do_ocr_multi_class_mlp,該函數對一幅圖像內的多個字符進行一次分類并輸出分類結果。2是do_ocr_single_class_mlp,該函數是對一幅圖像中的單個字符進行分類。兩者的對比試驗表明,后者的分類準確度要高,因此,下文使用do_ocr_single_class_mlp算子進行字符的分類。?
  分類的實現分為4步:1是讀取分類器;2是讀取圖片;3是分割單個字符;4分類

*Step1根據分類器來分類
read_ocr_class_mlp (FontName, OCRHandle)
*Step2讀取圖片獲得每一個圖像
read_image (Image, 'F:/YM_Project/SZWX/1024SZWX/SVS900_XFMT1X110_CR6030_S1_4.bmp')
*Step3分割單個字符
gen_rectangle1 (Rectangle1, 43, 2243, 707, 3675)
reduce_domain (Image, Rectangle1, ImageReduced1)
crop_domain (ImageReduced1, ImagePart)
median_image (ImagePart, ImageReduced1, 'circle', 3, 'mirrored')
threshold (ImageReduced1, Regions, 84, 255)
opening_circle (Regions, RegionOpening, 3.5)
connection (RegionOpening, ConnectedRegions)
select_shape (ConnectedRegions, Numbers, 'area', 'and', 1000, 9999)
count_obj (Numbers, CharacterNums)
ArrayConfidence := []
for IndexCharacter := 1 to CharacterNums by 1select_obj (Numbers, CharacterSelected, IndexCharacter)  *Step4分類do_ocr_single_class_mlp(CharacterSelected, ImagePart, OCRHandle,1, Class, Confidence)ArrayConfidence := [ArrayConfidence,Confidence]
endfor

關鍵函數解析

create_ocr_class_mlp( : : WidthCharacter, HeightCharacter, Interpolation, Features, Characters, NumHidden, Preprocessing, NumComponents, RandSeed : OCRHandle)WidthCharacter:輸入被分割的字符縮放到指定的寬度
HeightCharacter:
Interpolation:設置縮放的字符的縮放模式,對于多數應用而言,Interpolation = 'constant'。請注意:轉換后的字符大小不能太大,因為分類器對較大尺寸的字符分類效果并不好。特別是,如果尺寸較大,一些小的分割誤差會較大程度上影響分類的效果,一般情況下,sizes between 6x8 and 10x14
Features:分類的特征向量的長度
Characters:輸出層神經元的個數;也就是是需要匹配的字符查閱表中字符的個數。
NumHidden:MLP中隱藏層神經元的個數
Preprocessing:矢量特征裝換的預處理類型
NumComponents:匹配字符的數量
這兩個參數主要是對輸入的值進行預處理。RandSeed:初始化mlp
OCRHandle:輸出OCR_mlp分類器句柄

trainf_ocr_class_mlp( : : OCRHandle, TrainingFile, MaxIterations, WeightTolerance, ErrorTolerance : Error, ErrorLog)
訓練一個神經網絡分類器

do_ocr_multi_class_mlp(Character, Image : : OCRHandle : Class, Confidence)
使用OCR分類多個字符
Character是字符區域
Image是字符圖片
OCRHandle是分類器句柄
Class是輸出的類別
Confidence是輸出的分類精度


do_ocr_single_class_mlp(CharacterSelected, ImagePart, OCRHandle,1, Class, Confidence)
分類單個字符,其分類效果比上述同時分類多個字符的效果要好
---------------------?
作者:羅澤?
來源:CSDN?
原文:https://blog.csdn.net/u013698770/article/details/53842205?
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458071.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458071.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458071.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MATLAB 長度和像素_Matlab中短時傅里葉變換 spectrogram和stft的用法

在Matlab中,做短時傅里葉變換需要使用函數spectrogram,而在Matlab2019中,引入了一個新的函數stft,下面我們就來看下這兩個函數都如何使用。短時傅里葉變換的基本原理就是將數據分段加窗,做fft,在分段時會有…

Qt 【關于控件樣式,鼠標進入、離開、點擊】

比如舉以下這個例子: QPushButton * okBtn; okBtn->setstylesheet("QPushButton{border-image:url(:/image/hello);}"); //這個是最常規的樣式 okBtn->setstylesheet("QPushButton{border-image:url(:/image/hello);}" //…

圖像處理基礎——灰度共生矩陣

標準定義如下:對于取定的方向θ 和距離 d, 在方向為θ的直線上, 一個像元灰度為 i, 另一個與其相距為 d 像元的灰度為 j 的點對出現的頻數即為灰度共生矩陣第(i, j)陣元的值。 怎樣理解呢?看起來好復雜呀 嗚嗚嗚 小白理解:灰度共生矩陣就…

iphone查看刪除的短信_iPhone12發布!剛買的蘋果手機短信全部消失了怎么辦?

原標題:iPhone12發布!剛買的蘋果手機短信全部消失了怎么辦?目前,人們的社交除了面對面交談,用的最多的就是通過手機進行聊天,比如用QQ、微信和短信、郵件等方式,雖然短信不會用來一般的聊天&…

[唐詩]182宮中行樂詞(其一)-李白

宮中行樂詞(其一)-李白 小小生金屋, 盈盈在紫微。 山花插寶髻, 石竹繡羅衣。 每出深宮里, 常隨步輦歸。 只愁歌舞散, 化作彩云飛。

python基礎之01數據類型-變量-運算淺解

python的數據類型 1 數字 數字分為整型(int),長整型(long),浮點型(float),復數(complex) 整型較為常用的功能: >>> a-4 >…

使用Caffe進行手寫數字識別執行流程解析

之前在 http://blog.csdn.net/fengbingchun/article/details/50987185 中仿照Caffe中的examples實現對手寫數字進行識別,這里詳細介紹下其執行流程并精簡了實現代碼,使用Caffe對MNIST數據集進行train的文章可以參考 http://blog.csdn.net/fengbingchun/…

obs可以裝手機嗎?_原神PC和手機數據互通嗎 PC和手機可以一起玩嗎

在原神中,很多玩家都在PC端創建了角色,那么疑問來了,PC端與手機端的賬號會是互通的嗎?下面小編就為大家帶來原神PC和手機數據互通嗎的相關內容,一起來看看吧!更多攻略:原神攻略大全PC和手機數據…

學習linux第二周作業

第二周作業:本周作業內容:1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。touch,rm,mv,cp,file,ls,chmod,chown,ln,rename,touch 修改文件atime,如果文件不存在,那么創建該文件。rm&#xff1…

三維點云目標提取總結(續)

三維點云目標提取(續) 3.三維點云目標提取 3.1一般流程 先根據個人認識總結一下目標提取的一般性步驟: 如上所示,三維點云的目標提取關鍵性的兩步即為:特征提取與選擇、分類,是不是整個方法流程與圖像中的目…

安卓高手之路之java層Binder

很多人一提到Binder就說代理模式,人云亦云的多,能理解精髓的少。 本篇文章就從設計角度分析一下java層BInder的設計目標,以及設計思路,設計缺陷,從而駕馭它。 對于【邦德兒】的理解, 從通信的角度來看,就是…

ftp改為sftp_淺談 FTP、FTPS 與 SFTP

二狗子最近搭建了一個圖片分享網站,每天都有好多人在他的網站上傳許多照片,這些照片還會通過內部的邏輯同步到又拍云存儲中,非常方便。但不久后問題就來了,由于剛開始的用戶照片管理規劃沒有做好,隨著用戶上傳的圖片越…

如何解決秒殺的性能問題和超賣的討論

2019獨角獸企業重金招聘Python工程師標準>>> 最近業務試水電商,接了一個秒殺的活。之前經常看到淘寶的同行們討論秒殺,討論電商,這次終于輪到我們自己理論結合實際一次了。 ps:進入正文前先說一點個人感受,…

C# 從Excel中讀取時間數據

之前寫到從Excel中讀取時間數據 //讀取Excel數據Excel.Application xapp new Excel.Application();string filepath txt_Excel.Text;Excel.Workbook xbook xapp.Workbooks._Open(filepath, Missing.Value, Missing.Value,Missing.Value, Missing.Value, Missing.Value, Miss…

grid autosport額外內容下載慢_清理大王app下載-清理大王v1.0安卓下載

清理大王,下面由小編給大家介紹一下這款軟件,該軟件是一款非常不錯的手機清理服務應用軟件,清理大王app為用戶提供了手機垃圾清理,內存加速,優化手機,解決手機卡頓的情況。感興趣的朋友歡迎使用微俠下載&am…

(轉)瀏覽器兼容的JS寫法總結

-、元素查找問題1. document.all[name] (1)現有問題:Firefox不支持document.all[name] (2)解決方法:使用getElementsByName(name),getElementById(id)等來替代。 2. 集合類對象問題 (1)現有問題:IE中對許多集合類對…

java面試總結(第一天)

臨近大學畢業,出來試試找工作,學c#出身,半路出家java,做過幾個ssh、stringMVC的項目。基礎知識不太扎實,勿噴 以下是我面試過程中遇到的問題 ----------------------------------------------------------------------…

怎么看cudnn的版本好_祖墳風水怎么看,好祖墳有什么征兆?

人們之所以看重祖墳的風水,是因為祖墳的風水與后代子孫的運勢密切相關,可以說祖墳的風水好不好關系著子孫后代的運勢順不順,因此對于祖墳的風水好壞人們是非常在意的,那么祖墳風水怎么看,好祖墳有什么征兆呢?下面是小編…

iOS - Swift SQLite 數據庫存儲

前言 采用 SQLite 數據庫來存儲數據。SQLite 作為一中小型數據庫,應用 iOS 中,跟前三種保存方式相比,相對比較復雜一些。注意:寫入數據庫,字符串可以采用 char 方式,而從數據庫中取出 char 類型&#xff0c…

Hibernate 多對多關聯查詢條件使用

from Brand as b inner join fetch b.styles as s where s.styleId? 轉載于:https://www.cnblogs.com/cocoat/p/5427467.html