玩转车牌识别halcon(自己训练)

入门机器视觉demo之玩转车牌识别**

1. demo介绍

车牌识别这个demo主要是为了检测自己学习的成果。其运用的知识点有blob分析,形态学,ocr训练,ocr识别等等知识点的运用不多说上干货!!
首先是效果图(车牌的是从网上找的如有冒犯麻烦立即修改
在这里插入图片描述
效果图(在茫茫互联网中找到适合自己学习的材料容易贴效果图是为了不耽误大家时间
在这里插入图片描述
2. 代码部分

dev_close_window ()
read_image (Image, 'D:/图片素材/车牌.png')
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
set_display_font (WindowHandle, 30, 'mono', 'true', 'false')
dev_update_off ()
*需要训练的内容
carArr:=['粤','B','W','3','9','S','5']
*保存ocr文件路径
fttSrc:='D:/halconProject/halcon_ftt_project/车牌ftt.trf'

decompose3 (Image, Image1, Image2, Image3)
trans_from_rgb (Image1, Image2, Image3, ImageResult1, ImageResult2, ImageResult3, 'hsv')
threshold (ImageResult2, Regions, 207, 255)
connection (Regions, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 18361.7, 19855.8)
fill_up (SelectedRegions, RegionFillUp)
*根据车牌矫正图片位置
orientation_region (RegionFillUp, Phi)
area_center (RegionFillUp, Area, Row, Column)
vector_angle_to_rigid (Row, Column, Phi, Row, Column, 0, HomMat2D)
affine_trans_image (Image, ImageAffineTrans, HomMat2D, 'constant', 'false')
affine_trans_region (RegionFillUp, RegionAffineTrans, HomMat2D, 'nearest_neighbor')
*裁剪车牌所在区域 减小干扰
reduce_domain (ImageAffineTrans, RegionAffineTrans, ImageReduced)
rgb1_to_gray (ImageReduced, GrayImage)
decompose3 (ImageReduced, Image11, Image21, Image31)
trans_from_rgb (Image11, Image21, Image31, ImageResult11, ImageResult21, ImageResult31, 'hsv')
threshold (ImageResult21, Regions1, 0, 105)
connection (Regions1, ConnectedRegions1)
select_shape (ConnectedRegions1, SelectedRegions1, ['area','column'], 'and', [0,327.92], [2000,404.55])
select_shape (ConnectedRegions1, SelectedRegions2, ['area','column'], 'and', [0,447.4], [2000,1000])
union2 (SelectedRegions1, SelectedRegions2, RegionUnion)
connection (RegionUnion, ConnectedRegions2)
select_shape (ConnectedRegions2, SelectedRegions3, 'area', 'and', 0, 487.01)
select_shape (RegionUnion, SelectedRegions4, 'column1', 'and', 360.714, 500)
*拿到粤字  和 车牌中的其余字体
union1 (SelectedRegions3, RegionUnion1)
closing_circle (RegionUnion1, RegionClosing, 3)
union2 (RegionClosing, SelectedRegions4, RegionUnion2)
connection (RegionUnion2, ConnectedRegions3)
sort_region (ConnectedRegions3, SortedRegions, 'character', 'true', 'column')
count_obj (ConnectedRegions3, Number)
len:=Number
*遍历每一个区域
for Index2 := 1 to len by 1
    select_obj (SortedRegions, ObjectSelected, Index2)
endfor
*创建ftt文件

for Index1 := 1 to len by 1
    select_obj (SortedRegions, ObjectSelected, Index1)
    append_ocr_trainf (ObjectSelected, ImageAffineTrans, carArr[Index1-1], fttSrc)
     *write_ocr_trainf (SortedRegions, ImageAffineTrans,carArr[Index1-1], fttSrc)
endfor
dev_display (ImageResult11)
*加载创建的文件
read_ocr_trainf_names (fttSrc, CharacterNames, CharacterCount)
*创建神经网络分分类器
create_ocr_class_mlp (10, 20, 'constant', 'default', CharacterNames, 80, 'none', 10, 42, OCRHandle1)
*修炼分类器
trainf_ocr_class_mlp (OCRHandle1, fttSrc, 200, 1, 0.01, Error, ErrorLog)
*保存训练好的文件
write_ocr_class_mlp (OCRHandle1, fttSrc)
*识别
read_ocr_class_mlp (fttSrc, OCRHandle)
do_ocr_multi_class_mlp (SortedRegions, ImageReduced, OCRHandle, Class, Confidence)

dev_display (ImageAffineTrans)
for Index := 1 to len by 1
    set_tposition (WindowHandle, Row+30, Column-50+(Index*30))
     write_string (WindowHandle, Class[Index-1])
endfor

3. 总结

  1. 在做这个项目中通过阈值分割汉字粤字处理起来比较麻烦在处理这个汉字的时候我才用了分开处理把粤字和其它内容分开通过形态(闭运算closing)学处理把汉字连接起来在通过union1算子把他们都连接起来(上效果图)
    阈值分割处理后的图
    在这里插入图片描述
    通过分开处理后的图完整美的把粤字连接起来
    在这里插入图片描述
    为什么要怎么麻烦?因为ocr识别识别的是一个区域(region)在halcon中如果不连接起来就是两个或多个区域不易识别

  2. 自己训练分类器

    自己训练分类器步骤就是
    *加载创建的文件
    *创建神经网络分分类器
    *保存训练好的文件
    *ocr(Optical Character Recognition)识别
    
*创建ftt文件
for Index1 := 1 to len by 1
    select_obj (SortedRegions, ObjectSelected, Index1)
    append_ocr_trainf (ObjectSelected, ImageAffineTrans, carArr[Index1-1], fttSrc)
     *write_ocr_trainf (SortedRegions, ImageAffineTrans,carArr[Index1-1], fttSrc)
endfor
dev_display (ImageResult11)
*加载创建的文件
read_ocr_trainf_names (fttSrc, CharacterNames, CharacterCount)
*创建神经网络分分类器
create_ocr_class_mlp (10, 20, 'constant', 'default', CharacterNames, 80, 'none', 10, 42, OCRHandle1)
*修炼分类器
trainf_ocr_class_mlp (OCRHandle1, fttSrc, 200, 1, 0.01, Error, ErrorLog)
*保存训练好的文件
write_ocr_class_mlp (OCRHandle1, fttSrc)
*识别
read_ocr_class_mlp (fttSrc, OCRHandle)
do_ocr_multi_class_mlp (SortedRegions, ImageReduced, OCRHandle, Class, Confidence)

算子分析

*追加训文字识
append_ocr_trainf (ObjectSelected, ImageAffineTrans, carArr[Index1-1], fttSrc)
*一次性写入所有需要训练的图形
*write_ocr_trainf (SortedRegions, ImageAffineTrans,carArr[Index1-1], fttSrc)

最后就是初学halcon做的小demo,如有不对的地方请大佬指正立即修改,学习路漫漫,加油@~@

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值