问题点如下:1:有几个字符容易识别错乱,1与字母I,标点符号.容易识别成*。
2:第三行开头字母2的印刷出现断裂情况会识别错误。
代码如下:
- dev_set_check('give_error')
- dev_set_draw('margin')
- dev_set_colored(12)
- dev_close_window()
- dev_open_window(0, 0, 900, 700, 'black', WindowHandle)
- read_image(Image, 'D:/鸟叔培训/OCR识别/箱子/1/1.bmp')
- * draw_rectangle2(WindowHandle, RowCenter, ColCenter, Phi1, Length11, Length21)
- * gen_rectangle2(ModelRect, RowCenter, ColCenter, Phi1, Length11, Length21)
- * reduce_domain(Image, ModelRect, ImageReduced)
- *定位创建H字符的轮廓模板定位字符区域
- * create_shape_model(ImageReduced, 'auto', rad(-3), rad(6), 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)
- * if(ModelID > -1)
- * write_shape_model(ModelID, 'D:/鸟叔培训/OCR识别/字符轮廓模板——1.shm')
- * clear_shape_model(ModelID)
- * ModelID := -1
- * endif
- *保存设定字符模板中心坐标信息
- * ModelRectInfo := [RowCenter, ColCenter]
- * write_tuple(ModelRectInfo, 'D:/鸟叔培训/OCR识别/字符模板中心坐标——1.tup')
- Char1 := []
- Char2 := []
- Char3 := []
- * Ocr :=[]
- *绘制字符出现区域减小识别时间
- draw_rectangle2(WindowHandle, Row, Column, Phi, Length1, Length2)
- gen_rectangle2(TestRect, Row, Column, Phi, Length1, Length2)
- *读取模板信息
- read_shape_model('D:/鸟叔培训/OCR识别/字符轮廓模板——1.shm',ID)
- *读取字符检测区域信息
- read_tuple('D:/鸟叔培训/OCR识别/字符模板中心坐标——1.tup',RectInfo)
- *读取OCR字库
- read_ocr_class_mlp('Industrial_NoRej.omc',OCRHandle)
- * Image Acquisition 01: Code generated by Image Acquisition 01
- list_files ('D:/鸟叔培训/OCR识别/箱子/1', ['files','follow_links'], ImageFiles)
- tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)
- ,'ignore_case'], ImageFiles)
- for Index := 0 to |ImageFiles| - 1 by 1
- read_image (Image, ImageFiles[Index])
- *模板匹配定位字符区域
- find_shape_model(Image, ID, rad(-3), rad(6), 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score)
- if(Score > 0.9)
- *仿射变换跟随字符测量区域
- vector_angle_to_rigid(RectInfo[0],RectInfo[1],0,Row, Column, Angle,HomMat2D)
- affine_trans_region(TestRect, RegionAffineTrans, HomMat2D, 'nearest_neighbor')
- *分割提取字符区域
- reduce_domain(Image, RegionAffineTrans, ImageReduced)
- *动态阈值分割
- mean_image(ImageReduced, ImageMean, 50, 50)
- dyn_threshold(ImageReduced,ImageMean, RegionDynThresh, 20, 'dark')
- *连通性分析
- fill_up_shape(RegionDynThresh, RegionFillUp, 'area', 1, 100)
- closing_circle(RegionFillUp, RegionClosing, 2)
- connection(RegionClosing, ConnectedRegions)
- select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 80, 2000)
- opening_circle(SelectedRegions, RegionOpening, 1)
- *横向膨胀把字符连接
- dilation_rectangle1(SelectedRegions, RegionDilation, 80, 2)
- union1(RegionDilation, RegionUnion)
- connection(RegionUnion, OcrConnectedRegions)
- sort_region(OcrConnectedRegions, SortedRegions1, 'first_point', 'true', 'row')
- *排序选择行区域识别字符
- count_obj(SortedRegions1, Number)
- for i:=0 to Number-1 by 1
- select_obj(SortedRegions1, ObjectSelected, i+1)
- intersection(SelectedRegions, ObjectSelected, RegionIntersection)
- *排序字符区域
- sort_region(RegionIntersection, SortedRegions, 'character', 'true', 'column')
- *执行字符识别
- do_ocr_multi_class_mlp(SortedRegions, Image, OCRHandle, Class, Confidence)
- * do_ocr_multi_class_mlp(SortedRegions, Image, OCRHandle, Ocr, Confidence)
- if(i=0)
- Char1 := Class
- elseif(i=1)
- Char2 := Class
- elseif(i=2)
- Char3 := Class
- endif
- endfor
- *显示提示信息
- disp_obj(Image,WindowHandle)
- disp_obj(SelectedRegions, WindowHandle)
- disp_message(WindowHandle, Char1, 'window', 20, 20, 'red', 'true')
- disp_message(WindowHandle, Char2, 'window', 20, 50, 'red', 'true')
- disp_message(WindowHandle, Char3, 'window', 20, 80, 'red', 'true')
- stop()
- endif
- endfor
- clear_shape_model(ID)
复制代码 相关图片:链接:http://pan.baidu.com/s/1kVPOu7H 密码:wq1m
|