*
* Training of the OCR
* The font is used in "bottle.hdev"
*
*
* Step 0: Preparations
FontName := 'bottle'
*
* Step 1: Segmentation
dev_update_window ('off')
read_image (Bottle, 'bottle2')
get_image_size (Bottle, Width, Height)
dev_close_window ()
dev_open_window (0, 0, 2 * Width, 2 * Height, 'black', WindowID)
dev_display (Bottle)
dev_set_draw ('fill')
set_display_font (WindowID, 27, 'mono', 'true', 'false')
threshold (Bottle, RawSegmentation, 0, 95)
fill_up_shape (RawSegmentation, RemovedNoise, 'area', 1, 5)
*圆形结构开运算 可以平滑区域的边缘和消除小的区域 形态学————Region
opening_circle (RemovedNoise, ThickStructures, 2.5)
fill_up (ThickStructures, Solid)
* dilation_rectangle1 (Solid, RegionDilation, 1, 7)
* erosion_rectangle1 (RegionDilation, RegionErosion, 2, 14)
*矩形结构开运算 形态学————Region
opening_rectangle1 (Solid, Cut, 1, 7)
connection (Cut, ConnectedPatterns)
*区域的交集 Regions区域——————区域设置Sets
intersection (ConnectedPatterns, ThickStructures, NumberCandidates)
select_shape (NumberCandidates, Numbers, 'area', 'and', 300, 9999)
*sort_region(Regions : SortedRegions : SortMode, Order, RowOrCol : ) Regions区域——————区域转换Transformations
*SortMode:排序的类型 Order:true递增 false递减 RowOrCol:行优先或列优先
sort_region (Numbers, FinalNumbers, 'first_point', 'true', 'column')
dev_display (Bottle)
dev_set_color ('green')
dev_set_line_width (2)
*设置区域的输出模式 original(最初的) convex(凸) outer_circle(外接圆) inner_circle(内接圆)
*rectangle1(平行外接矩形) rectangle2(角度矩形) ellipse(椭圆) icon(图标)
dev_set_shape ('rectangle1')
dev_set_draw ('margin')
dev_display (FinalNumbers)
*
* Step2: Training file generation
dev_set_shape ('original')
TrainingNames := ['0','1','0','8','9','4']
TrainingFileName := FontName + '.trf'
sort_region (FinalNumbers, SortedRegions, 'first_point', 'true', 'column')
*转换区域 Regions区域——————区域转换Transformations
shape_trans (SortedRegions, RegionTrans, 'rectangle1')
area_center (RegionTrans, Area, Row, Column)
*等同于tuple_mean (Row, Mean) 平均数
MeanRow := mean(Row)
*设置错误处理 ~give_error忽略错误
dev_set_check ('~give_error')
*前面设置忽略错误,如果TrainingFileName不存在,那么在删除时就不会报错
delete_file (TrainingFileName)
*再设置为默认状态,不忽略错误
dev_set_check ('give_error')
for i := 0 to |TrainingNames| - 1 by 1
select_obj (SortedRegions, CharaterRegions, i + 1)
*字符识别(OCR)——————训练文件(Training Files)
*向训练文件中添加字符
*append_ocr_trainf(Character, Image : : Class, TrainingFile : )
*Character:要添加的训练字符 Image:灰度图像 Class:类名,制定字符的分类 TrainingFile:训练文件,扩展名(.trf .otr)
append_ocr_trainf (CharaterRegions, Bottle, TrainingNames[i], TrainingFileName)
disp_message (WindowID, TrainingNames[i], 'image', MeanRow - 40, Column[i] - 6, 'yellow', 'false')
endfor
*
* Step3: Training
*Tuple_uniq源自(元组Tuple:选择Selection)
*剔除Tuple变量中连续且相同的元素,只保存一个,剩下的元素构成新的Tuple变量返回
CharNames := uniq(sort(TrainingNames))
*归类字符识别OCR——————神经网络Neural Nets
*创建一个用于多层感知器(MLP)的OCR分类器
create_ocr_class_mlp (8, 10, 'constant', 'default', CharNames, 5, 'none', 10, 42, OCRHandle)
*用OCR训练文件中存储的训练字符来训练基于MLP的OCR分类器
trainf_ocr_class_mlp (OCRHandle, TrainingFileName, 200, 1, 0.01, Error, ErrorLog)
*将OCR分类器写入到文件中, 扩展名.omc
write_ocr_class_mlp (OCRHandle, FontName)
*清除由句柄参数OCRHandle指定的由算子create_ocr_class_mlp创建的OCR分类器
clear_ocr_class_mlp (OCRHandle)

Halcon示例:bottlet.hdev 光学字符识别(创建OCR)的更多相关文章

  1. HALCON示例:BOTTLE.HDEV 光学字符识别(分割OCR)

    * * bottle.hdev: Segment and read numbers on a beer bottle 分割读取啤酒瓶上的数字* * Step 0: Preparations* Spec ...

  2. 【OCR技术系列一】光学字符识别技术介绍

    注:此篇内容主要是综合整理了光学字符识别 和OCR技术系列之一]字符识别技术总览,详情见文末参考文献 什么是 OCR? OCR(Optical Character Recognition,光学字符识别 ...

  3. Tesseract:简单的Java光学字符识别

    1.1 介绍 开发具有一定价值的符号是人类特有的特征.对于人们来说识别这些符号和理解图片上的文字是非常正常的事情.与计算机那样去抓取文字不同,我们完全是基于视觉的本能去阅读它们. 另一方面,计算机的工 ...

  4. 非黑即白--谷歌OCR光学字符识别

    # coding=utf-8 #非黑即白--谷歌OCR光学字符识别 # 颜色的世界里,非黑即白.computer表示深信不疑. # 今天研究一下OCR光学识别庞大领域中的众多分支里的一个开源项目的一个 ...

  5. [Xcode 实际操作]七、文件与数据-(22)使用OCR光学字符识别技术识别银行卡号码

    目录:[Swift]Xcode实际操作 本文将演示如何使用光学字符识别技术,识别信用卡上的卡号. OCR技术是光学字符识别的缩写(Optical Character Recognition), 是通过 ...

  6. 激光三角测量(sheet of light)halcon示例详解 Reconstruct_Connection_Rod_Calib.hdev 三维重建

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/11555100.html 前言:最近项目用到halcon的3d模板匹配,三维重建,相机标定,所以 ...

  7. Ocrad.js – JS 实现 OCR 光学字符识别

    Ocrad.js 相当于是 Ocrad 项目的纯 JavaScript 版本,使用 Emscripten 自动转换.这是一个简单的 OCR (光学字符识别)程序,可以扫描图像中的文字回文本. 不像 G ...

  8. 6 个优秀的开源 OCR 光学字符识别工具

    转自:http://sigvc.org/bbs/thread-870-1-1.html 纸张在许多地方已日益失宠,无纸化办公谈论40多年,办公环境正限制纸山的生成.而过去几年,无纸化办公的概念发生了显 ...

  9. 光学字符识别OCR

    1.功能: 光学字符识别(OCR,Optical Character Recognition)是指对文本资料进行扫描,然后对图像文件进行分析处理,获取文字及版面信息的过程 2.典型应用: 名片扫描 3 ...

随机推荐

  1. SQLI DUMB SERIES-7

    (1)查看PHP源代码 可以看见输入的id被一对单引号和两对圆括号包围 (2)根据提示:Dump into Outfile可知,此次攻击需要导出文件 (3)在第一关获取 @@datadir 读取数据库 ...

  2. zabbix的自动发现、自定义添加监控项目、配置邮件告警

    1.zabbix的自动发现这里的自动发现,所显示出来的是规则的上自动了现 然后 可以对其内容进行相关的配制,如时间或周期 注意:对于单个主机的规则,可以自行添加或删除, 但对于已经添加好了的规则,若需 ...

  3. PythonStudy——数据类型 Type of data

    数据类型:信息存在的状态为什么要来描述事物的具体状态:不同的事物需要不同的状态加以描述可以达到描述的最优化 python中有哪些常见的数据类型 1.整型 num = 10000000000000000 ...

  4. 搭建自己的Docker registry(五)

    弄了一天,在网上查了很多资料,感觉都好复杂好复杂,一步一步踩坑踩出来就好了. 服务器:阿里云(香港) 环境:CentOS Linux release 7.4.1708 (Core) Docker:1. ...

  5. LOJ 2991 「THUSC 2016」补退选——trie+线段树合并或vector

    题目:https://loj.ac/problem/2291 想了线段树合并的做法.就是用线段树维护 trie 的每个点在各种时间的操作. 然后线段树合并一番,线段树维护前缀最大值,就是维护最大子段和 ...

  6. bootstrapValidator关于js,jquery动态赋值不触发验证(不能捕获“程序赋值事件”)解决办法

    //触发oninput事件 //propertychange 兼容ie678 $('#captainName').on('input propertychange', function() { }); ...

  7. Eclipse+PyDev 安装和配置

    Eclipse+PyDev 安装和配置 2012-03-17 23:23:23 | 17465次阅读 | 评论:0 条 |  Python开发有很多工具,其中Eclipse+Pydev 是最常见的一种 ...

  8. CSRF的防御解决过程

    CSRF是什么,就不多说,网络上的帖子多的去了,关于其定义. 这里主要介绍我们项目中,是如何解决这个问题的.方案比较简单,重点是介绍和记录一下遇到的问题和一些小的心得. 1. 解决方案 A. 用户登录 ...

  9. Java环境配置之JDK安装

    一.下载 现在JDK的版本很多.我下载的是jdk1.7 以下链接是jdk1.8的 http://www.oracle.com/technetwork/java/javase/downloads/jdk ...

  10. 关于Verilog中begin-end & fork-join

     转载:http://blog.sina.com.cn/s/blog_6c7b6f030101cpgt.html begin-end and fork-join are used to combi ...