设置首页收藏本站
开启左侧

halcon字符OCR识别案例

[复制链接]
soap_zhang 发表于 2016-9-8 09:33:52 | 显示全部楼层 |阅读模式
问题点如下:1:有几个字符容易识别错乱,1与字母I,标点符号.容易识别成*。
2:第三行开头字母2的印刷出现断裂情况会识别错误。
代码如下:
  1. dev_set_check('give_error')
  2. dev_set_draw('margin')
  3. dev_set_colored(12)
  4. dev_close_window()
  5. dev_open_window(0, 0, 900, 700, 'black', WindowHandle)

  6. read_image(Image, 'D:/鸟叔培训/OCR识别/箱子/1/1.bmp')

  7. * draw_rectangle2(WindowHandle, RowCenter, ColCenter, Phi1, Length11, Length21)
  8. * gen_rectangle2(ModelRect, RowCenter, ColCenter, Phi1, Length11, Length21)
  9. * reduce_domain(Image, ModelRect, ImageReduced)

  10. *定位创建H字符的轮廓模板定位字符区域
  11. * create_shape_model(ImageReduced, 'auto', rad(-3), rad(6), 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)
  12. * if(ModelID > -1)
  13. *     write_shape_model(ModelID, 'D:/鸟叔培训/OCR识别/字符轮廓模板——1.shm')
  14. *     clear_shape_model(ModelID)
  15. *     ModelID := -1
  16. * endif
  17. *保存设定字符模板中心坐标信息
  18. * ModelRectInfo := [RowCenter, ColCenter]
  19. * write_tuple(ModelRectInfo, 'D:/鸟叔培训/OCR识别/字符模板中心坐标——1.tup')

  20. Char1 := []
  21. Char2 := []
  22. Char3 := []
  23. * Ocr :=[]

  24. *绘制字符出现区域减小识别时间
  25. draw_rectangle2(WindowHandle, Row, Column, Phi, Length1, Length2)
  26. gen_rectangle2(TestRect, Row, Column, Phi, Length1, Length2)
  27. *读取模板信息
  28. read_shape_model('D:/鸟叔培训/OCR识别/字符轮廓模板——1.shm',ID)
  29. *读取字符检测区域信息
  30. read_tuple('D:/鸟叔培训/OCR识别/字符模板中心坐标——1.tup',RectInfo)
  31. *读取OCR字库
  32. read_ocr_class_mlp('Industrial_NoRej.omc',OCRHandle)

  33. * Image Acquisition 01: Code generated by Image Acquisition 01
  34. list_files ('D:/鸟叔培训/OCR识别/箱子/1', ['files','follow_links'], ImageFiles)
  35. tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)

  36. ,'ignore_case'], ImageFiles)
  37. for Index := 0 to |ImageFiles| - 1 by 1
  38.     read_image (Image, ImageFiles[Index])
  39.     *模板匹配定位字符区域
  40.     find_shape_model(Image, ID, rad(-3), rad(6), 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score)
  41.     if(Score > 0.9)
  42.         *仿射变换跟随字符测量区域
  43.         vector_angle_to_rigid(RectInfo[0],RectInfo[1],0,Row, Column, Angle,HomMat2D)
  44.         affine_trans_region(TestRect, RegionAffineTrans, HomMat2D, 'nearest_neighbor')
  45.         *分割提取字符区域
  46.         reduce_domain(Image, RegionAffineTrans, ImageReduced)
  47.         *动态阈值分割
  48.         mean_image(ImageReduced, ImageMean, 50, 50)
  49.         dyn_threshold(ImageReduced,ImageMean, RegionDynThresh, 20, 'dark')
  50.         *连通性分析
  51.         fill_up_shape(RegionDynThresh, RegionFillUp, 'area', 1, 100)
  52.         closing_circle(RegionFillUp, RegionClosing, 2)
  53.         connection(RegionClosing, ConnectedRegions)
  54.         select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 80, 2000)
  55.         opening_circle(SelectedRegions, RegionOpening, 1)
  56.         *横向膨胀把字符连接
  57.         dilation_rectangle1(SelectedRegions, RegionDilation, 80, 2)
  58.         union1(RegionDilation, RegionUnion)
  59.         connection(RegionUnion, OcrConnectedRegions)
  60.         sort_region(OcrConnectedRegions, SortedRegions1, 'first_point', 'true', 'row')
  61.         *排序选择行区域识别字符
  62.         count_obj(SortedRegions1, Number)
  63.         for i:=0 to Number-1 by 1
  64.             select_obj(SortedRegions1, ObjectSelected, i+1)
  65.             intersection(SelectedRegions, ObjectSelected, RegionIntersection)
  66.             *排序字符区域
  67.             sort_region(RegionIntersection, SortedRegions, 'character', 'true', 'column')
  68.             *执行字符识别
  69.             do_ocr_multi_class_mlp(SortedRegions, Image, OCRHandle, Class, Confidence)
  70. *             do_ocr_multi_class_mlp(SortedRegions, Image, OCRHandle, Ocr, Confidence)
  71.             if(i=0)
  72.                 Char1 := Class
  73.             elseif(i=1)
  74.                 Char2 := Class
  75.             elseif(i=2)
  76.                 Char3 := Class
  77.             endif

  78.         endfor

  79.         *显示提示信息
  80.         disp_obj(Image,WindowHandle)
  81.         disp_obj(SelectedRegions, WindowHandle)
  82.         disp_message(WindowHandle, Char1, 'window', 20, 20, 'red', 'true')
  83.         disp_message(WindowHandle, Char2, 'window', 20, 50, 'red', 'true')
  84.         disp_message(WindowHandle, Char3, 'window', 20, 80, 'red', 'true')

  85.         stop()
  86.     endif

  87. endfor



  88. clear_shape_model(ID)
复制代码
相关图片:链接:http://pan.baidu.com/s/1kVPOu7H 密码:wq1m
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
Criss 发表于 2016-9-8 09:50:00 | 显示全部楼层
1.在进行OCR之前,需要确保字符不会存在残缺,如果存在,则立刻停止进行OCR,并且提示字符印刷缺陷;
像这种残缺的字符,本身已经是不合格了,就不需要进行识别了。
2.识别错误,查看你的训练库是否正常,对于这种含有字母和数字的,其中1和i本身区别就不大,你怎么去判断是对还是错呢?
所以最好的方式是把英文识别和数字识别分开进行。
3.对于符号,也是特殊情况,这种符号就没有必要进行识别了,因为他本身并没有什么意义。工业生产中,只有其他字母和数字清晰
就完全没有问题了。
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
zj507071 发表于 2016-9-30 09:01:24 | 显示全部楼层
没有 字符轮廓模板文件发出了有什么用
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
 楼主| soap_zhang 发表于 2017-3-29 22:31:32 | 显示全部楼层
zj507071 发表于 2016-9-30 09:01
没有 字符轮廓模板文件发出了有什么用

你也是人才,要人喂你啊?
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
金毛狮王 发表于 2017-6-2 15:35:18 | 显示全部楼层
开头提到的问题怎么解决呢?
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
red0red 发表于 2019-5-15 17:53:00 | 显示全部楼层
兄弟 可以了 可以了
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表