如何做下载网站,网上商城公司网站建设方案,如何建立购物网站,中国建筑测评官网前言
HALCON是一个强大的机器视觉工具#xff0c;包含了2D#xff0c;3D图像各种算子#xff0c;以及各种任务的深度学习工具#xff0c;包括目标检测#xff0c;实例分割#xff0c;文字识别等。
这次从实际生产的角度#xff0c;来分享一下如何用HALCON进行文字识别…前言
HALCON是一个强大的机器视觉工具包含了2D3D图像各种算子以及各种任务的深度学习工具包括目标检测实例分割文字识别等。
这次从实际生产的角度来分享一下如何用HALCON进行文字识别。
衡量一个技术是否能在实际工业生产使用要考虑的因素
最重要的一点精度要高且稳定。在复杂的工业场景需要能稳定的做到非常高的精度而不是像简单的示例程序或者学生作品一样只是学习和展示使用。这点HALCON的深度学习OCR可以满足大部分普通的工业场景。 这里有一个细节HALCON的版本越高理论上提供的模型结构要越先进预训练模型精度也越高。这里使用的是22.05的版本。速度要快。HALCON做深度学习OCR即使使用CPU进行识别速度也非常快。需要能整合到实际开发的软件工程里。HALCON支持导出成C只需要少量的调整。
HALCON代码 HALCON的OCR和现在主流的字符识别任务一样分成两阶段任务。
文本检测Detection识别出文本行的位置。文本识别Recognition把Detection任务检测出来的文本行抠出来进行识别。
并且HALCON支持像上面图片这样倾斜的文字下面是简单的实现代码和逐行解释。
* 读取图片
read_image (Image, D:/Project/OCR_demo.jpg)
* 获取显示窗口的句柄
dev_get_window (WindowHandle)
* 设置文字的字体和大小
set_font (WindowHandle, Courier New-Bold- round(26))
* 创建OCR识别句柄
create_deep_ocr (mode, auto, DeepOcrHandle)
* 创建CPU/GPU设备句柄
query_available_dl_devices (runtime, cpu, DLDeviceHandle)
* 设置OCR使用的设备
set_deep_ocr_param (DeepOcrHandle, device, DLDeviceHandle)* 记录开始时间
count_seconds(StartTime)
* 执行OCR
apply_deep_ocr (Image, DeepOcrHandle, auto, DeepOcrResult)
* 记录结束时间
count_seconds(EndTime)
* 计算耗时
Duration : EndTime - StartTime
* 绘制文字
write_string (WindowHandle, 耗时Durations)* 获取结果
get_dict_tuple (DeepOcrResult, words, WordsRes)
* 获取文字区域的行坐标
get_dict_tuple (WordsRes, row, Rows)
* 获取文字区域的列坐标
get_dict_tuple (WordsRes, col, Cols)
* 获取文字区域的倾斜角度
get_dict_tuple (WordsRes, phi, Phis)
* 获取文字区域的矩形长边
get_dict_tuple (WordsRes, length1, Length1s)
* 获取文字区域的矩形短边
get_dict_tuple (WordsRes, length2, Length2s)
* 获取识别文字结果
get_dict_tuple (WordsRes, word, Words)
* 设置绘制模式为画轮廓
dev_set_draw(margin)
* 设置画线的宽度
dev_set_line_width (2)for Index : 0 to |Rows|-1 by 1* 绘制带方向的矩形disp_rectangle2(WindowHandle, Rows[Index], Cols[Index], Phis[Index], Length1s[Index], Length2s[Index])* 设置文字的坐标set_tposition(WindowHandle, Rows[Index], Cols[Index])* 绘制文字write_string (WindowHandle, Words[Index])
endfor
上面的代码运行结果如下可以看到HALCON在CPU上的速度也是非常快的。 导出C
HALCON导出到C也非常方便只需要点击
【文件】-【导出程序】 需要注意的点是上面的HALCON代码虽然在HALCON里运行没有问题但是直接导出C运行是会报错的。
因为上面使用的是HALCON自带的模型导出C之后程序里是不带有这个模型的。所以需要将自带的模型导出然后设置成使用这个模型来进行识别。
使用以下HALCON代码进行模型导出
* 创建自带的OCR模型
create_deep_ocr (mode, auto, DeepOcrHandle)
* 设置导出模型的路径
Filename : D:/model.hdo
* 导出模型
write_deep_ocr (DeepOcrHandle, Filename)
然后把上面的识别代码从创建默认OCR识别模型句柄改成读取指定的模型。
* 创建OCR识别句柄
* create_deep_ocr (mode, auto, DeepOcrHandle)
* 读取指定的模型
read_deep_ocr (D:/model.hdo, DeepOcrHandle)
再进行C代码导出就可以使用了。
在C工程里调用也非常简单只需要包含halcon.dllhalconcppdllhalcondl.dll即可。
案例
在实际项目中如果文字足够清晰预处理足够干净文本定位足够准确的话即使使用默认的模型也能达到非常高的精度。
比如下面的例子通过内容区域提取透视变换文本检测文本位置精细定位背景分割过滤等手段将文本区域精准提取出来之后直接使用默认的模型也可以达到很好的效果。 当然在针对性的场景通过标注对应的数据集并在预训练模型的基础上进行针对性训练可以达到一个更好的效果这个步骤也很简单后面机会再展开讲一下。