一, 条形码
1,创建条形码句柄
create_bar_code_model ([], [], BarCodeHandle)
2, 设置条形码的参数 条形码的最小单位,黑条之间的最小间距
set_bar_code_param (BarCodeHandle, 'element_size_min', 8)
3,条形码的最小宽度
set_bar_code_param (BarCodeHandle, 'barcode_width_min', 8)
4, 设置条形码查找的精度 0快 ,1 精确
set_bar_code_param (BarCodeHandle, 'persistence', 0)
5,设置条形码的对比度
set_bar_code_param (BarCodeHandle, 'contrast_min',8)
6, 查找条形码
1 输入图片 2输出的区域 3 条形码句柄 4 条形码类型 5转成字符串
find_bar_code (Image, SymbolRegions, BarCodeHandle, 'auto', DecodedDataStrings)
7, 获取条形码的结果
'decoded_types' 条形码类型 code39
decoded_strings 转码字符串
get_bar_code_result (BarCodeHandle, 'all', 'decoded_types', BarCodeResults)
get_bar_code_result (BarCodeHandle, 'all', 'decoded_strings', BarCodeResults1)
二,识别多种条形码
【1】,没有检测到条形码的判断 code39和code32的转换
【2】,code39 支持0-9字符还有A-Z 以及一些特殊符号
【3】,code32 支持0-9数字和部分字符
1,识别多种条形码
【1】,前期准备
dev_get_window (WindowHandle)
query_font (WindowHandle, Font) //当前支持的字体
tuple_find (Font,'新宋体', Indices) // 判断当前是否支持新宋体
if (Indices>=0)
set_display_font (WindowHandle, 16, '新宋体', 'true', 'false')
endifcount_seconds (Seconds) //7772.08 开机时间
【2】,读取图片
*tuple_regexp_select 根据正则表达式进行筛选
* .* 匹配所有资源
* .(jpg|bmp|png) 后缀名为jpg bmp png
list_files ('条形码图片', 'files', Files)
tuple_regexp_select (Files, '.(jpg|bmp|png)', Selection)
【3】, 创建条形码句柄
- 第二行:把条码的最小宽度设为 200 个像素
- 第三行:把条码的最小高度设为 8 个像素
create_bar_code_model ([], [], BarCodeHandle)
set_bar_code_param (BarCodeHandle, 'barcode_width_min', 200)
set_bar_code_param (BarCodeHandle, 'barcode_height_min', 8)dev_set_draw ('margin')
【4】, 进行循环
第 1 个参数:Image这是输入图像,
第 2 个参数:SymbolRegions这是输出区域,
第 3 个参数:BarCodeHandle这是你之前创建并设置好的条码识别工具,
第 4 个参数:'auto'意思是自动识别条码类型
第 5 个参数:DecodedDataStrings这是最终解码出来的条码内容,
find_bar_code (Image, SymbolRegions, BarCodeHandle, 'auto', DecodedDataStrings)
gen_empty_obj (EmptyObject) // 定义一个空对象
for Index := 0 to |Selection|-1 by 1
read_image (Image, Selection[Index])
find_bar_code (Image, SymbolRegions, BarCodeHandle, 'auto', DecodedDataStrings)
test_equal_obj (EmptyObject, SymbolRegions, IsEqual) //对比俩个参数是否为空
if (IsEqual) // true 证明没找到条形码区域
dev_display (Image)
dev_disp_text ('未找到条形码', 'window', 'top', 'left', 'black', [], [])
else //false 证明找到到条形码区域
dev_display (Image)
dev_display (SymbolRegions)
get_bar_code_result (BarCodeHandle, 'all', 'decoded_types', BarCodeResults) //类型
get_bar_code_result (BarCodeHandle, 'all', 'decoded_strings', BarCodeResults1)//字符串
if (BarCodeResults=='Code 39')
convert_decoded_string_code39_to_code32 (BarCodeResults1, ConvertedDataStringCode32)
dev_disp_text ('Code39转成Code32:'+ConvertedDataStringCode32, 'window', 100, 100, 'black', [], [])
endif
dev_disp_text ('找到条形码:'+ BarCodeResults+':'+BarCodeResults1, 'window', 'top', 'left', 'black', [], [])
endif
stop ()
endfor
三,二维码检测
1,创建二维码对象
'default_parameters' 默认参数设置
'maximum_recognition' 最大的识别度
**create_data_code_2d_model ('Data Matrix ECC 200', ['default_parameters'], ['maximum_recognition'], DataCodeHandle) // Data Matrix ECC 200 数据矩阵码 简称D码
create_data_code_2d_model ('QR Code', [], [], DataCodeHandle1) //创建QR码对象
create_data_code_2d_model ('PDF417', [], [], DataCodeHandle2) //创建PDF417码对象 二维码堆叠的条形结构**
2,设置句柄的解析数据的字符类型
*set_data_code_2d_param (DataCodeHandle, 'string_encoding', 'utf8')
3,循环遍历
list_image_files ('二维码', 'default', [], ImageFiles)
for Index := 0 to |ImageFiles|-1 by 1
read_image (Image, ImageFiles[Index])
find_data_code_2d (Image, SymbolXLDs, DataCodeHandle, [], [], ResultHandles, DecodedDataStrings) //查找D码
count_obj (SymbolXLDs, Number)
if (Number>0)
dev_disp_text ('找到的是D码:'+DecodedDataStrings, 'window', 'top', 'left', 'black', [], [])
else
find_data_code_2d (Image, SymbolXLDs1, DataCodeHandle1, [], [], ResultHandles1, DecodedDataStrings1)
if (|DecodedDataStrings1|>0)
dev_disp_text ('找到的是QR码:'+DecodedDataStrings1, 'window', 'top', 'left', 'black', [], [])
else
find_data_code_2d (Image, SymbolXLDs2, DataCodeHandle2, [], [], ResultHandles2, DecodedDataStrings2)
if (|DecodedDataStrings2|>0)
dev_disp_text ('找到的是PDF417码:'+DecodedDataStrings2, 'window', 'top', 'left', 'black', [], [])
else
dev_disp_text ('没找到的是二维码:', 'window', 'top', 'left', 'black', [], [])
endif
endif
endif
stop ()
endfor
四, 一张图片多个二维码的检测
1,创建二维码对象
*'default_parameters' 默认参数设置
*'maximum_recognition' 最大的识别度create_data_code_2d_model ('QR Code', ['default_parameters'], ['maximum_recognition'], DataCodeHandle)
list_image_files ('二维码', 'default', [], ImageFiles)
for Index := 0 to |ImageFiles|-1 by 1
read_image (Image, ImageFiles[Index])
* 'stop_after_result_num' 批量识别参数 找到16 个二维码后立即停止,提升效率
find_data_code_2d (Image, SymbolXLDs, DataCodeHandle, 'stop_after_result_num', 16, ResultHandles, DecodedDataStrings) //查找QR码
count_obj (SymbolXLDs, Number)
gen_region_contour_xld (SymbolXLDs, RegionQrCode, 'margin')
area_center (RegionQrCode, Area, Row, Column)if (Number>0)
*dev_disp_text ('找到的是QR码:'+DecodedDataStrings, 'image', Row, Column, 'black', [], [])
else
*dev_disp_text ('没找到的是二维码:', 'window', 'top', 'left', 'black', [], [])
endif
stop ()endfor

五,OCR字符提取
1, 提取字符每一个区域
2 ,读取内置的分类器或者自定义分类器 read_ocr_class_mlp()
3 ,获取读取的结果
4 ,处理结果释放句柄
5,分类器
* NoRej 不拒绝,如果一个字符串没有匹配到 返回一个类似的字符
* Rej 拒绝 如果一个字符串没有匹配到 返回一个reject
6,内置的分类器
*Document_0-9_NoRej.omc 、OCRA_A-Z+_Rej.omc
*自定义分类器 通过ocr助手进行设置
*字体是最好是黑色字体白色的背景
1,前期处理
read_image (Image, 'engraved')
get_image_size (Image, Width, Height)
dev_set_draw ('margin')
dev_set_color ('green')
2,矩形范围内阈值修改 使用7*7的矩阵 ,把里面像素最大值减去最小值,得到值作为图新值
gray_range_rect (Image, ImageResult, 7, 7)
invert_image (ImageResult, ImageInvert)threshold (ImageResult, Region, 128,255)
connection (Region, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 1000, 99999)
sort_region (SelectedRegions, SortedRegions, 'first_point', 'true', 'column')shape_trans (SortedRegions, RegionTrans, 'rectangle1')
area_center (RegionTrans, Area, Row, Column)
3,读取OCR
read_ocr_class_mlp ('新建文本文档.omc', OCRHandle)
count_obj (RegionTrans, Number)dev_display (Image)
for Index := 1 to Number by 1
select_obj (SortedRegions, ObjectSelected, Index) //选择一个字符区域
【1】, 获取单独结果
do_ocr_single_class_mlp (ObjectSelected, ImageInvert, OCRHandle, 1, Class, Confidence)
dev_disp_text (Class, 'image', Row[Index-1], Column[Index-1], 'black', [], [])
dev_display (RegionTrans)
stop ()
endfor
【2】,一次性读取完
do_ocr_multi_class_mlp (SortedRegions, ImageInvert, OCRHandle, Class1, Confidence1)