<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Computer Vision Software</title><link>http://www.computer-vision-software.com/blog</link><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/ComputerVisionSoftware" /><description>Rhonda Ltd., computer vision software blog</description><language>en</language><lastBuildDate>Thu, 14 Apr 2011 19:47:28 PDT</lastBuildDate><generator>http://wordpress.org/?v=3.3.1</generator><sy:updatePeriod xmlns:sy="http://purl.org/rss/1.0/modules/syndication/">hourly</sy:updatePeriod><sy:updateFrequency xmlns:sy="http://purl.org/rss/1.0/modules/syndication/">1</sy:updateFrequency><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/ComputerVisionSoftware" /><feedburner:info uri="computervisionsoftware" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>ComputerVisionSoftware</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item><title>CETW participation announcement</title><link>http://feedproxy.google.com/~r/ComputerVisionSoftware/~3/VEppJjLb0Yk/</link><category>Demo video</category><category>YouTube</category><category>announcement</category><category>exhibition</category><category>myAudience</category><category>video</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Alexander Gavrik</dc:creator><pubDate>Sun, 03 Apr 2011 17:44:03 PDT</pubDate><guid isPermaLink="false">http://www.computer-vision-software.com/blog/?p=165</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/s2WZbUAXp8E&amp;rel=0&amp;color1=0xd6d6d6&amp;color2=0xf0f0f0"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/s2WZbUAXp8E&amp;rel=0&amp;color1=0xd6d6d6&amp;color2=0xf0f0f0" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></object></p>
<p><a href="http://www.youtube.com/watch?v=s2WZbUAXp8E">myAudience promo video</a></p>
<p>Rhonda Software will participate in Customer Engagement Technology World (CET World) in San Francisco, April 27-28, 2011. We are pleased to invite you to visit our booth #235.</p>
<p>We’ll be glad to have this chance to introduce you our innovative system <strong>myAudience</strong> &#8211; tool for automated audience measurement for digital signage, kiosks, showcases and many others. You can click this special <a title="link" href="https://www.xpressreg.net/register/cetw041/start.asp?p=PAS4GST" target="_blank">link </a>to register.</p>
<p>Your special PRIORITY CODE will automatically appear with your registration, giving you a FREE exhibits only pass. For up-to-date information about Customer Engagement Technololgy World, please visit <a title="www.CETworld.com" href="http://www.CETworld.com" target="_blank">www.CETworld.com</a>.</p>
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow: hidden;">
<p><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves /> <w:TrackFormatting /> <w:PunctuationKerning /> <w:ValidateAgainstSchemas /> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF /> <w:LidThemeOther>RU</w:LidThemeOther> <w:LidThemeAsian>X-NONE</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:BreakWrappedTables /> <w:SnapToGridInCell /> <w:WrapTextWithPunct /> <w:UseAsianBreakRules /> <w:DontGrowAutofit /> <w:SplitPgBreakAndParaMark /> <w:DontVertAlignCellWithSp /> <w:DontBreakConstrainedForcedTables /> <w:DontVertAlignInTxbx /> <w:Word11KerningPairs /> <w:CachedColBalance /> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> <m:mathPr> <m:mathFont m:val="Cambria Math" /> <m:brkBin m:val="before" /> <m:brkBinSub m:val="&#45;-" /> <m:smallFrac m:val="off" /> <m:dispDef /> <m:lMargin m:val="0" /> <m:rMargin m:val="0" /> <m:defJc m:val="centerGroup" /> <m:wrapIndent m:val="1440" /> <m:intLim m:val="subSup" /> <m:naryLim m:val="undOvr" /> </m:mathPr></w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"   DefSemiHidden="true" DefQFormat="false" DefPriority="99"   LatentStyleCount="267"> <w:LsdException Locked="false" Priority="0" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Normal" /> <w:LsdException Locked="false" Priority="9" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="heading 1" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9" /> <w:LsdException Locked="false" Priority="39" Name="toc 1" /> <w:LsdException Locked="false" Priority="39" Name="toc 2" /> <w:LsdException Locked="false" Priority="39" Name="toc 3" /> <w:LsdException Locked="false" Priority="39" Name="toc 4" /> <w:LsdException Locked="false" Priority="39" Name="toc 5" /> <w:LsdException Locked="false" Priority="39" Name="toc 6" /> <w:LsdException Locked="false" Priority="39" Name="toc 7" /> <w:LsdException Locked="false" Priority="39" Name="toc 8" /> <w:LsdException Locked="false" Priority="39" Name="toc 9" /> <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption" /> <w:LsdException Locked="false" Priority="10" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Title" /> <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font" /> <w:LsdException Locked="false" Priority="11" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtitle" /> <w:LsdException Locked="false" Priority="22" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Strong" /> <w:LsdException Locked="false" Priority="20" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Emphasis" /> <w:LsdException Locked="false" Priority="59" SemiHidden="false"    UnhideWhenUsed="false" Name="Table Grid" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text" /> <w:LsdException Locked="false" Priority="1" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="No Spacing" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 1" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 1" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 1" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 1" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision" /> <w:LsdException Locked="false" Priority="34" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="List Paragraph" /> <w:LsdException Locked="false" Priority="29" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Quote" /> <w:LsdException Locked="false" Priority="30" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Quote" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 1" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 1" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 1" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 1" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 1" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 2" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 2" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 2" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 2" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 2" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 2" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 2" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 2" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 3" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 3" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 3" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 3" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 3" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 3" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 3" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 3" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 3" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 4" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 4" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 4" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 4" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 4" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 4" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 4" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 4" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 4" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 5" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 5" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 5" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 5" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 5" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 5" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 5" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 5" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 5" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 6" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 6" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 6" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 6" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 6" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 6" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 6" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 6" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 6" /> <w:LsdException Locked="false" Priority="19" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis" /> <w:LsdException Locked="false" Priority="21" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis" /> <w:LsdException Locked="false" Priority="31" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference" /> <w:LsdException Locked="false" Priority="32" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Reference" /> <w:LsdException Locked="false" Priority="33" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Book Title" /> <w:LsdException Locked="false" Priority="37" Name="Bibliography" /> <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading" /> </w:LatentStyles> </xml><![endif]--><!--[if gte mso 10]> <mce:style><!   /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Table Normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin:0cm; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:"Times New Roman"; 	mso-fareast-theme-font:minor-fareast; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi;} --> <!--[endif]--></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: &quot;Calibri&quot;,&quot;sans-serif&quot;;" lang="EN-US">Rhonda will participate in Customer Engagement Technology World (CET World) in San Francisco, April 27-28, 2011. We are pleased to invite you to visit our booth #235.</span></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: &quot;Calibri&quot;,&quot;sans-serif&quot;;" lang="EN-US"> </span></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: &quot;Calibri&quot;,&quot;sans-serif&quot;;" lang="EN-US">We’ll be glad to have this chance to introduce you our innovative system myAudience &#8211; tool for automated audience measurement for digital signage, kiosks, showcases and many others. Please click this special link to register <a href="https://www.xpressreg.net/register/cetw041/start.asp?p=PAS4GST">https://www.xpressreg.net/register/cetw041/start.asp?p=PAS4GST</a>.</span></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: &quot;Calibri&quot;,&quot;sans-serif&quot;;" lang="EN-US"> </span></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: &quot;Calibri&quot;,&quot;sans-serif&quot;;" lang="EN-US">Your special PRIORITY CODE will automatically appear with your registration, giving you a FREE exhibits only pass. For up-to-date information about Customer Engagement Technololgy World, please visit <a href="http://www.cetworld.com/">www.CETworld.com</a>.</span></p>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ComputerVisionSoftware?a=VEppJjLb0Yk:Sovrd0aRz88:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ComputerVisionSoftware?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ComputerVisionSoftware?a=VEppJjLb0Yk:Sovrd0aRz88:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ComputerVisionSoftware?i=VEppJjLb0Yk:Sovrd0aRz88:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded><description>myAudience promo video Rhonda Software will participate in Customer Engagement Technology World (CET World) in San Francisco, April 27-28, 2011. We are pleased to invite you to visit our booth #235. We’ll be glad to have this chance to introduce you our innovative system myAudience &amp;#8211; tool for automated audience measurement for digital signage, kiosks, [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.computer-vision-software.com/blog/2011/04/cetw-participation-announcement/feed/</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><feedburner:origLink>http://www.computer-vision-software.com/blog/2011/04/cetw-participation-announcement/</feedburner:origLink></item><item><title>Fine tuning of compiler options to increase application performance</title><link>http://feedproxy.google.com/~r/ComputerVisionSoftware/~3/IfcQ-a1Eljs/</link><category>Uncategorized</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Alexander Permyakov</dc:creator><pubDate>Sun, 20 Mar 2011 18:27:57 PDT</pubDate><guid isPermaLink="false">http://www.computer-vision-software.com/blog/?p=163</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Performance is essential for video analytic applications since algorithms are usually computationally heavy and such systems are supposed to work almost in real time. From one side it can be increased by improving &amp; changing algorithms. This is a major way since it allows to increase performance dramatically. From another side performance can be increased little bit more by relatively simple way – using of good compiler and by tuning of compile options. Let see how it can be done in real programs.</p>
<p><span id="more-163"></span></p>
<p><strong>For the first example</strong> I used LAME encoder (<a href="http://lame.sourceforge.net/">http://lame.sourceforge.net/</a>) . Why LAME? First of all because it open source and I can recompile it with different compilers and options. In the second place the simplicity of performance measurement. Performance will be a time required to reencode mp3 file.  In the third place it shows well determinate results what allow better understand how different compile options affect speed.</p>
<p>The testing has been performed on computers with different CPUs under Windows operation system.</p>
<p>Intel Pentium 4 3GHz<br />
Intel Core 2 Duo 2.8 GHz<br />
AMD Athlon2x4 (635) 2.9 GHz overclocked to 3.3 GHz<br />
Intel Core i5 (2500) 3.3 GHz</p>
<p>Compilation has been done by VisualStudio9 and GCC4.5.1(using MinGW)</p>
<p>Encoding time has been measured 10 times and average value placed to the table.</p>
<p>As the base 0.00% I used safe options (-O3 -march=prescott -fomit-frame-pointer -mfpmath=sse) that will work on most modern AMD and Intel CPUs. Option -march=core2 may use ssse3 instructions and therefore code may fail to work on AMD and Intel Pentimum 4 family CPUs.</p>
<p><strong>Intel Pentium 4 3GHz</strong></p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>Compiler</td>
<td>Compiler options</td>
<td>Average Time</td>
<td>%</td>
</tr>
<tr>
<td>GCC4.5.1</td>
<td>-O3 -march=prescott -fomit-frame-pointer   -mfpmath=sse -ffast-math -profile-use</td>
<td>13.206153 sec</td>
<td>-7.83 %</td>
</tr>
<tr>
<td>GCC4.5.1</td>
<td>-O3 -march=prescott -fomit-frame-pointer   -mfpmath=sse -profile-use</td>
<td>13.537400 sec</td>
<td>-5.52 %</td>
</tr>
<tr>
<td>GCC4.5.1</td>
<td>-O3 -march=prescott -fomit-frame-pointer   -mfpmath=sse -ffast-math</td>
<td>13.999892 sec</td>
<td>-2.29 %</td>
</tr>
<tr>
<td>GCC4.5.1</td>
<td>-O3 -march=prescott -fomit-frame-pointer   -mfpmath=sse</td>
<td>14.328020 sec</td>
<td>0.00 %</td>
</tr>
<tr>
<td>GCC4.5.1</td>
<td>-O3 -fomit-frame-pointer -mfpmath=sse</td>
<td>14.621770 sec</td>
<td>2.05 %</td>
</tr>
<tr>
<td>Visual_Studio_9</td>
<td>/GS- /fp:fast /O2</td>
<td>14.646769 sec</td>
<td>2.22 %</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<ol>
<li>Optimization to prescott architecture gives 2% speed increase.</li>
<li>–ffast-math gives 2% more</li>
<li>Profile guided optimization gives 5% speed increase</li>
</ol>
<p>&nbsp;</p>
<p><strong>Intel Core 2 Duo 2.8 GHz</strong></p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>Compiler</td>
<td>Compiler options</td>
<td>Average Time</td>
<td>%</td>
</tr>
<tr>
<td>GCC4.5.1</td>
<td>-O3 -march=core2 -fomit-frame-pointer   -mfpmath=sse -ffast-math -profile-use</td>
<td>7.818235 sec</td>
<td>-6.65 %</td>
</tr>
<tr>
<td>GCC4.5.1</td>
<td>-O3 -march=core2 -fomit-frame-pointer   -mfpmath=sse -profile-use</td>
<td>7.824039 sec</td>
<td>-6.58 %</td>
</tr>
<tr>
<td>GCC4.5.1</td>
<td>-O3 -march=prescott -fomit-frame-pointer   -mfpmath=sse -ffast-math -profile-use</td>
<td>7.893243 sec</td>
<td>-5.75 %</td>
</tr>
<tr>
<td>GCC4.5.1</td>
<td>-O3 -march=prescott -fomit-frame-pointer   -mfpmath=sse -profile-use</td>
<td>7.976644 sec</td>
<td>-4.75 %</td>
</tr>
<tr>
<td>GCC4.5.1</td>
<td>-O3 -march=core2 -fomit-frame-pointer   -mfpmath=sse -ffast-math</td>
<td>8.234858 sec</td>
<td>-1.67 %</td>
</tr>
<tr>
<td>GCC4.5.1</td>
<td>-O3 -march=core2 -fomit-frame-pointer   -mfpmath=sse</td>
<td>8.374867 sec</td>
<td>0.00 %</td>
</tr>
<tr>
<td>GCC4.5.1</td>
<td>-O3 -march=prescott -fomit-frame-pointer   -mfpmath=sse -ffast-math</td>
<td>8.415269 sec</td>
<td>0.48 %</td>
</tr>
<tr>
<td>GCC4.5.1</td>
<td>-O3 -march=prescott -fomit-frame-pointer   -mfpmath=sse</td>
<td>8.423270 sec</td>
<td>0.58 %</td>
</tr>
<tr>
<td>Visual_Studio_9</td>
<td>/GS- /fp:fast /O2</td>
<td>8.814092 sec</td>
<td>5.24 %</td>
</tr>
<tr>
<td>GCC4.5.1</td>
<td>-O3 -fomit-frame-pointer -mfpmath=sse</td>
<td>9.224519 sec</td>
<td>10.15 %</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<ol>
<li>Optimization to core2 architecture gives 10% speed increase.</li>
<li>–ffast-math gives only 1% increase</li>
<li>Profile guided optimization gives 6% increase</li>
</ol>
<p>&nbsp;</p>
<p><strong>Intel Core i5 </strong><strong>(2500) </strong><strong>3.3 GHz</strong></p>
<p>There is no special -march option for core i3,5,7 CPUs.  Option -march=core2 can be used for them.</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>Compiler</td>
<td>Compiler options</td>
<td>Average Time</td>
<td>%</td>
</tr>
<tr>
<td>GCC4.5.1</td>
<td>-O3 -march=core2 -fomit-frame-pointer   -mfpmath=sse -ffast-math -profile-use</td>
<td>4.059390 sec</td>
<td>-8.52 %</td>
</tr>
<tr>
<td>GCC4.5.1</td>
<td>-O3 -march=prescott -fomit-frame-pointer   -mfpmath=sse -ffast-math -profile-use</td>
<td>4.093767 sec</td>
<td>-7.75 %</td>
</tr>
<tr>
<td>GCC4.5.1</td>
<td>-O3 -march=core2 -fomit-frame-pointer   -mfpmath=sse -ffast-math</td>
<td>4.156268 sec</td>
<td>-6.34 %</td>
</tr>
<tr>
<td>GCC4.5.1</td>
<td>-O3 -march=prescott -fomit-frame-pointer   -mfpmath=sse -ffast-math</td>
<td>4.200015 sec</td>
<td>-5.35 %</td>
</tr>
<tr>
<td>GCC4.5.1</td>
<td>-O3 -march=core2 -fomit-frame-pointer   -mfpmath=sse -profile-use</td>
<td>4.253143 sec</td>
<td>-4.15 %</td>
</tr>
<tr>
<td>GCC4.5.1</td>
<td>-O3 -march=prescott -fomit-frame-pointer   -mfpmath=sse -profile-use</td>
<td>4.321892 sec</td>
<td>-2.61 %</td>
</tr>
<tr>
<td>GCC4.5.1</td>
<td>-O3 -march=prescott -fomit-frame-pointer   -mfpmath=sse</td>
<td>4.437519 sec</td>
<td>0.00 %</td>
</tr>
<tr>
<td>GCC4.5.1</td>
<td>-O3 -march=core2 -fomit-frame-pointer   -mfpmath=sse</td>
<td>4.468770 sec</td>
<td>0.70 %</td>
</tr>
<tr>
<td>Visual_Studio_9</td>
<td>/GS- /fp:fast /O2</td>
<td>4.737522 sec</td>
<td>6.76 %</td>
</tr>
<tr>
<td>GCC4.5.1</td>
<td>-O3 -fomit-frame-pointer -mfpmath=sse</td>
<td>4.815647 sec</td>
<td>8.52 %</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<ol>
<li>Optimization to core2 architecture gives 9% speed increase.</li>
<li>–ffast-math gives  6% increase</li>
<li>Profile guided optimization gives 4% increase</li>
</ol>
<p>&nbsp;</p>
<p><strong>AMD Athlon2x4 (635) 2.9 GHz overclocked to 3.3 GHz</strong></p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>Compiler</td>
<td>Compiler options</td>
<td>Average Time</td>
<td>%</td>
</tr>
<tr>
<td>GCC4.5.1</td>
<td>-O3 -march=amdfam10 -fomit-frame-pointer   -mfpmath=sse -ffast-math -profile-use</td>
<td>6.078386 sec</td>
<td>-6.14 %</td>
</tr>
<tr>
<td>GCC4.5.1</td>
<td>-O3 -march=amdfam10 -fomit-frame-pointer   -mfpmath=sse -ffast-math</td>
<td>6.170114 sec</td>
<td>-4.73 %</td>
</tr>
<tr>
<td>GCC4.5.1</td>
<td>-O3 -march=prescott -fomit-frame-pointer   -mfpmath=sse -ffast-math -profile-use</td>
<td>6.308954 sec</td>
<td>-2.58 %</td>
</tr>
<tr>
<td>GCC4.5.1</td>
<td>-O3 -march=amdfam10 -fomit-frame-pointer   -mfpmath=sse -profile-use</td>
<td>6.388826 sec</td>
<td>-1.35 %</td>
</tr>
<tr>
<td>GCC4.5.1</td>
<td>-O3 -march=amdfam10 -fomit-frame-pointer   -mfpmath=sse</td>
<td>6.476186 sec</td>
<td>0.00 %</td>
</tr>
<tr>
<td>GCC4.5.1</td>
<td>-O3 -march=prescott -fomit-frame-pointer   -mfpmath=sse -profile-use</td>
<td>6.527979 sec</td>
<td>0.80 %</td>
</tr>
<tr>
<td>Visual_Studio_9</td>
<td>/GS- /fp:fast /O2</td>
<td>6.942938 sec</td>
<td>7.21 %</td>
</tr>
<tr>
<td>GCC4.5.1</td>
<td>-O3 -march=prescott -fomit-frame-pointer   -mfpmath=sse -ffast-math</td>
<td>7.293316 sec</td>
<td>12.62 %</td>
</tr>
<tr>
<td>GCC4.5.1</td>
<td>-O3 -march=prescott -fomit-frame-pointer   -mfpmath=sse</td>
<td>7.372564 sec</td>
<td>13.84 %</td>
</tr>
<tr>
<td>GCC4.5.1</td>
<td>-O3 -fomit-frame-pointer -mfpmath=sse</td>
<td>7.661477 sec</td>
<td>18.30 %</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<ol>
<li>Optimization to amdfam10 architecture gives 18% speed increase</li>
<li>–ffast-math gives 5 %</li>
<li>Profile guided optimization gives only 1%.</li>
</ol>
<p>&nbsp;</p>
<p><strong>Total results</strong></p>
<p><strong> </strong>Optimization to particular architecture and profile guided optimization may give up to 20 % speed increase.</p>
<p>&nbsp;</p>
<p>As I already said  LAME is simple example. Let see how performance options affect real video analytic application .</p>
<p>&nbsp;</p>
<p><strong>For the second example</strong> I used critical part of real video analytic application (myAudience). It uses boost, opencv and  ffmpeg libraries. Also it runs in several threads. In comparison with LAME encoder performance measurement for this application was not so simple. Moreover because of inaccuracy of measurements in multithreading dynamic enviroment results were not so well determinate. So I have prepared just one table which shows results in general how I understand them.</p>
<p>Compilation has been done by GCC4.5.2 and GCC4.1.2 on CentOS_5.5</p>
<p>&nbsp;</p>
<p><strong>Intel Core i5 </strong><strong>(2500) </strong><strong>3.3 GHz</strong></p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>Compiler</td>
<td>Compiler options</td>
<td>Average Time</td>
<td>%</td>
</tr>
<tr>
<td>GCC4.5.2</td>
<td>-O3 -march=core2 -fomit-frame-pointer   -mfpmath=sse -ffast-math -profile-use</td>
<td>19591.16</td>
<td>-4.90 %</td>
</tr>
<tr>
<td>GCC4.5.2</td>
<td>-O3 -march=core2 -fomit-frame-pointer   -mfpmath=sse -profile-use</td>
<td>19873.74</td>
<td>-3.53 %</td>
</tr>
<tr>
<td>GCC4.5.2</td>
<td>-O3 -march=core2 -fomit-frame-pointer   -mfpmath=sse -ffast-math</td>
<td>20010.55</td>
<td>-2.86 %</td>
</tr>
<tr>
<td>GCC4.5.2</td>
<td>-O3 -march=core2 -fomit-frame-pointer   -mfpmath=sse</td>
<td>20410.36</td>
<td>-2.09 %</td>
</tr>
<tr>
<td>GCC4.5.2</td>
<td>-O3 -march=prescott -fomit-frame-pointer   -mfpmath=sse -ffast-math</td>
<td>20410.36</td>
<td>-0.92 %</td>
</tr>
<tr>
<td>GCC4.1.2</td>
<td>-O3 -march=core2 -fomit-frame-pointer   -mfpmath=sse -ffast-math</td>
<td>20532.91</td>
<td>-0.33 %</td>
</tr>
<tr>
<td>GCC4.5.2</td>
<td>-O3 -march=prescott -fomit-frame-pointer   -mfpmath=sse</td>
<td>20600.55</td>
<td>0.00 %</td>
</tr>
<tr>
<td>GCC4.1.2</td>
<td>-O3 -march=core2 -fomit-frame-pointer   -mfpmath=sse</td>
<td>20816.26</td>
<td>1.05 %</td>
</tr>
<tr>
<td>GCC4.1.2</td>
<td>-O3 -march=prescott -fomit-frame-pointer   -mfpmath=sse -ffast-math</td>
<td>21962.44</td>
<td>6.61 %</td>
</tr>
<tr>
<td>GCC4.1.2</td>
<td>-O3 -march=prescott -fomit-frame-pointer   -mfpmath=sse</td>
<td>22221.88</td>
<td>7.87 %</td>
</tr>
</tbody>
</table>
<p>What can we conclude after that? Few things</p>
<ol>
<li>GCC4.5.2 little bit faster than GCC4.1.2 plus it allow to use profile guided optimization, and “amdfam10”, “atom” architecture options.</li>
<li>Profile guided optimization give about 4% speed increase.</li>
<li>–ffast-math gives about 2% speed increase</li>
</ol>
<p>&nbsp;</p>
<p>As you can see, tuning compiler options allows to get real improvement in performance, not so huge sometimes, but almost free, so it should be kept in mind.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ComputerVisionSoftware?a=IfcQ-a1Eljs:4Fs09wyOXPg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ComputerVisionSoftware?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ComputerVisionSoftware?a=IfcQ-a1Eljs:4Fs09wyOXPg:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ComputerVisionSoftware?i=IfcQ-a1Eljs:4Fs09wyOXPg:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded><description>Performance is essential for video analytic applications since algorithms are usually computationally heavy and such systems are supposed to work almost in real time. From one side it can be increased by improving &amp;#38; changing algorithms. This is a major way since it allows to increase performance dramatically. From another side performance can be increased [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.computer-vision-software.com/blog/2011/03/fine-tuning-of-compiler-options-to-increase-application-performance/feed/</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">2</slash:comments><feedburner:origLink>http://www.computer-vision-software.com/blog/2011/03/fine-tuning-of-compiler-options-to-increase-application-performance/</feedburner:origLink></item><item><title>Testing video analytic algorithms</title><link>http://feedproxy.google.com/~r/ComputerVisionSoftware/~3/Uuo3cAgfmag/</link><category>Uncategorized</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Yuri Vashchenko</dc:creator><pubDate>Wed, 19 Jan 2011 01:09:05 PST</pubDate><guid isPermaLink="false">http://www.computer-vision-software.com/blog/?p=153</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p style="text-align: justify;">A modern video analytic system depending on business/customer requirements should work in different situations/conditions. Complex, noisy background with many different objects/textures, changing lighting conditions, shadows, lack of light, weather conditions (for outdoor system installations) like rain, snow, fog and others, motion blur, camera movements, cameral sensor quality, camera resolution, camera focus issues, camera internal optimizations, color temperature, end many other factors make development of the good object recognition software a challenging, almost impossible task. In addition, the usual requirement is that the system should work in real time, which makes this task even more difficult.<span id="more-153"></span><br />
So, even having current high-performance hardware, developers have to find a balance between the algorithm quality and speed (performance). Fixing a small quality issue sometimes causes significant performance degradation.<br />
To keep this under control, a consistent unit testing should be performed with every algorithm change. To do this, Rhonda Software uses the unit test approach as described below:</p>
<ol>
<li>A set of metrics is prepared. These metrics definitions describe “ground rules”, i.e. how actual logs from the system under test is interpreted, what is considered correct and what is not correct. For example, for people counting metric the following definition may be used:PEOPLE COUNTING<br />
&lt;visitors_number&gt; total number of visitors in test frame range = Correct + Missing + Unexpected + False<br />
Real visitors (all found and not found visitors besides False) = Correct + Missing + Unexpected<br />
Correct: Log visitors associated with test visitors, even if more than one log visitor is associated with one test visitor (only if test visitor had Hard detection status between frames were previous and next log visitor were correlated).<br />
Missing: Not found in log<br />
Unexpected: Log visitor is associated with earlier associated test visitor, but there is no Hard visitor detection status between these log visitors.<br />
False: Log visitor is not associated with any test visitor</li>
<li>For each metric a set of KPIs (Key performance indicators) is defined. For example, for people counting metric the following KPIs may be defined:<br />
# of Total visitors<br />
# of Real visitors<br />
# ofFalse visitors<br />
# of Missing visitors<br />
False visitor rate (percent)<br />
Missing visitor rate (percent)<br />
Counting error rate (percent)</li>
<li>Some KPIs may have a goal. For example, we may want to have Counting error rate less than 3%.</li>
<li>A set of test videos is created. Typically, there are dozens of videos prepared for the project to cover as many different situations/conditions as possible.</li>
<li>Project specific marker tool is used to create a special “markup”, or Meta information describing the objects located at each of input video. Usually, it is an xml file having the same name as an input video file. A specially trained engineer uses this tool to open a video file, go through selected frames and mark objects on them. For instance, for demography detection software, an operator may mark all persons found on a frame, specify coordinates location of their faces and add special attributes for every face like gender, ethnicity or age category. Some objects may be marked as “hard examples”. It specifies that this object is hard to detect/recognized due to different situations, like had motion blur, partially cover by another object, etc. By other words, a hard example is an object that potentially could be detected/recognized by the software, but it is not very likely, so it is ok if the software does not detect/recognize this object. Markup files are stored together with the video test files on a dedicated server for easy access.</li>
<li>Software under test is executed in a special logging mode. This mode tells the software to log everything it detects/recognizes and put it into a special (usually xml) log file. A specially prepared set of video files is given to the software version as an input. For each input video file a corresponding xml log is created.</li>
<li>Another project-specific tool, comparer is then used to get KPI values. The tool uses prepared markup (see 5) and actual data values from log (see 6). As a result, set of KP values is generated.</li>
</ol>
<p style="text-align: justify;">Metrics, KPIs and markup are created once per project/video. Testing and metrics calculation can be made for every release to see how this release changed in terms of quality and speed. This allows quickly detecting and fixing possible quality/speed degradations introduced in the release. In addition, when tested periodically, project management can see how the system evolves over the time in terms of quality/performance.<br />
While making video for testing and markup of this video requires people to do, most of other unit testing activities could be performed automatically which helps keeping the quality and performance under control and requires little effort to perform. All of above allows us to develop state of the art, highly competitive software.</p>
<p style="text-align: justify;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="350" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.youtube.com/v/0uJu8IEiDbI" /><embed type="application/x-shockwave-flash" width="425" height="350" src="http://www.youtube.com/v/0uJu8IEiDbI"></embed></object></p>
<p style="text-align: justify;">The video above explains the process of markering a video file.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ComputerVisionSoftware?a=Uuo3cAgfmag:fsF9KHk339w:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ComputerVisionSoftware?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ComputerVisionSoftware?a=Uuo3cAgfmag:fsF9KHk339w:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ComputerVisionSoftware?i=Uuo3cAgfmag:fsF9KHk339w:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded><description>A modern video analytic system depending on business/customer requirements should work in different situations/conditions. Complex, noisy background with many different objects/textures, changing lighting conditions, shadows, lack of light, weather conditions (for outdoor system installations) like rain, snow, fog and others, motion blur, camera movements, cameral sensor quality, camera resolution, camera focus issues, camera internal optimizations, [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.computer-vision-software.com/blog/2011/01/testing-video-analytic-algorithms/feed/</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><feedburner:origLink>http://www.computer-vision-software.com/blog/2011/01/testing-video-analytic-algorithms/</feedburner:origLink></item><item><title>Face Recognition</title><link>http://feedproxy.google.com/~r/ComputerVisionSoftware/~3/GHY3K-jsGSU/</link><category>Face recognition</category><category>Gabor wavelet</category><category>Object Recognition</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Sergey Koulik</dc:creator><pubDate>Thu, 09 Sep 2010 18:51:42 PDT</pubDate><guid isPermaLink="false">http://www.computer-vision-software.com/blog/?p=135</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>2D face recognition is an extensively studied, but still evolving  subject of research. Various strategies including statistical  approaches, hidden Markov models, neural networks, template based and  feature based matching have been proposed.  Here we briefly present our  implementation which is based on past research and achieves  state-of-the-art recognition performance on considerably low resolution  input facial images.<br />
Our approach can be divided into three independent phases: Facial  landmarks library construction (offline), Building of facial descriptor  (once per novel image) and Facial descriptors matching.</p>
<p style="text-align: center;"><a href="http://www.computer-vision-software.com/blog/wp-content/uploads/2010/09/result_11.png"><img class="size-full wp-image-139 aligncenter" title="Face recognition result on live video sequence" src="http://www.computer-vision-software.com/blog/wp-content/uploads/2010/09/result_11.png" alt="Face recognition result on live video sequence" width="640" height="141" /></a></p>
<p><span id="more-135"></span><br />
<strong>Facial landmarks library construction</strong><br />
A set of training images is marked by hand. Coordinates of important  facial landmarks (such as lips’ corners, nose tip, etc.) are stored in a  database for further processing.<br />
Using information about landmarks position it is easy to geometrically transform and align training images.<br />
Illumination correction is applied to transformed images in order to get  rid of shadows and glares and normalize overall exposure.<br />
Gabor jets are then extracted from normalized images in every landmark  location. Extracted jets are stored in facial landmarks library for  further using during novel images processing.</p>
<p><strong>Building of facial descriptor</strong><br />
Having received a novel facial image we first try to locate approximate  eyes position using our hybrid method of Viola-Jones and Bayesian  classifier. The purpose why eyes coordinates are required is twofold:  they are used to geometrically wrap and align input image and also to  get initial estimate of coordinates of other facial landmarks.<br />
Illumination correction and background clipping is then performed.<br />
Starting from approximate eyes position and using samples from facial  landmarks library we iteratively find precise locations of all facial  landmarks on novel face.<br />
Found landmarks positions are then used to extract Gabor jets and  construct informative facial descriptor. Original input image is not  required any more after this step.</p>
<p><strong>Facial descriptors matching</strong><br />
The last and the simplest step is matching two facial descriptors which  yields a similarity measure between two faces – a real number between 0  (nothing in common) and 1 (complete match). A threshold found by  experiment is used to make decision whether the faces belong to the same  or different persons.<br />
Descriptors matching is several orders of magnitude faster than  descriptor building which makes it possible to match new face against a  database of known persons in moderate time.</p>
<p><strong>Some technical details</strong><br />
Working face size: 45&#215;45 px<br />
Descriptor building time: 300ms on P4 1300 MHz (single core).<br />
Descriptors matching: 2ms on P4 1300 MHz (single core).<br />
Recognition rate: Feret fa/fb: 88%, Yale Faces: 86%, Faces in wild: 73%. Both false positives and false negatives considered.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ComputerVisionSoftware?a=GHY3K-jsGSU:btxlKIWjZPE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ComputerVisionSoftware?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ComputerVisionSoftware?a=GHY3K-jsGSU:btxlKIWjZPE:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ComputerVisionSoftware?i=GHY3K-jsGSU:btxlKIWjZPE:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded><description>2D face recognition is an extensively studied, but still evolving subject of research. Various strategies including statistical approaches, hidden Markov models, neural networks, template based and feature based matching have been proposed. Here we briefly present our implementation which is based on past research and achieves state-of-the-art recognition performance on considerably low resolution input facial [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.computer-vision-software.com/blog/2010/09/face-recognition/feed/</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">2</slash:comments><feedburner:origLink>http://www.computer-vision-software.com/blog/2010/09/face-recognition/</feedburner:origLink></item><item><title>Currency recognition using cortex-like model.</title><link>http://feedproxy.google.com/~r/ComputerVisionSoftware/~3/s0SwubVFOak/</link><category>Currency recognition</category><category>HMAX</category><category>Object Recognition</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Igor Stepura</dc:creator><pubDate>Mon, 09 Aug 2010 00:05:18 PDT</pubDate><guid isPermaLink="false">http://www.computer-vision-software.com/blog/?p=125</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Currency recognition seems to be one of the popular topic in &#8220;applied&#8221; computer vision. There are a lot of  articles, blog entries describing different approaches to currency recognition. In this post I&#8217;ll share my experience of using so-called HMAX model.</p>
<p><span id="more-125"></span></p>
<p><strong>Introduction</strong></p>
<p>HMAX aims to model hierarchical object recognition in cortex. I won&#8217;t get into details of HMAX model, just provide some useful links for curious readers:<br />
<a href=" http://riesenhuberlab.neuro.georgetown.edu/hmax.html"></p>
<p>http://riesenhuberlab.neuro.georgetown.edu/hmax.html</a></p>
<p><a href="http://cbcl.mit.edu/cbcl/publications/index-pubs.html">http://cbcl.mit.edu/cbcl/publications/index-pubs.html</a></p>
<p>My approach in using HMAX for currency recognition was pretty simple.</p>
<p>1. Generate proper С1-feature dictionary<br />
2. Using C1-feature dictionary, generate C2 vectors for images in training dataset<br />
3. Train multi-class SVM classifier using C2 vectors.<br />
4. Test classifier on testing dataset<br />
5. PROFIT</p>
<p><strong>C1 dictionary generation</strong><br />
My initial approach was to generate dictionary automatically using an &#8220;interesting point&#8221; detector and then generate C-1 patches of size corresponding to the size of detected image structure. Hessian-Laplace (see Mikolajczyk K. and Schmid, C. 2004. ) method seemed to suit well for this task, since it  detects characteristic scale of interesting points. My implementation of Hessian-Laplace worked reasonable fine, however number of interesting points it detected was big, so it was pretty hard for my C1 extractor to decide which one of these points was really &#8220;interesting&#8221; for currency recognition.<br />
As a result &#8211; none of my automatically generated dictionaries (which contained about 1000 samples) produce suitable classification outputs.</p>
<p>So I decided to start from smaller dictionary, which would contain hand-picked, really descriptive patches from all kind of bills. For each image in C1 dataset I took 8 patches ( see example of pacthes below). All images in C1 dataset were resized to have width 300 pixels. Size of C1 dictionary now became 88. </p>
<p><a href="http://www.computer-vision-software.com/blog/wp-content/uploads/2010/08/1_face_000.bmp"><img src="http://www.computer-vision-software.com/blog/wp-content/uploads/2010/08/1_face_000.bmp" alt="" title="1_face_000" class="aligncenter size-full wp-image-126" /></a></p>
<p><strong>Classifier training</strong><br />
The size of my training dataset was 337 images of different dollar bills of all classes (1 to 100) + set of &#8220;background&#8221; images.</p>
<p>I used LibSVM for classifier training and testing, using RBF and Linear classifier kernels.</p>
<p>To train models with RBF kernels I used script easy.py from LibSVM &#8211; this handy script automatically scales training data and the searches for the best C/gamma parameters of the kernel.<br />
Linear classifiers were trained using semi-automated approach &#8211; I scaled training data first, then used grid.py to find best value for C parameter of the kernel. </p>
<p>Something like that:<br />
 <code>svm-scale -s newdict.range newdict.l > newdict.scale</p>
<p>./grid.py -log2g 1,1,1 -log2c -5,15,0.5 -t 0 newdict.scale</p>
<p>svm-train -t 0 -c 0.353553390593 newdict.scale newdict.model</code></p>
<p>And for testing:<br />
<code>svm-scale -r newdict.range newdict.t > newdict.t.scale</p>
<p>svm-predict newdict.t.scale newdict.model newdict.model.predict</code></p>
<p><strong>Experiment results</strong></p>
<p>Best classification accuracy I&#8217;ve reached so far is <strong>88.62%</strong> using linear classifier. </p>
<p><strong>Conclusions and future work</strong></p>
<p>HMAX model has proved successful in classification of currency images and seem to have potential for better results.</p>
<p>Possible directions toward better classification could be:<br />
1. Brightness correction. HMAX implementation I used seems to be pretty sensitive to brightness changes. I&#8217;ll need to investigate this more deeply and if necessary &#8211; normalize trainig/testing images to get rid of brightness-related issues.</p>
<p>2. Quality of C1-dictionary. While my current dictionary proved to be good enough to recognize dollar bill classes, I suppose it could be improved. For example &#8211; data there could be more patches per bill class, taken for different layers (bands) of C1 &#8220;pyramid&#8221;. The size of the features may also vary to achieve better results.</p>
<p>3. HMAX model tuning. Perhaps model modification according to approach of Jim Mutch и David G. Lowe (<a href="http://www.cs.ubc.ca/~lowe/papers/08mutch.pdf"> PDF</a>) would give better recognition results.</p>
<p>4. Use Ada-Boost in addition to SVM for better model training.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ComputerVisionSoftware?a=s0SwubVFOak:-I-cYSf8WaM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ComputerVisionSoftware?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ComputerVisionSoftware?a=s0SwubVFOak:-I-cYSf8WaM:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ComputerVisionSoftware?i=s0SwubVFOak:-I-cYSf8WaM:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded><description>Currency recognition seems to be one of the popular topic in &amp;#8220;applied&amp;#8221; computer vision. There are a lot of articles, blog entries describing different approaches to currency recognition. In this post I&amp;#8217;ll share my experience of using so-called HMAX model. Introduction HMAX aims to model hierarchical object recognition in cortex. I won&amp;#8217;t get into details [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.computer-vision-software.com/blog/2010/08/currency-recognition-using-cortex-like-model/feed/</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><feedburner:origLink>http://www.computer-vision-software.com/blog/2010/08/currency-recognition-using-cortex-like-model/</feedburner:origLink></item><item><title>Compiling OpenCV for Android using NDK 3</title><link>http://feedproxy.google.com/~r/ComputerVisionSoftware/~3/tdyTVHkBuQU/</link><category>OpenCV</category><category>Android</category><category>ARM</category><category>face detection</category><category>NDK</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Alexander Permyakov</dc:creator><pubDate>Wed, 21 Apr 2010 23:01:50 PDT</pubDate><guid isPermaLink="false">http://www.computer-vision-software.com/blog/?p=116</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><a href="http://www.computer-vision-software.com/blog/wp-content/uploads/2010/04/Picture-18.jpg"></a></p>
<p>Build platform: Ubuntu 9.10<br />
Target platform: Android</p>
<p><strong>Download and prepare OpenCV library source code. </strong></p>
<p><strong>1. </strong>Download the latest version of OpenCV (<a href="http://sourceforge.net/project/showfiles.php?group_id=22870" target="_blank">http://sourceforge.net/project/showfiles.php?group_id=22870</a>).</p>
<p>2. As build platform is Linux, select linux version (for example<em> OpenCV2.1.0.tat.bz</em>).</p>
<p><span id="more-116"></span></p>
<p><strong>3. </strong>Unpack somewhere to home dir.</p>
<p><strong>Download and prepare cross-compiler</strong></p>
<p><strong><span style="font-weight: normal;">1. Download Android NDK 3 for Linux (<a href="http://developer.android.com/sdk/ndk/index.html" target="_blank">http://developer.android.com/sdk/ndk/index.html</a>)</span></strong></p>
<p><strong><span style="font-weight: normal;">2. Unpack it to <em>~/android_ndk_3/</em></span></strong></p>
<p><strong><span style="font-weight: normal;"><em><span style="font-style: normal;"><strong>3. </strong>Then run <em>~/android_ndk_3/build/host-setup.sh</em> but first fix the error in line 119</span></em></span></strong></p>
<p><strong><span style="font-weight: normal;"><em><span style="font-style: normal;">Change</span></em></span></strong></p>
<p><strong><span style="font-weight: normal;"><em><span style="font-style: normal;">if [ "$result" = "Pass" ] ; then</span></em></span></strong></p>
<p><strong><span style="font-weight: normal;"><em><span style="font-style: normal;">to</span></em></span></strong></p>
<p><strong><span style="font-weight: normal;"><em><span style="font-style: normal;">if [ "$result" == "Pass" ] ; then</span></em></span></strong></p>
<p><strong><span style="font-weight: normal;"><em><span style="font-style: normal;"><strong>4. </strong>Do/install whatever needed to let host-setup.sh complete successful.</span></em></span></strong></p>
<p><strong>Create NDK project/Modify Makefiles</strong></p>
<p>There is one big issue with NKD toolchein. It has trimmed stdc library which does not contain STL. Because of that some files (like <em>cvkdtree.cpp</em> in cv) can not be compiled since they use vector, list and other stuff. The solution is to compile STL from source code. In my OpenCV NDK project I used STL sources from uClibc (<a href="http://www.uclibc.org" target="_blank">http://www.uclibc.org</a>).</p>
<p>The simpliest way to start your OpenCV NDK project is to update <em>hello-jni</em> project with OpenCV source files.</p>
<p>The <em>~/android_ndk_3/apps/hello-jni/project/jni</em> folder of hello-jni project may look like this</p>
<ol>cv<br />
- hdr<br />
- src<br />
cvaux<br />
- hdr<br />
- src<br />
cxcore<br />
- hdr<br />
- src<br />
stl<br />
- hdr<br />
- src<br />
Android.mk<br />
hello-jni.c</ol>
<p>The <em>~/android_ndk_3/apps/hello-jni/project/jni/Android.mk</em> may looks like this</p>
<ol>APPS_PATH := $(call my-dir)############################<br />
# stl<br />
############################<br />
include $(CLEAR_VARS)LOCAL_PATH := $(APPS_PATH)/stl/src<br />
LOCAL_C_INCLUDES := $(APPS_PATH)/stl/hdrLOCAL_MODULE := stl<br />
LOCAL_SRC_FILES := string.cpp algorithm.cpp char_traits.cpp iterator.cpp limits.cpp list.cpp vector.cppinclude $(BUILD_STATIC_LIBRARY)############################<br />
# cxcore<br />
############################<br />
include $(CLEAR_VARS)LOCAL_PATH := $(APPS_PATH)/cxcore/src<br />
LOCAL_C_INCLUDES := $(APPS_PATH)/cxcore/hdrLOCAL_CXXFLAGS := -DHAVE_CONFIG_HLOCAL_MODULE := cxcore<br />
LOCAL_SRC_FILES := cxalloc.cpp cxarithm.cpp cxarray.cpp cxcmp.cpp cxconvert.cpp cxcopy.cpp cxdatastructs.cpp cxdrawing.cpp cxdxt.cpp cxerror.cpp cximage.cpp cxjacobieigens.cpp cxlogic.cpp cxlut.cpp cxmathfuncs.cpp cxmatmul.cpp cxmatrix.cpp cxmean.cpp cxmeansdv.cpp cxminmaxloc.cpp cxnorm.cpp cxouttext.cpp cxpersistence.cpp cxprecomp.cpp cxrand.cpp cxsumpixels.cpp cxsvd.cpp cxswitcher.cpp cxtables.cpp cxutils.cpp dummy.cppinclude $(BUILD_STATIC_LIBRARY)############################<br />
# cv<br />
############################<br />
include $(CLEAR_VARS)</p>
<p>LOCAL_PATH := $(APPS_PATH)/cv/src<br />
LOCAL_C_INCLUDES := $(APPS_PATH)/cv/hdr $(APPS_PATH)/cxcore/hdr $(APPS_PATH)/stl/hdr</p>
<p>LOCAL_MODULE := cv<br />
LOCAL_SRC_FILES := cvkdtree.cpp cvaccum.cpp cvadapthresh.cpp cvapprox.cpp cvcalccontrasthistogram.cpp cvcalcimagehomography.cpp cvcalibinit.cpp cvcalibration.cpp cvcamshift.cpp cvcanny.cpp cvcolor.cpp cvcondens.cpp cvcontours.cpp cvcontourtree.cpp cvconvhull.cpp cvcorner.cpp cvcornersubpix.cpp cvderiv.cpp cvdistransform.cpp cvdominants.cpp cvemd.cpp cvfeatureselect.cpp cvfilter.cpp cvfloodfill.cpp cvfundam.cpp cvgeometry.cpp cvhaar.cpp cvhistogram.cpp cvhough.cpp cvimgwarp.cpp cvinpaint.cpp cvkalman.cpp cvlinefit.cpp cvlkpyramid.cpp cvmatchcontours.cpp cvmoments.cpp cvmorph.cpp cvmotempl.cpp cvoptflowbm.cpp cvoptflowhs.cpp cvoptflowlk.cpp cvpgh.cpp cvposit.cpp cvprecomp.cpp cvpyramids.cpp cvpyrsegmentation.cpp cvrotcalipers.cpp cvsamplers.cpp cvsegmentation.cpp cvshapedescr.cpp cvsmooth.cpp cvsnakes.cpp cvstereobm.cpp cvstereogc.cpp cvsubdivision2d.cpp cvsumpixels.cpp cvsurf.cpp cvswitcher.cpp cvtables.cpp cvtemplmatch.cpp cvthresh.cpp cvundistort.cpp cvutils.cpp dummy.cpp</p>
<p>LOCAL_STATIC_LIBRARIES := cxcore stl</p>
<p>include $(BUILD_STATIC_LIBRARY)</p>
<p>############################<br />
# cvaux<br />
############################<br />
include $(CLEAR_VARS)</p>
<p>LOCAL_PATH := $(APPS_PATH)/cvaux/src<br />
LOCAL_C_INCLUDES := $(APPS_PATH)/cvaux/hdr $(APPS_PATH)/cv/hdr $(APPS_PATH)/cv/src $(APPS_PATH)/cxcore/hdr $(APPS_PATH)/stl/hdr</p>
<p>LOCAL_MODULE := cvaux<br />
LOCAL_SRC_FILES := camshift.cpp cvaux.cpp cvauxutils.cpp cvbgfg_acmmm2003.cpp cvbgfg_codebook.cpp cvbgfg_common.cpp cvbgfg_gaussmix.cpp cvcalibfilter.cpp cvclique.cpp cvcorrespond.cpp cvcorrimages.cpp cvcreatehandmask.cpp cvdpstereo.cpp cveigenobjects.cpp cvepilines.cpp cvface.cpp cvfacedetection.cpp cvfacetemplate.cpp cvfindface.cpp cvfindhandregion.cpp cvhmm.cpp cvhmm1d.cpp cvhmmobs.cpp cvlcm.cpp cvlee.cpp cvlevmar.cpp cvlevmarprojbandle.cpp cvlevmartrif.cpp cvlines.cpp cvlmeds.cpp cvmat.cpp cvmorphcontours.cpp cvmorphing.cpp cvprewarp.cpp cvscanlines.cpp cvsegment.cpp cvsubdiv2.cpp cvtexture.cpp cvtrifocal.cpp cvvecfacetracking.cpp cvvideo.cpp decomppoly.cpp dummy.cpp enmin.cpp extendededges.cpp precomp.cpp vs/bgfg_estimation.cpp vs/blobtrackanalysis.cpp vs/blobtrackanalysishist.cpp vs/blobtrackanalysisior.cpp vs/blobtrackanalysistrackdist.cpp vs/blobtrackgen1.cpp vs/blobtrackgenyml.cpp vs/blobtrackingauto.cpp vs/blobtrackingcc.cpp vs/blobtrackingccwithcr.cpp vs/blobtrackingkalman.cpp vs/blobtrackinglist.cpp vs/blobtrackingmsfg.cpp vs/blobtrackingmsfgs.cpp vs/blobtrackpostprockalman.cpp vs/blobtrackpostproclinear.cpp vs/blobtrackpostproclist.cpp vs/enteringblobdetection.cpp vs/enteringblobdetectionreal.cpp vs/testseq.cpp</p>
<p># failed to compile<br />
#cv3dtracker.cpp</p>
<p>LOCAL_STATIC_LIBRARIES := cv cxcore stl</p>
<p>include $(BUILD_STATIC_LIBRARY)</ol>
<p>The <em>~/android_ndk_3/apps/hello-jni/Application.mk</em> file needs to be updated as follows</p>
<ol>APP_PROJECT_PATH := $(call my-dir)/project<br />
APP_MODULES      := stl cxcore cv cvaux hello-jni</ol>
<p>To build the project go to <em>~/android_ndk_3</em> and type</p>
<ol>make APP=hello-jni</ol>
<p>Of course there will be compile issues. Understand and fix them. Easiest cases are related to syntax mismatch between different compilers. In more complicated cases some code should be commented out. For example usage of libs with optimizations for Intel processor is not needed for ARM.</p>
<p>HighGui is also can be built but only partially. Simply remove files that causing problems from Android.mk. In my case the rest of files were enough to use cvLoadImage function for bmp file.</p>
<p><strong>Running facedetect openCV example</strong></p>
<p>There is no way to run native C code as separate application on Android. Instead native C functions can be called from Java apps. Because of that I made native function FaceDetect using OpenCV example application facedetect.c.</p>
<p>The declaration looks like this</p>
<ol>void<br />
Java_com_example_hellojni_HelloJni_FaceDetect( JNIEnv* env, jobject thiz, jbyteArray jyuv_buff, int w, int h, jbyteArray jbgra_buff)<br />
{<br />
&#8230;<br />
}</ol>
<p>This function takes YUV_NV21 buffer (preview from camera captured by Java app), converts it to BGRA8888, searches the faces, draws circles around the faces and returns updated RGBA8888 buffer back to Java app. Java app can draw it on the screen.</p>
<p style="text-align: center;"><a href="http://www.computer-vision-software.com/blog/wp-content/uploads/2010/04/Picture-18.jpg"><img class="aligncenter" title="Picture 18" src="http://www.computer-vision-software.com/blog/wp-content/uploads/2010/04/Picture-18-300x225.jpg" alt="" width="300" height="225" /></a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ComputerVisionSoftware?a=tdyTVHkBuQU:onDSSI_ouiI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ComputerVisionSoftware?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ComputerVisionSoftware?a=tdyTVHkBuQU:onDSSI_ouiI:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ComputerVisionSoftware?i=tdyTVHkBuQU:onDSSI_ouiI:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded><description>Build platform: Ubuntu 9.10 Target platform: Android Download and prepare OpenCV library source code. 1. Download the latest version of OpenCV (http://sourceforge.net/project/showfiles.php?group_id=22870). 2. As build platform is Linux, select linux version (for example OpenCV2.1.0.tat.bz). 3. Unpack somewhere to home dir. Download and prepare cross-compiler 1. Download Android NDK 3 for Linux (http://developer.android.com/sdk/ndk/index.html) 2. Unpack it [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.computer-vision-software.com/blog/2010/04/android/feed/</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">4</slash:comments><feedburner:origLink>http://www.computer-vision-software.com/blog/2010/04/android/</feedburner:origLink></item><item><title>People counting with top-mounted camera</title><link>http://feedproxy.google.com/~r/ComputerVisionSoftware/~3/KxLK6CWZ8OU/</link><category>Demo</category><category>Demo video</category><category>Demo videos</category><category>YouTube</category><category>Object Tracking</category><category>OpenCV</category><category>People counting</category><category>video</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">rhondasw</dc:creator><pubDate>Wed, 03 Mar 2010 02:33:38 PST</pubDate><guid isPermaLink="false">http://www.computer-vision-software.com/blog/?p=114</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/e19olH5goNY&amp;rel=0&amp;color1=0xd6d6d6&amp;color2=0xf0f0f0"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/e19olH5goNY&amp;rel=0&amp;color1=0xd6d6d6&amp;color2=0xf0f0f0" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></object></p>
<p><a title="people_counter.avi" href="http://www.computer-vision-software.com/files/videos/people_counter.avi">people_counter.avi</a></p>
<p>Marketing researches are area where required to analyze a lot of data. E.g. we want to understand how many people are visiting a bank. In order to count this value, we need to count each man or woman which are entering to or exiting from the bank. For resolving this task there are a lot of approaches: e.g. use special gate with laser or mechanical counter. Though there are people counting tasks where such approaches cannot work or too unuseful. E.g. barrier cannot be used where people flow is very high, and laser counters have limitations as well.</p>
<p>Opposite the approaches above, we found papers where top-mounted camera is used for resolving the people counting task.</p>
<p><span id="more-114"></span></p>
<p> The fact is that most of organization have own IP or CCTV camera based security infrastructure. And also often there is a camera which is already top-mounted. Thus top-mounted camera counting approach is looked very perspective from reusing infrastructure point of view.</p>
<p>We researched a lot of approaches. There are a lot of ready methods for people counting with top-mounted camera. But such methods either are patented or don’t meet our expectation in quality or speed. Thus we developed own method (see demo video).</p>
<p>Method counts human each time they cross a predefined counting line (that is why it is often called as “line-crossing”). The assumption is that the line should be selected orthogonally to the main people flow.</p>
<p>Now we skip implementation details of the method. If shortly, our method is a real time 15 fps+, we tested it usual USB or IP cameras. We tested our method in indoor and outdoor use-case and the quality is 80-90% (dependent on environment condition).</p>
<p>Our method can be used in other applications, e.g. vehicle counting, you could look at the video how it works. Have a nice watching&#8230;</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ComputerVisionSoftware?a=KxLK6CWZ8OU:a2kvBkatRaE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ComputerVisionSoftware?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ComputerVisionSoftware?a=KxLK6CWZ8OU:a2kvBkatRaE:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ComputerVisionSoftware?i=KxLK6CWZ8OU:a2kvBkatRaE:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded><description>people_counter.avi Marketing researches are area where required to analyze a lot of data. E.g. we want to understand how many people are visiting a bank. In order to count this value, we need to count each man or woman which are entering to or exiting from the bank. For resolving this task there are a lot [...]</description><enclosure url="http://www.computer-vision-software.com/files/videos/people_counter.avi" length="23698432" type="video/x-msvideo" /><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.computer-vision-software.com/blog/2010/03/people-counting-with-top-mounted-camera/feed/</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">5</slash:comments><feedburner:origLink>http://www.computer-vision-software.com/blog/2010/03/people-counting-with-top-mounted-camera/</feedburner:origLink></item><item><title>Object recognition (“instruments recognition”)</title><link>http://feedproxy.google.com/~r/ComputerVisionSoftware/~3/W3cInn-KeNI/</link><category>Demo</category><category>Demo video</category><category>Demo videos</category><category>YouTube</category><category>instrument recognition</category><category>instruments</category><category>Object Recognition</category><category>Object Tracking</category><category>OpenCV</category><category>video</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Aleksey Kodubets</dc:creator><pubDate>Mon, 01 Feb 2010 03:27:01 PST</pubDate><guid isPermaLink="false">http://www.computer-vision-software.com/blog/?p=112</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/xPd6REexvyc&amp;rel=0&amp;color1=0xd6d6d6&amp;color2=0xf0f0f0"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/xPd6REexvyc&amp;rel=0&amp;color1=0xd6d6d6&amp;color2=0xf0f0f0" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></object></p>
<p><a href="http://www.computer-vision-software.com/files/videos/tools.avi">tools.avi</a></p>
<p>This object recognition algorithm is based on own pattern-matching algorithm. The algorithm is able to recognize pre-trained objects which are defined with special set of templates. <span id="more-112"></span>Theoretically, the algorithm works with any &#8220;3D&#8221; objects which have good projection on 2D coordinates. However, natural 3D objects are covered by few templates for set of 2D projections. For limited number of object templates, the algorithm works in real-time on PC (Intel P4 3.0 GHz) .</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ComputerVisionSoftware?a=W3cInn-KeNI:7Up7KAA-CXU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ComputerVisionSoftware?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ComputerVisionSoftware?a=W3cInn-KeNI:7Up7KAA-CXU:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ComputerVisionSoftware?i=W3cInn-KeNI:7Up7KAA-CXU:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded><description>tools.avi This object recognition algorithm is based on own pattern-matching algorithm. The algorithm is able to recognize pre-trained objects which are defined with special set of templates. Theoretically, the algorithm works with any &amp;#8220;3D&amp;#8221; objects which have good projection on 2D coordinates. However, natural 3D objects are covered by few templates for set of 2D [...]</description><enclosure url="http://www.computer-vision-software.com/files/videos/tools.avi" length="20149844" type="video/x-msvideo" /><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.computer-vision-software.com/blog/2010/02/object-recognition-instruments/feed/</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">11</slash:comments><feedburner:origLink>http://www.computer-vision-software.com/blog/2010/02/object-recognition-instruments/</feedburner:origLink></item><item><title>USD banknotes recognition</title><link>http://feedproxy.google.com/~r/ComputerVisionSoftware/~3/wr8XmXrJg88/</link><category>Demo</category><category>Demo video</category><category>Demo videos</category><category>OpenCV</category><category>YouTube</category><category>Currency recognition</category><category>Object Recognition</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Yuri Vashchenko</dc:creator><pubDate>Tue, 15 Dec 2009 03:11:22 PST</pubDate><guid isPermaLink="false">http://www.computer-vision-software.com/blog/?p=110</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/fyr-HuROFpk&amp;rel=0&amp;color1=0xd6d6d6&amp;color2=0xf0f0f0"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/fyr-HuROFpk&amp;rel=0&amp;color1=0xd6d6d6&amp;color2=0xf0f0f0" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></object></p>
<p>The currency recognition demo application works under Windows XP, Intel P4 3GHz. Quality of recognition: 85%. The solution is cross-platform. The application was tested on Linux, ARM11 and on Linux/Windows, Intel Atom.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ComputerVisionSoftware?a=wr8XmXrJg88:X4jS-8dCwo8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ComputerVisionSoftware?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ComputerVisionSoftware?a=wr8XmXrJg88:X4jS-8dCwo8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ComputerVisionSoftware?i=wr8XmXrJg88:X4jS-8dCwo8:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded><description>The currency recognition demo application works under Windows XP, Intel P4 3GHz. Quality of recognition: 85%. The solution is cross-platform. The application was tested on Linux, ARM11 and on Linux/Windows, Intel Atom.</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.computer-vision-software.com/blog/2009/12/usd-banknotes-recognition/feed/</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">8</slash:comments><feedburner:origLink>http://www.computer-vision-software.com/blog/2009/12/usd-banknotes-recognition/</feedburner:origLink></item><item><title>Barcode recognition (mobile platform)</title><link>http://feedproxy.google.com/~r/ComputerVisionSoftware/~3/NSlr8Ljt3vU/</link><category>Demo</category><category>Demo video</category><category>Demo videos</category><category>YouTube</category><category>barcode recognition</category><category>Object Recognition</category><category>Pocket PC</category><category>PXA270</category><category>Smart phone</category><category>video</category><category>WinCE</category><category>Windows CE</category><category>Windows Mobile</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Aleksey Kodubets</dc:creator><pubDate>Tue, 24 Nov 2009 17:55:23 PST</pubDate><guid isPermaLink="false">http://www.computer-vision-software.com/blog/?p=108</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/nBex4IRgpqw&amp;rel=0&amp;color1=0xd6d6d6&amp;color2=0xf0f0f0"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/nBex4IRgpqw&amp;rel=0&amp;color1=0xd6d6d6&amp;color2=0xf0f0f0" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></object></p>
<p>Interesting details can be found at: <a href="http://www.computer-vision-software.com/blog/2009/10/barcode">http://www.computer-vision-software.com/blog/2009/10/barcode</a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/ComputerVisionSoftware?a=NSlr8Ljt3vU:soUYBH0mvh0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/ComputerVisionSoftware?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/ComputerVisionSoftware?a=NSlr8Ljt3vU:soUYBH0mvh0:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/ComputerVisionSoftware?i=NSlr8Ljt3vU:soUYBH0mvh0:D7DqB2pKExk" border="0"></img></a>
</div>]]></content:encoded><description>Interesting details can be found at: http://www.computer-vision-software.com/blog/2009/10/barcode</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.computer-vision-software.com/blog/2009/11/barcode-recognition-mobile-platform/feed/</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">3</slash:comments><feedburner:origLink>http://www.computer-vision-software.com/blog/2009/11/barcode-recognition-mobile-platform/</feedburner:origLink></item></channel></rss>

