Halcon基础-瓶盖带角度的OCR批量识别
Halcon基础-OCR识别
- 1、OCR识别素材
- 2、创建路径文件
- 3、Halcon代码实现
- 4、运行效果
- 5、资源获取
1、OCR识别素材
这里我准备了7张不同角度的OCR图片,如下所示:

2、创建路径文件
按照下图所示创建全部文件夹和文件:
01用来存放OCR识别原图
c01 用来存放每张图裁剪出来的OCR区域
OCRText 用来存放每张图识别出来的OCR结果




3、Halcon代码实现
create_text_model_reader ('manual', [], TextModel)
set_text_model_param (TextModel, 'manual_char_width', 14)
set_text_model_param (TextModel, 'manual_char_height', 18)
set_text_model_param (TextModel, 'manual_stroke_width', 1.8)
set_text_model_param (TextModel, 'manual_return_punctuation', 'false')
set_text_model_param (TextModel, 'manual_uppercase_only', 'true')
set_text_model_param (TextModel, 'manual_fragment_size_min', 3)
set_text_model_param (TextModel, 'manual_eliminate_border_blobs', 'true')
set_text_model_param (TextModel, 'manual_base_line_tolerance', 0.2)
set_text_model_param (TextModel, 'manual_max_line_num', 2)
read_ocr_class_mlp ('Industrial_NoRej.omc', OcrHandle)* 设置文件夹路径
FolderPath := 'C:/Users/Administrator/Desktop/盖码测试/01'
* 使用find_files查找所有.jpg文件
list_files (FolderPath, 'files', Files)
* 获取文件的数量
NumFiles := |Files|
* 循环读取每一张图片 for Index := 0 to NumFiles-1 by 1 FileName := Files[Index] read_image(Image, FileName) rgb1_to_gray (Image, GrayImage)emphasize (GrayImage, ImageEmphasize, 10, 10, 18)threshold (ImageEmphasize, Regions, 0, 150)dilation_circle (Regions, RegionDilation, 2)erosion_circle (RegionDilation, RegionErosion, 2)connection (RegionErosion, ConnectedRegions) select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 50, 200)union1 (SelectedRegions, RegionUnion)dilation_circle (RegionUnion, RegionDilation, 22)connection (RegionDilation, ConnectedRegions)select_shape (ConnectedRegions, SelectedRegions, ['area','width','height'], 'and', [8000,30,30], [23000,300,300])*intersection (ImageEmphasize, RegionDilation, RegionIntersection)*reduce_domain (ImageEmphasize, RegionIntersection, ImageReduced)*area_center (RegionIntersection, Area, Row, Column)area_center (SelectedRegions, Area, Row, Column)*orientation_region (RegionDilation, Phi)*椭圆拟合求出旋转角度elliptic_axis_gray (SelectedRegions, ImageEmphasize, Ra, Rb, Phi)hom_mat2d_identity (HomMat2DIdentity)hom_mat2d_rotate (HomMat2DIdentity, -Phi, Row[0], Column[0], HomMat2DRotate)*旋转区域affine_trans_region (SelectedRegions, RegionAffineTrans, HomMat2DRotate, 'nearest_neighbor')*旋转图像affine_trans_image (ImageEmphasize, ImageAffineTrans, HomMat2DRotate, 'constant', 'false')reduce_domain (ImageAffineTrans, RegionAffineTrans, ImageReduced)crop_domain (ImageReduced, Image)write_image (Image, 'png', 0, 'C:/Users/Administrator/Desktop/盖码测试/c01/'+Index+'.png')get_image_size (Image, Width, Height)
gen_rectangle1 (ROI_OCR_01_0, 0, 0,Height, Width)access_channel (Image, TmpObj_Mono, 1)reduce_domain (TmpObj_Mono, ROI_OCR_01_0, TmpObj_MonoReduced_OCR_01_0)TmpCtrl_Orientation := 0TmpCtrl_RangeMin := -0.174533TmpCtrl_RangeMax := 0.174533text_line_orientation (TmpObj_MonoReduced_OCR_01_0, TmpObj_MonoReduced_OCR_01_0, 18, TmpCtrl_Orientation+TmpCtrl_RangeMin, TmpCtrl_Orientation+TmpCtrl_RangeMax, TmpCtrl_Orientation)hom_mat2d_identity (TmpCtrl_MatrixIdentity)hom_mat2d_rotate (TmpCtrl_MatrixIdentity, -TmpCtrl_Orientation, 0, 0, TmpCtrl_MatrixRotation)get_domain (TmpObj_MonoReduced_OCR_01_0, TmpObj_Domain)get_system ('clip_region', TmpCtrl_ClipRegion)set_system ('clip_region', 'false')dilation_circle (TmpObj_Domain, TmpObj_DomainExpanded, 9)affine_trans_region (TmpObj_DomainExpanded, TmpObj_DomainTransformedRaw, TmpCtrl_MatrixRotation, 'true')smallest_rectangle1 (TmpObj_DomainTransformedRaw, TmpCtrl_Row1, TmpCtrl_Col1, TmpCtrl_Row2, TmpCtrl_Col2)hom_mat2d_translate (TmpCtrl_MatrixIdentity, -TmpCtrl_Row1, -TmpCtrl_Col1, TmpCtrl_MatrixTranslation)hom_mat2d_compose (TmpCtrl_MatrixTranslation, TmpCtrl_MatrixRotation, TmpCtrl_MatrixComposite)affine_trans_region (TmpObj_Domain, TmpObj_DomainTransformed, TmpCtrl_MatrixComposite, 'true')affine_trans_image (TmpObj_MonoReduced_OCR_01_0, TmpObj_ImageTransformed, TmpCtrl_MatrixComposite, 'constant', 'true')dilation_circle (TmpObj_Domain, TmpObj_DomainExpanded, 9)expand_domain_gray (TmpObj_ImageTransformed, TmpObj_ImageTransformedExpanded, 9)reduce_domain (TmpObj_ImageTransformed, TmpObj_DomainTransformed, TmpObj_ImageTransformedReduced)crop_part (TmpObj_ImageTransformedReduced, TmpObj_MonoReduced_OCR_01_0, 0, 0, TmpCtrl_Col2-TmpCtrl_Col1+1, TmpCtrl_Row2-TmpCtrl_Row1+1)set_system ('clip_region', TmpCtrl_ClipRegion)find_text (TmpObj_MonoReduced_OCR_01_0, TextModel, TmpCtrl_ResultHandle_OCR_01_0)get_text_object (Symbols_OCR_01_0, TmpCtrl_ResultHandle_OCR_01_0, 'manual_all_lines')dev_display (TmpObj_MonoReduced_OCR_01_0)dev_set_draw ('fill')dev_set_colored (3)dev_display (Symbols_OCR_01_0)do_ocr_multi_class_mlp (Symbols_OCR_01_0, TmpObj_MonoReduced_OCR_01_0, OcrHandle, SymbolNames_OCR_01_0, Confidences_OCR_01_0)
* 获取元组的第一个元素
FirstSymbol := SymbolNames_OCR_01_0[0]
SecondSymbol := SymbolNames_OCR_01_0[1] if (FirstSymbol!='C' and SecondSymbol!='C')rotate_image (Image, Image, 180, 'constant')access_channel (Image, TmpObj_Mono, 1)reduce_domain (TmpObj_Mono, ROI_OCR_01_0, TmpObj_MonoReduced_OCR_01_0)TmpCtrl_Orientation := 0TmpCtrl_RangeMin := -0.174533TmpCtrl_RangeMax := 0.174533text_line_orientation (TmpObj_MonoReduced_OCR_01_0, TmpObj_MonoReduced_OCR_01_0, 18, TmpCtrl_Orientation+TmpCtrl_RangeMin, TmpCtrl_Orientation+TmpCtrl_RangeMax, TmpCtrl_Orientation)hom_mat2d_identity (TmpCtrl_MatrixIdentity)hom_mat2d_rotate (TmpCtrl_MatrixIdentity, -TmpCtrl_Orientation, 0, 0, TmpCtrl_MatrixRotation)get_domain (TmpObj_MonoReduced_OCR_01_0, TmpObj_Domain)get_system ('clip_region', TmpCtrl_ClipRegion)set_system ('clip_region', 'false')dilation_circle (TmpObj_Domain, TmpObj_DomainExpanded, 9)affine_trans_region (TmpObj_DomainExpanded, TmpObj_DomainTransformedRaw, TmpCtrl_MatrixRotation, 'true')smallest_rectangle1 (TmpObj_DomainTransformedRaw, TmpCtrl_Row1, TmpCtrl_Col1, TmpCtrl_Row2, TmpCtrl_Col2)hom_mat2d_translate (TmpCtrl_MatrixIdentity, -TmpCtrl_Row1, -TmpCtrl_Col1, TmpCtrl_MatrixTranslation)hom_mat2d_compose (TmpCtrl_MatrixTranslation, TmpCtrl_MatrixRotation, TmpCtrl_MatrixComposite)affine_trans_region (TmpObj_Domain, TmpObj_DomainTransformed, TmpCtrl_MatrixComposite, 'true')affine_trans_image (TmpObj_MonoReduced_OCR_01_0, TmpObj_ImageTransformed, TmpCtrl_MatrixComposite, 'constant', 'true')dilation_circle (TmpObj_Domain, TmpObj_DomainExpanded, 9)expand_domain_gray (TmpObj_ImageTransformed, TmpObj_ImageTransformedExpanded, 9)reduce_domain (TmpObj_ImageTransformed, TmpObj_DomainTransformed, TmpObj_ImageTransformedReduced)crop_part (TmpObj_ImageTransformedReduced, TmpObj_MonoReduced_OCR_01_0, 0, 0, TmpCtrl_Col2-TmpCtrl_Col1+1, TmpCtrl_Row2-TmpCtrl_Row1+1)set_system ('clip_region', TmpCtrl_ClipRegion)find_text (TmpObj_MonoReduced_OCR_01_0, TextModel, TmpCtrl_ResultHandle_OCR_01_0)get_text_object (Symbols_OCR_01_0, TmpCtrl_ResultHandle_OCR_01_0, 'manual_all_lines')dev_display (TmpObj_MonoReduced_OCR_01_0)dev_set_draw ('fill')dev_set_colored (3)dev_display (Symbols_OCR_01_0)do_ocr_multi_class_mlp (Symbols_OCR_01_0, TmpObj_MonoReduced_OCR_01_0, OcrHandle, SymbolNames_OCR_01_0, Confidences_OCR_01_0)endifTxtPath := 'C:/Users/Administrator/Desktop/盖码测试/OCRText'
file_name:=TxtPath+'/'+Index+'.txt'
* 打开文件以写入(如果文件已存在则覆盖)
open_file(file_name, 'output', FileHandle)
* 写入OCR信息
fwrite_string(FileHandle, SymbolNames_OCR_01_0)
*关闭文件
close_file(FileHandle)endfor
4、运行效果

5、资源获取
CSDN 源码下载:Halcon基础-瓶盖OCR识别
相关文章:
Halcon基础-瓶盖带角度的OCR批量识别
Halcon基础-OCR识别 1、OCR识别素材2、创建路径文件3、Halcon代码实现4、运行效果5、资源获取 1、OCR识别素材 这里我准备了7张不同角度的OCR图片,如下所示: 2、创建路径文件 按照下图所示创建全部文件夹和文件: 01用来存放OCR识别原图 c…...
php语法学习
启动php 进入软件 打开文件:编写代码 $php true; $java false; var_dump($php);//输出变量细节 var_dump($java) 字符串 注意可以使用双引号也可以使用单引号 测试 $php "最好学web语言"; $java 脱胎于c语言; var_dump($php);//输出变量细节 var…...
JavaWeb合集22-Apache POI
二十二、Apache POI Apache POI是一个处理Miscrosoft Office各种文件格式的开源项目。简单来说就是,我们可以使用POI在Java 序中对Miscrosoft Office各种文件进行读写操作。一般情况下,POI都是用于操作Excel文件。 使用场景:银行网银系统导出…...
DDD重构-实体与限界上下文重构
DDD重构-实体与限界上下文重构 概述 DDD 方法需要不同类型的类元素,例如实体或值对象,并且几乎所有这些类元素都可以看作是常规的 Java 类。它们的总体结构是 Name: 类的唯一名称 Properties:属性 Methods: 控制变量的变化和添加行为 一…...
MATLAB Simulink (二)高速跳频通信系统
MATLAB & Simulink (二)高速跳频通信系统 写在前面1 系统原理1.1 扩频通信系统理论基础1.1.1 基本原理1.1.2 扩频通信系统处理增益和干扰容限1.1.3 各种干扰模式下抗干扰性能 1.2 高速跳频通信系统理论基础1.2.1 基本原理1.2.2 物理模型 2 方案设计2…...
智能合约分享
智能合约练习 一、solidity初学者经典示例代码: 1.存储和检索数据: // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // 声明 Solidity 编译器版本// 定义一个名为 SimpleStorage 的合约 contract SimpleStorage {// 声明一个公共状态变量 d…...
【MR开发】在Pico设备上接入MRTK3(二)——在Unity中配置Pico SDK
上一篇文档介绍了 【MR开发】在Pico设备上接入MRTK3(一)在Unity中导入MRTK3依赖 下面将介绍在Unity中导入Pcio SDK的具体步骤 在Unity中导入Pico SDK 当前Pico SDK版本 Unity交互SDK git仓库: https://github.com/Pico-Developer/PICO-Un…...
【Java】探秘正则表达式:深度解析与精妙运用
目录 引言 一、基本概念 1.1 元字符 1.2 预定义字符类 1.3 边界匹配符 1.4 数量标识符 1.5 捕获与非捕获分组 二、Java中的正则表达式支持 三、正则表达式的使用示例 3.1 匹配字符串 3.2 替换字符串 3.3 分割字符串 3.4 使用Pattern和Matcher 3.5 捕获组和后向…...
2.6.ReactOS系统中从内核中发起系统调用
2.6.ReactOS系统中从内核中发起系统调用 2.6.ReactOS系统中从内核中发起系统调用 文章目录 2.6.ReactOS系统中从内核中发起系统调用前言 前言 上面我们已经可以看到用户空间(R3)进行系统调用的全过程即两种方法的具体实现。 系统调用一般时从R3发起的…...
chat_gpt回答:python获取当前utc时间,将xml里时间tag里的值修改为当前时间
你可以使用 lxml 库来读取、修改 XML 文件中的某个标签的值,并将其保存为新的 XML 文件。以下是一个示例代码,展示如何获取当前的 UTC 时间,并将 XML 文件中的某个时间标签修改为当前时间。 示例代码: from lxml import etree f…...
机器学习-语言分析
机器学习 1.1人工智能概述 1.2.1 机器学习与人工智能,深度学习 深度学习->机器学习->人工智能; 人工智能:1950,实现自动下棋,人机对弈,达特茅斯会议->人工智能的起点,1956年8月。克劳…...
Oracle 常见索引扫描方式概述,哪种索引扫描最快!
一.常见的索引扫描方式 INDEX RANGE SCANINDEX FAST FULL SCANINDEX FULL SCAN(MIN/MAX)INDEX FULL SCAN 二.分别模拟使用这些索引的场景 1.INDEX RANGE SCAN create table t1 as select rownum as id, rownum/2 as id2 from dual connect by level<500000; create inde…...
字符串(3)_二进制求和_高精度加法
个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 字符串(3)_二进制求和_高精度加法 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记,欢迎大家在评论区交流讨论💌 目…...
《神经网络:智能时代的核心技术》
《神经网络:智能时代的核心技术》 一、神经网络的诞生与发展二、神经网络的结构与工作原理(一)神经元模型(二)神经网络训练过程 三、神经网络的应用领域(一)信息领域(二)…...
pdf内容三张以上转图片,使用spire.pdf.free
一、依赖 <spire.pdf.free.version>9.13.0</spire.pdf.free.version><itextpdf.version>5.5.13</itextpdf.version><dependency><groupId>e-iceblue</groupId><artifactId>spire.pdf.free</artifactId><version>$…...
游戏、软件、开源项目和资讯
游戏 标题链接【白嫖正版游戏】IT之家喜加一website 软件 标题链接【白嫖正版软件】反斗限免website 开源项目 标题链接【Luxirty Search】基于Google搜索结果,屏蔽内容农场Github【Video2X】图片/视频超分工具Github 新闻资讯 标题链接分享10个 Claude 3.5 …...
Acrel-1000变电站综合自动化系统及微机在化工企业中的应用方案
文:安科瑞郑桐 摘要:大型化工企业供配电具有的集约型特点,化工企业内35kV变电站和10kV变电所数量大、分布广,对于老的大多大型及中型化工企业而言,其变电站或变电所内高压电气设备为旧式继电保护装置,可靠…...
[Linux] CentOS7替换yum源为阿里云并安装gcc详细过程(附下载链接)
前言 CentOS7替换yum源为阿里云 yum是CentOS中的一种软件管理器,通过yum安装软件,可以自动解决包依赖的问题,免去手工安装依赖包的麻烦。 yum使用了一个中心仓库来记录和管理软件的依赖关系,默认为mirrorlist.centos.org…...
在Java中创建多线程的三种方式
多线程的创建和启动方式 在Java中,创建多线程主要有以下三种方式: 继承Thread类实现Runnable接口使用Callable接口与Future 下面是这三种方式的简单示例,以及如何在主类中启动它们。 1. 继承Thread类 class MyThread extends Thread {Ov…...
洛谷 AT_abc374_c [ABC374C] Separated Lunch 题解
题目大意 KEYENCE 总部有 N N N 个部门,第 i i i 个部门有 K i K_i Ki 个人。 现在要把所有部门分为 AB 两组,求这两组中人数多的那一组的人数最少为多少。 题目分析 设这些部门共有 x x x 个人,则较多的组的人数肯定大于等于 ⌈ …...
【进阶指南】Ant Design Select 下拉框数据全解析:从 value、label 到自定义属性的高效获取
1. 理解Ant Design Select的核心数据流 当你第一次接触Ant Design的Select组件时,可能会觉得它就是个简单的下拉选择器。但实际开发中,特别是处理复杂业务表单时,我们往往需要获取的不仅仅是value值。想象一下这样的场景:用户选择…...
Flux2-Klein-9B-True-V2部署教程:tail -f实时监控日志定位加载异常
Flux2-Klein-9B-True-V2部署教程:tail -f实时监控日志定位加载异常 1. 项目概述 Flux2-Klein-9B-True-V2是基于官方FLUX.2 [klein] 9B改进的文生图/图生图模型,具备强大的图像生成和编辑能力。这个模型特别适合需要高质量图像生成的场景,从…...
React Router懒加载终极指南:如何大幅提升应用首屏性能
React Router懒加载终极指南:如何大幅提升应用首屏性能 【免费下载链接】react-router Declarative routing for React 项目地址: https://gitcode.com/GitHub_Trending/re/react-router React Router是React生态中最流行的声明式路由库,通过懒加…...
BilibiliDown:跨平台B站视频下载解决方案,轻松保存你的数字记忆
BilibiliDown:跨平台B站视频下载解决方案,轻松保存你的数字记忆 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitc…...
2026年主流热门AI会议纪要工具大横评,算完效率成本账,差距竟然这么大
作为常年泡在各种会议、调研里的内容创作者,这段时间我横评了5款2026年主流的AI会议纪要工具,算完时间和成本账直接傻了——听脑AI是目前同类工具中最值得用的,没有之一。 直达链接:https://itingnao.com/home/?source3707 谁懂…...
QuantEcon.py入门指南:10分钟掌握经济学计算利器
QuantEcon.py入门指南:10分钟掌握经济学计算利器 【免费下载链接】QuantEcon.py A community based Python library for quantitative economics 项目地址: https://gitcode.com/gh_mirrors/qu/QuantEcon.py QuantEcon.py是一个基于社区的Python定量经济学库…...
避坑指南:Ensembl版本混乱?手把手教你用biomaRt精准抓取指定版本基因组注释构建OrgDb
精准锁定Ensembl历史版本:biomaRt实战指南与OrgDb高效构建策略 当你在深夜加班分析绵羊RNA-seq数据时,突然发现差异表达基因的染色体位置与参考基因组对不上——这种版本不匹配的噩梦,每个生物信息学分析者都可能经历过。Ensembl数据库每季度…...
免费AI图像放大终极教程:Upscayl从入门到精通完全指南
免费AI图像放大终极教程:Upscayl从入门到精通完全指南 【免费下载链接】upscayl 🆙 Upscayl - #1 Free and Open Source AI Image Upscaler for Linux, MacOS and Windows. 项目地址: https://gitcode.com/GitHub_Trending/up/upscayl 想要让模糊…...
如何突破iOS系统限制?探索TrollInstallerX的技术实现路径
如何突破iOS系统限制?探索TrollInstallerX的技术实现路径 【免费下载链接】TrollInstallerX A TrollStore installer for iOS 14.0 - 16.6.1 项目地址: https://gitcode.com/gh_mirrors/tr/TrollInstallerX 在iOS生态系统中,应用部署一直受到严格…...
PotPlayer智能字幕翻译终极体验:告别外语观影障碍的完整解决方案
PotPlayer智能字幕翻译终极体验:告别外语观影障碍的完整解决方案 【免费下载链接】PotPlayer_Subtitle_Translate_Baidu PotPlayer 字幕在线翻译插件 - 百度平台 项目地址: https://gitcode.com/gh_mirrors/po/PotPlayer_Subtitle_Translate_Baidu 还在为看不…...
