halconOCR文字识别

1、OCR文字识别

FontFile := 'Universal_0-9_NoRej'
dev_update_window ('off')
read_image (bottle, 'bottle2')
get_image_size (bottle, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
dev_display (bottle)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()

* 1.创建一个用于文本识别的文本模型读取器
* 参数一:auto 表示使用自动模式选择字体
* 参数二:FontFile 是用于识别的字体文件路径
* 参数三:存储文本模型的变量
create_text_model_reader ('auto', FontFile, TextModel)

* 2.设置模型参数  
* 参数二:min_stroke_width:最小笔画宽度,值为6
set_text_model_param (TextModel, 'min_stroke_width', 6)
* 简化对分段文本内容的特定结构进行提取(例如日期YY-MM-DD)   2 2 2表示文本的显示结构
set_text_model_param (TextModel, 'text_line_structure', '2 2 2')

* 3.在图像中查找文本片段并输出到句柄
find_text (bottle, TextModel, TextResultID)

* 4.从文本识别结果中获取所有字符信息,all_lines返回当前区域中的所有字符和线
get_text_object (Characters, TextResultID, 'all_lines')
* 5.在显示窗口中显示图像 和 识别出的字符信息。
dev_display (bottle)
dev_display (Characters)
stop ()
* 6.获取结果,转成class类型的字符
get_text_result (TextResultID, 'class', ResultValue)
area_center (Characters, Area, Row, Column)

在这里插入图片描述

2、训练分类器

read_image (Image, 'bottle2')
get_image_size (Image, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
* 设置字体样式和大小
set_display_font (WindowHandle, 25, 'mono', 'true', 'false')
* 二值化操作
threshold (Image, Region, 0, 90)

* 对区域进行形状填充,输入最小面积和最大面积
* 参数一:要进行形状填充的输入区域。
* 参数二:用于存储填充后的区域的变量。
* 参数三:填充的准则,这里是根据区域的面积进行填充。
* 参数四:最小区域面积
* 参数五:指定的连接性,表示填充时考虑的相邻像素的连接性。
fill_up_shape (Region, RegionFillUp, 'area', 1, 5)
* 填充所有的孔洞
* fill_up (RegionFillUp, RegionFillUp1)

*开运算
*先腐蚀后膨胀,可以有效的断开,减少像素。
*相当于把整体变暗
opening_circle (RegionFillUp, RegionOpening, 2.5)
fill_up (RegionOpening, RegionFillUp1)
*使用矩形进行开运算
opening_rectangle1 (RegionFillUp1, RegionOpening1, 1, 7)
*连通性
connection (RegionOpening1, ConnectedRegions)
*求交集 当前区域与开运算之后的区域
intersection (ConnectedRegions, RegionOpening, RegionIntersection)
*特征提取
select_shape (RegionIntersection, SelectedRegions, 'area', 'and', 300, 9999)

sort_region (SelectedRegions, SortedRegions, 'first_point', 'true', 'column')
dev_display (Image)
dev_set_color ('green')
dev_set_line_width (2)
dev_set_shape ('rectangle1')
dev_set_draw ('margin')
dev_display (SortedRegions)

*训练字体
TrainingNames:=['0','1','0','8','9','4']
*字体名称
FontName:='bottle'
TrainingFileName:=FontName+'.trf'
*排序
sort_region (SortedRegions, SortedRegions1, 'first_point', 'true', 'column')
*变换区域的形状
*rectangle1:平行于坐标轴的最大内接矩形
shape_trans (SortedRegions1, RegionTrans, 'rectangle1')
area_center (RegionTrans, Area, Row, Column)
*求平均的行坐标
MeanRow:=mean(Row)
*如果发现错误,则把当前.trf文件删除
dev_set_check ('~give_error')
delete_file (TrainingFileName)
for I := 0 to |TrainingNames|-1 by 1
    *选择对应的i区域,进行赋值
    select_obj (SortedRegions1, ObjectSelected, I+1)
    *追加文本
    append_ocr_trainf (ObjectSelected, Image, TrainingNames[I], TrainingFileName)
    disp_message (WindowHandle, TrainingNames[I], 'image', MeanRow-40, Column[I]-15, 'black', 'true')
endfor


*sort排序[0,0,1,4,8,9],uniq删除重复[0,1,4,8,9]*
CharNames:=uniq(sort(TrainingNames))
*mlp训练器,
*参数1:WidthCharacter>>>输入被分割的字符缩放的指定宽度 默认是8  范围4~20
*参数2:HeightCharacter>>>输入被分割的字符缩放的指定高度  默认是10  范围4~20
*参数3:Interpolation>>> 插值算法,默认是不变
*参数4:Features>>>分类特征,默认是default
*参数5:Characters>>>设置要匹配的字符集合
*参数6:NumHidden>>>MLP隐藏单元数量
*参数7:Preprocessing>>>矢量特征转换,默认是none代表没有,normalization正常
*参数8:NumComponents>>>预处理参数,交换的要素的数量
*参数9:RandSeed>>>随机数生成器的种子值 用于使用随机值初始化 MLP
*参数10:OCRHandle>>>句柄
create_ocr_class_mlp (8, 10, 'constant', 'default', CharNames, 10, 'none', 10, 42, OCRHandle)

*训练mlp分类器
trainf_ocr_class_mlp (OCRHandle, TrainingFileName, 200, 1, 0.01, Error, ErrorLog)
*写入字体文件
write_ocr_class_mlp (OCRHandle, FontName)

*读取mlp分类器
*read_ocr_class_mlp (Error, OCRHandle1)
*清除句柄
clear_ocr_class_mlp (OCRHandle)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/457713.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

适用于系统版本:CentOS 6/7/8的基线安全检测脚本

#!/bin/bash #适用于系统版本:CentOS 6/7/8 echo "----------------检测是否符合密码复杂度要求----------------" #把minlen(密码最小长度)设置为8-32位,把minclass(至少包含小写字母、大写字母、数字、特殊…

JVM及垃圾回收算法

一、JVM 1、jvm的内存组成 五大内存区域,分1.7和1.8 1.堆内存:引用类型的数据,内部组成:1.新生代(伊甸区和幸存者区)2.老年代。该区域经常发生垃圾回收的操作 堆是JVM中最大的一块内存区域,用…

mac安全干净卸载Anaconda3

使用which python显示当前使用的是/Users/username/anaconda3/bin/python 现在想卸载Anaconda,恢复使用mac系统自带的Python 删除隐藏文件目录 rm -rf ~/.anaconda修改~/.bash_profile文件,将anaconda相关删除 也有可能不是~/.bash_profile而是~/.zs…

声卡喊话IP喇叭,IP网络吸顶天花喇叭

声卡喊话IP喇叭,IP网络吸顶天花喇叭 SV-7043VP是一款ip/sip网络吸顶喇叭,具有10/100M以太网接口,从网络接口接收网络的音频数据后播放。本网络吸顶喇叭可以与其他广播主机、服务器软件和采播主机配合使用,实现音频的播放&#xf…

【DL经典回顾】深度学习概述

深度学习概述 一、引言 在过去的几年里,深度学习已经从学术研究的领域走向了主流,彻底改变了我们对人工智能的认识和应用。这种强大的技术,以其独特的能力模仿人脑处理和分析复杂数据的方式,不仅在科学界引起了革命,…

ThingsBoard Edge 安装部署

文章目录 一、概述1.官方文档2.部署说明3.安装准备3.1. 克隆服务器3.2.安装 Docker3.3.安装 Java 113.4.安装 PostgreSQL3.5.下载安装包 二、安装部署1.创建 Edge 实例2.创建数据库3.Edge 服务安装3.1.安装服务3.2.配置 Edge3.3.运行安装脚本3.4.重新启动服务 4.访问 Edge5.故障…

基于PHP的数字化档案管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的数字化档案管理系统 一 介绍 此数字化档案管理系统基于原生PHP,MVC架构开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 php(mvc)mysqlbootstrapphpstudyvscode 二 功能 …

django-comment-migrate 模型注释的使用

django-comment-migrate 的使用 django-comment-migrate 是一个 Django 应用,用于将模型注释自动迁移到数据库表注释中。它可以帮助您保持数据库表注释与模型定义的一致性,并提高代码的可读性。 安装 要使用 django-comment-migrate,您需要…

Arcgis新建位置分配求解最佳商店位置

背景 借用Arcgis帮助文档中的说明:在本练习中,您将为连锁零售店选择可以获得最大业务量的商店位置。主要目标是要将商店定位在人口集中地区附近,因为这种区域对商店的需求量较大。设立这一目标的前提是假设人们往往更多光顾附近的商店,而对于距离较远的商店则较少光顾。您…

C++学习随笔(5)——类和对象的深窥

本章我们来学习一下更深入了解一下类和对象! 目录 1.类的6个默认成员函数 2. 构造函数 2.1 概念 2.2 特性 3.析构函数 3.1 概念 3.2 特性 4. 拷贝构造函数 4.1 概念 4.2 特征 5.赋值运算符重载 5.1 运算符重载 5.2 赋值运算符重载 5.3 前置和后置重载…

一键切割,激发无限创意:体验全新图片批量编辑器

在数字创意的时代,图片编辑成为了表达个性和创造力的关键。然而,传统的图片编辑工具常常让人望而生畏,复杂的操作和高门槛的技术要求使得许多人望而却步。现在,我们为您带来一款全新的图片批量编辑器,只需一键切割&…

vivo统一接入网关VUA转发性能优化实践

作者:vivo 互联网服务器团队 - Qiu Xiangcun 本文将探讨如何通过使用Intel QuickAssist Technology(QAT)来优化VUA的HTTPS转发性能。我们将介绍如何使用QAT通过硬件加速来提高HTTPS转发的性能,并探讨QAT在不同应用场景中的表现。最…

Abaqus三维梯度泰森多边形插件:Voronoi FGM 3D(Mesh)- AbyssFish

插件介绍 Voronoi FGM 3D (Mesh) V1.0 - AbyssFish 插件可在Abaqus软件内生成梯度分布的三维泰森多边形长方体模型。插件可用于梯度功能材料(Functionally Gradient Materials)、梯度纳米金属材料、梯度金属结构等梯度晶体模型的建立。模型基于背景网格实现,通过单…

分布式数据处理MapReduce简单了解

文章目录 产生背景编程模型统计词频案例 实现机制容错机制Master的容错机制Worker的容错机制 产生背景 MapReduce是一种分布式数据处理模型和编程技术,由Google开发,旨在简化大规模数据集的处理。产生MapReduce的背景: 数据量的急剧增长&…

RAID技术知识详解到RAID 10的linux实现过程

1.RAID技术简介 RAID(Redundant Array of Independent Disks)独立磁盘冗余阵列。通俗来说就是将多个硬盘通过软件或硬件结合成虚拟单台大容量的硬盘使用。 RAID技术的特点: 可以自动检测故障硬盘; 可以重建硬盘坏道的资料&…

深度学习模型部署-番外-TVM机器学习编译

什么是机器学习编译器/AI编译? 图片来自知乎大佬的文章 机器学习编译是指:将模型从训练形式转变为部署模式 训练模式:使用训练框架定义的模型部署模式:部署所需要的模式,包括模型每个步骤的实现代码,管理资…

html--宠物

文章目录 htmljscss html <!DOCTYPE html> <html lang"en" > <head><meta charset"UTF-8"><title>CodePen - Spaceworm</title><script> window.requestAnimFrame (function() {return (window.requestAnimat…

简单的思考(一):MATLAB实现心形线

今天刷B站的时候看见了&#xff1a; 于是想着自己能不能也做出来 clc;clear; % 定义x的范围 x -2:0.01:2;% 初始化图形 figure; set(gcf,position,[0,0,800,600],color,w); h1 plot(x,abs(x).^(2/3) (0.9*sqrt((3.3-x.^2))).*sin(0.1*pi*x),r,LineWidth,3); hold on xlim(…

HAProxy——高性能负载均衡器

目录 一.常见的Web集群调度器 二.HAProxy基本介绍 1.HAProxy是什么&#xff1f; 2.HAProxy的特性 3.HAProxy常用的8种负载均衡调度算法 3.1 轮询&#xff1a;RR&#xff08;Round Robin&#xff09; 3.2 最小连接数&#xff1a;LC&#xff08;Least Connections&#xff…

基于JAVA的教务系统小程序的设计与实现【附项目源码】分享

基于JAVA的教务系统小程序的设计与实现: 源码地址&#xff1a;https://download.csdn.net/download/qq_41810183/88842782 一、引言 随着信息技术的不断发展&#xff0c;教务管理工作逐渐走向数字化、智能化。为了提高教务管理效率&#xff0c;方便师生查询教务信息&#xff…