《zw版·Halcon-delphi系列原创教程》

水果自动分类脚本(机器学习、人工智能)

前面介绍了超市,流水线,酸奶的自动分类算法,下面再介绍一个水果的自动分类算法。

Halcon强大的图像处理能力,令人往往会忽视其更加彪悍的机器学习、人工智能。

      分类,聚类分析,是机器学习、人工智能的核心算法之一,也是个典型的应用。

Halcon内置的聚类分析、机器学习模块,就有:knn邻近算法、向量机SVM、GMM高斯混合模型(Gaussian Mixture Model,或者混合高斯模型,也可以简写为MOG(Mixture of Gaussian)、MLP(多层神经网络)等等。
     而且相关基本上都是汇编级的高度优化,直接调用就可以。

目前国内、海外机器学习、人工智能方面的学者,没有几位重视这块。
     国外,可能是版权问题,毕竟,Halcon是售价高达数万欧元(不是人民币)的商业软件,而且主要用于自控、机器视觉等工业领域,而不是大学。
     国内,可能是对于Halcon的了解不够。
     其实,图像处理的核心,图像识别、分类,都离不开机器学习、人工智能
     大家看看opencv的发展路线就可以清楚看到,从cv1.0的图像,到cv1.0的机器学习,以及目前cv3.0的GPU、cuda人工智能模块,AI在其中所占据的份额越来越大。

Halcon因为面向一线生产线,所以很多机器学习、人工智能,都是黑箱式的,无需编程,直接调用,录入内置的ocr模块,可以识别99%的标准工业字符:超市、海关、流水线
     不过,Halcon也提供了大量的机器学习模块,毕竟各种应用场合复制,必须进行定制。

这个脚本,AI方面不算复杂,建模就是先拍摄几张产品的照片,直接匹配。
      通常,Halcon建模,需要进行200次(默认参数)迭代。

脚本80多行,很简单。
    虽然这个脚本和前面的酸奶分类脚本,都很简单,其实,应用领域很广
    自动流水线、物流、智能仓库等,无论是元器件的自动识别、包裹自动分类,以及产品的QC等等,核心模块,就是这些代码、算法、

选这个脚本,其中一个原因,是因为前几天,有人在论坛询问,如何对企业生产线的产品(零食好像?)进行自动分类。

 * This example program shows how to apply a general GMM
* classification to distinguish citrus fruits using the
* features 'area' and 'circularity'. Additionally, the
* 2D feature space for the extracted fruits is visualized.
*
read_image (Image, 'color/citrus_fruits_01')
get_image_pointer1 (Image, Pointer, Type, Width, Height)
dev_close_window ()
dev_open_window (, , Width, Height, 'white', WindowHandle)
set_display_font (WindowHandle, , 'courier', 'true', 'false')
dev_set_draw ('margin')
dev_set_line_width ()
dev_display (Image)
dev_update_window ('off')
dev_update_pc ('off')
dev_update_var ('off')
*
FeaturesArea := []
FeaturesCircularity := []
ClassName := ['orange','lemon']
*
* Create a GMM classifier
create_class_gmm (, , , 'spherical', 'normalization', , , GMMHandle)
*
* Add training samples
for i := to by
read_image (Image, 'color/citrus_fruits_' + i$'.2d')
dev_display (Image)
* 'Add Samples'
get_regions (Image, SelectedRegions)
dev_display (SelectedRegions)
count_obj (SelectedRegions, NumberObjects)
for j := to NumberObjects by
select_obj (SelectedRegions, ObjectSelected, j)
get_features (ObjectSelected, WindowHandle, Circularity, Area, RowRegionCenter, ColumnRegionCenter)
FeaturesArea := [FeaturesArea,Area]
FeaturesCircularity := [FeaturesCircularity,Circularity]
FeatureVector := real([Circularity,Area])
if (i <= )
add_sample_class_gmm (GMMHandle, FeatureVector, , )
disp_message (WindowHandle, 'Add to Class:' + ClassName[], 'window', RowRegionCenter, ColumnRegionCenter - , 'black', 'true')
else
add_sample_class_gmm (GMMHandle, FeatureVector, , )
disp_message (WindowHandle, 'Add to Class:' + ClassName[], 'window', RowRegionCenter, ColumnRegionCenter - , 'black', 'true')
endif
endfor
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
endfor
dev_clear_window ()
*
* Visualize the feature space
visualize_2D_feature_space (Cross, Height, Width, WindowHandle, FeaturesArea[:], FeaturesCircularity[:], 'dim gray', )
* 'oranges', ,
visualize_2D_feature_space (Cross, Height, Width, WindowHandle, FeaturesArea[:], FeaturesCircularity[:], 'light gray', )
* 'lemons', ,
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
*
* Train the classifier
train_class_gmm (GMMHandle, , 0.001, 'training', 0.0001, Centers, Iter)
*
* Classify
for i := to by
read_image (Image, 'color/citrus_fruits_' + i$'.2d')
dev_display (Image)
* 'Classify Image', ,
get_regions (Image, SelectedRegions)
dev_display (SelectedRegions)
count_obj (SelectedRegions, NumberObjects)
for j := to NumberObjects by
select_obj (SelectedRegions, ObjectSelected, j)
get_features (ObjectSelected, WindowHandle, Circularity, Area, RowRegionCenter, ColumnRegionCenter)
FeaturesArea := [FeaturesArea,Area]
FeaturesCircularity := [FeaturesCircularity,Circularity]
FeatureVector := real([Circularity,Area])
classify_class_gmm (GMMHandle, FeatureVector, , ClassID, ClassProb, Density, KSigmaProb)
disp_message (WindowHandle, 'Class: ' + ClassName[ClassID], 'window', RowRegionCenter, ColumnRegionCenter - , 'black', 'true')
disp_message (WindowHandle, 'KSigmaProb: ' + KSigmaProb, 'window', RowRegionCenter + , ColumnRegionCenter - , 'black', 'true')
endfor
if (i != )
disp_continue_message (WindowHandle, 'black', 'true')
endif
stop ()
endfor
*
* Clear the classifier from memory
clear_class_gmm (GMMHandle)

【《zw版·Halcon-delphi系列原创教程》,网址,cnblogs.com/ziwang/】

《zw版·Halcon-delphi系列原创教程》 水果自动分类脚本(机器学习、人工智能)的更多相关文章

  1. 【《zw版·Halcon与delphi系列原创教程》 zw_halcon人脸识别

    [<zw版·Halcon与delphi系列原创教程>zw_halcon人脸识别 经常有用户问,halcon人脸识别方面的问题. 可能是cv在人脸识别.车牌识别方面的投入太多了. 其实,人脸 ...

  2. 【《zw版·Halcon与delphi系列原创教程》Halcon图层与常用绘图函数

    [<zw版·Halcon与delphi系列原创教程>Halcon图层与常用绘图函数 Halcon的绘图函数,与传统编程vb.c.delphi语言完全不同,     传统编程语言,甚至cad ...

  3. 《zw版Halcon与delphi系列原创教程》发布说明

    <zw版Halcon与delphi系列原创教程>发布说明 zw转载的<台湾nvp系列halcon-delphi教程>,虽然很多,不过基本上都是从cnc.数控角度的demo..  ...

  4. 《zw版·delphi与Halcon系列原创教程》THOperatorSetX版hello,zw

    <zw版·delphi与Halcon系列原创教程>THOperatorSetX版hello,zw 下面介绍v3版的hello,zw. Halcon两大核心控件,THImagex.THOpe ...

  5. 《zw版·delphi与halcon系列原创教程》zw版_THOperatorSetX控件函数列表 v11中文增强版

    <zw版·delphi与halcon系列原创教程>zw版_THOperatorSetX控件函数列表v11中文增强版 Halcon虽然庞大,光HALCONXLib_TLB.pas文件,源码就 ...

  6. 《zw版·delphi与halcon系列原创教程》zw版_THImagex控件函数列表

    <zw版·delphi与halcon系列原创教程>zw版_THImagex控件函数列表 Halcon虽然庞大,光HALCONXLib_TLB.pas文件,源码就要7w多行,但核心控件就是两 ...

  7. 《zw版·ddelphi与halcon系列原创教程》Halcon的短板与delphi

    [<zw版·delphi与Halcon系列原创教程>Halcon的短板与delphi 看过<delphi与Halcon系列>blog的网友都知道,笔者对Halcon一直是非常推 ...

  8. 《zw版·delphi与halcon系列原创教程》hello,zw

    <zw版·delphi与halcon系列原创教程>hello,zw 按惯例,第一个程序是‘hello’ 毕竟,Halcon是专业的图像库,所以我们就不用纯文本版的,来一个专业版.Halco ...

  9. 《zw版·Halcon-delphi系列原创教程》 zw版-Halcon常用函数Top100中文速查手册

    <zw版·Halcon-delphi系列原创教程> zw版-Halcon常用函数Top100中文速查手册 Halcon函数库非常庞大,v11版有1900多个算子(函数). 这个Top版,对 ...

  10. 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数·简明中文手册 总览

    <zw版·Halcon-delphi系列原创教程> Halcon分类函数·简明中文手册 总览 Halcon函数库非常庞大,光HALCONXLib_TLB.pas文件,源码就要7w多行,但核 ...

随机推荐

  1. java System.out

    从写Hello World开始,我们就开始使用System.out了.System.out是一个static final 的PrintStream对象. 引用一段jdk API document的内容 ...

  2. 50道JavaScript经典题和解法(JS新手进...持续更新...)

    最近在学习<数据结构与算法JavaScript描述>这本书,对JavaScript的特性和数据结构都有了进一步的了解和体会. 学习之余,也进行了相应的练习,题目难度不大,但是对所学知识的巩 ...

  3. 算法训练 Hankson的趣味题

    算法训练 Hankson的趣味题   时间限制:1.0s   内存限制:64.0MB        问题描述 Hanks 博士是BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫Han ...

  4. ArcGIS API for Silverlight之配准JPG图片地图文字倾斜解决方案

    原文:ArcGIS API for Silverlight之配准JPG图片地图文字倾斜解决方案 根据实际JPG图片进行配准后,发布的地图,利用ArcGIS API for Silverlight在网页 ...

  5. An Implementation of Double-Array Trie

    Contents What is Trie? What Does It Take to Implement a Trie? Tripple-Array Trie Double-Array Trie S ...

  6. [LeetCode]题解(python):079 Word Search

    题目来源 https://leetcode.com/problems/word-search/ Given a 2D board and a word, find if the word exists ...

  7. 真不知道JavaScrip【数组】还有这么多东西....

    前段时间在频繁的用数组,但一直不知道JavaScript 数组还有这么多东西,收集了一下看看: 首先:数组是对象的特殊形式,接下来看看它有哪些方法.....push()在末尾增加一个或者是多个 uns ...

  8. iOS:详细的正则表达式

    1.简介: 在项目中,正则的使用是很普遍的,例如登录账号和密码(手机号.邮箱等).用到的方法就是谓词对象过滤:NSPredicate. 2.什么是正则表达式: 正则表达式,又称正规表示法,是对字符串操 ...

  9. form和validate示例

    //验证from表单 $(function () { $("#addUserForm").validate({ rules: { txtName: { required: true ...

  10. Maven 迁移local repository

    1.1 Maven仓库主要有2种: remote repository:相当于公共的仓库,大家都能访问到,一般可以用URL的形式访问,一般默认的地址:http://search.maven.org/ ...