{"id":2503,"date":"2012-11-25T21:14:14","date_gmt":"2012-11-26T04:14:14","guid":{"rendered":"http:\/\/mcclanahoochie.com\/blog\/?post_type=portfolio&#038;p=2503"},"modified":"2023-06-10T10:32:42","modified_gmt":"2023-06-10T17:32:42","slug":"sc12-arrayfire-webcam-demo","status":"publish","type":"post","link":"https:\/\/mcclanahoochie.com\/blog\/2012\/11\/sc12-arrayfire-webcam-demo\/","title":{"rendered":"SC12 ArrayFire Demos"},"content":{"rendered":"<p>I got the\u00a0privilege\u00a0of developing some of the\u00a0<a href=\"http:\/\/sc12.supercomputing.org\/\" target=\"_blank\" rel=\"noopener\">Super Computing 2012<\/a>\u00a0(SC12)\u00a0booth demos\u00a0for\u00a0<a href=\"http:\/\/www.accelereyes.com\/\" target=\"_blank\" rel=\"noopener\">AccelerEyes<\/a>,\u00a0to showcase\u00a0<a href=\"http:\/\/www.accelereyes.com\/products\/arrayfire\" target=\"_blank\" rel=\"noopener\">ArrayFire<\/a>.<\/p>\n<p style=\"text-align: center;\"><img data-recalc-dims=\"1\" decoding=\"async\" class=\" aligncenter\" title=\"arrayfire sc12 webcam demo\" src=\"https:\/\/i0.wp.com\/lh5.googleusercontent.com\/-5haNiIGwpIk\/UKw-ct6OHDI\/AAAAAAAAMd8\/lxnzbUk44Kc\/s912\/20121114_111339.jpg?resize=438%2C328&#038;ssl=1\" alt=\"Sobel filter, ArrayFire logo, Motion (frame differencing), Source image, Histogram plot, Mean-shift filter\" width=\"438\" height=\"328\" \/><\/p>\n<p>Above is an\u00a0ArrayFire\u00a0demo running at SC12 on an nVidia GPU. This demo (<em>source code <a href=\"http:\/\/code.google.com\/p\/mcclanahoochie\/source\/browse\/cuda\/cam-arrayfire-sc12\/webcam_demo.cpp\" target=\"_blank\" rel=\"noopener\">HERE<\/a><\/em>) uses OpenCV to capture webcam video and processes the stream in several different ways, in real-time.\u00a0From top-left to bottom-right: <em>Sobel filter, ArrayFire logo, Motion (frame differencing), Source image, Histogram plot, Mean-shift filter<\/em>. Overlayed ontop of the logo is the whopping <em>~14 lines<\/em> of source code to process <em>and<\/em> display everything.<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2012\/11\/arrayfire-sc12-webcam-demo.jpg\"><img data-recalc-dims=\"1\" decoding=\"async\" data-attachment-id=\"2504\" data-permalink=\"https:\/\/mcclanahoochie.com\/blog\/2012\/11\/sc12-arrayfire-webcam-demo\/arrayfire-sc12-webcam-demo\/#main\" data-orig-file=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2012\/11\/arrayfire-sc12-webcam-demo.jpg?fit=1700%2C880&amp;ssl=1\" data-orig-size=\"1700,880\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"arrayfire-sc12-webcam-demo\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2012\/11\/arrayfire-sc12-webcam-demo.jpg?fit=1024%2C530&amp;ssl=1\" class=\"aligncenter size-medium wp-image-2504\" title=\"arrayfire-sc12-webcam-demo\" src=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2012\/11\/arrayfire-sc12-webcam-demo-300x155.jpg?resize=300%2C155\" alt=\"Sobel filter, ArrayFire logo, Motion (frame differencing), Source image, Histogram plot, Mean-shift filter\" width=\"300\" height=\"155\" srcset=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2012\/11\/arrayfire-sc12-webcam-demo.jpg?resize=300%2C155&amp;ssl=1 300w, https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2012\/11\/arrayfire-sc12-webcam-demo.jpg?resize=1024%2C530&amp;ssl=1 1024w, https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2012\/11\/arrayfire-sc12-webcam-demo.jpg?resize=500%2C258&amp;ssl=1 500w, https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2012\/11\/arrayfire-sc12-webcam-demo.jpg?w=1700&amp;ssl=1 1700w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>The above pic shows a cleaner view of the demo running off my Macbook Pro. The other webcam demo on the SC12 show floor was a simply <em>meanshift+edges<\/em>, running on an ATI Radeon, using the beta OpenCL version of ArrayFire (as seen below):<\/p>\n<p style=\"text-align: center;\"><img data-recalc-dims=\"1\" decoding=\"async\" class=\"aligncenter\" title=\"sc12 arrayfire opencl webcam demo\" src=\"https:\/\/i0.wp.com\/lh3.googleusercontent.com\/-cMu-BihjqD0\/UKw-bHs-WYI\/AAAAAAAAMd0\/AIESKxGv5Rc\/s912\/20121114_105806_HDR.jpg?resize=350%2C262&#038;ssl=1\" alt=\"logo, source, edges, meanshift\" width=\"350\" height=\"262\" \/><\/p>\n<p><em><strong>Try<\/strong> out <a href=\"http:\/\/code.google.com\/p\/mcclanahoochie\/source\/browse\/cuda\/cam-arrayfire-sc12\/\" target=\"_blank\" rel=\"noopener\">the demo<\/a> for yourself!<\/em><br \/>\n(Note: the webcam demo&#8217;s\u00a0frame rate\u00a0is currently limited by the capture rate of the camera used.)<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I got the\u00a0privilege\u00a0of developing some of the\u00a0Super Computing 2012\u00a0(SC12)\u00a0booth demos\u00a0for\u00a0AccelerEyes,\u00a0to showcase\u00a0ArrayFire. Above is an\u00a0ArrayFire\u00a0demo running at SC12 on an nVidia GPU. This demo (source code HERE) uses OpenCV to capture webcam video and processes the stream in several different ways, in real-time.\u00a0From top-left to bottom-right: Sobel filter, ArrayFire logo, Motion (frame differencing), Source image, Histogram &#8230; <a title=\"SC12 ArrayFire Demos\" class=\"read-more\" href=\"https:\/\/mcclanahoochie.com\/blog\/2012\/11\/sc12-arrayfire-webcam-demo\/\" aria-label=\"Read more about SC12 ArrayFire Demos\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[1],"tags":[91,113,110,112,54,101,29,111],"class_list":["post-2503","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-arrayfire","tag-computer-vision","tag-cuda","tag-demos","tag-image-processing","tag-programming","tag-projects","tag-supercomputing"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pZdXI-En","jetpack-related-posts":[{"id":2347,"url":"https:\/\/mcclanahoochie.com\/blog\/2012\/08\/local-contrast-enhancement-with-arrayfire-opencv\/","url_meta":{"origin":2503,"position":0},"title":"Local Contrast Enhancement with ArrayFire + OpenCV","author":"mcclanahoochie","date":"August 20, 2012","format":false,"excerpt":"About one year ago, I wrote about a simple example of Image Processing with LibJacket + OpenCV... and the trend continues today. In this post, I demonstrate how ArrayFire (an improved version of LibJacket) can easily interop with OpenCV, through a simple example of unsharp maksing (local contrast enhancement). \u00a0\u2026","rel":"","context":"In \"arrayfire\"","block_context":{"text":"arrayfire","link":"https:\/\/mcclanahoochie.com\/blog\/tag\/arrayfire\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2012\/08\/Screen-Shot-2012-08-20-at-9.19.21-AM_2-1024x640.png?resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2012\/08\/Screen-Shot-2012-08-20-at-9.19.21-AM_2-1024x640.png?resize=350%2C200 1x, https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2012\/08\/Screen-Shot-2012-08-20-at-9.19.21-AM_2-1024x640.png?resize=525%2C300 1.5x"},"classes":[]},{"id":2902,"url":"https:\/\/mcclanahoochie.com\/blog\/2014\/11\/arrayfire-open-source\/","url_meta":{"origin":2503,"position":1},"title":"ArrayFire is now Open Source","author":"mcclanahoochie","date":"November 12, 2014","format":false,"excerpt":"The ArrayFire GPGPU Computing Library has just been released as open source software! As a former employee of ArrayFire (AccelerEyes), I am especially excited about this decision! :) It's so cool to see the this library continue to grow; this is only the beginning of the potential for ArrayFire! I\u2026","rel":"","context":"In \"arrayfire\"","block_context":{"text":"arrayfire","link":"https:\/\/mcclanahoochie.com\/blog\/tag\/arrayfire\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.arrayfire.com\/docs\/arrayfire_logo.png?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":2230,"url":"https:\/\/mcclanahoochie.com\/blog\/2012\/05\/arrayfire-gtc-2012-presentations\/","url_meta":{"origin":2503,"position":2},"title":"ArrayFire GTC 2012 Presentations","author":"mcclanahoochie","date":"May 25, 2012","format":false,"excerpt":"I got another incredible opportunity to give two introductory talks at Nvidia's 2012 GPU Technology Conference about AccelerEyes's two software products:\u00a0Jacket(MATLAB) and ArrayFire(C++) ! Jacket for Multidimensional Scaling in Genomics - \u00a0Video\u00a0 | \u00a0Slides ArrayFire Graphics: A Tutorial - \u00a0Video\u00a0 | \u00a0Slides \u00a0 Enjoy!","rel":"","context":"In \"arrayfire\"","block_context":{"text":"arrayfire","link":"https:\/\/mcclanahoochie.com\/blog\/tag\/arrayfire\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2012\/05\/DSC_0935-2-small-300x198.png?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":887,"url":"https:\/\/mcclanahoochie.com\/blog\/2011\/01\/gtc-2010-presentation\/","url_meta":{"origin":2503,"position":3},"title":"GTC 2010 Presentation","author":"mcclanahoochie","date":"January 1, 2011","format":false,"excerpt":"September 2010 I got an incredible opportunity (at the last minute!) to give a short talk\u00a0at Nvidia's GTC 2010 on what I learned about GPU matrix multiplication, while at\u00a0AccelerEyes over the summer! Watch\u00a0presentation here (I'm 19 minutes in)! \u00a0 \u00a0","rel":"","context":"In \"arrayfire\"","block_context":{"text":"arrayfire","link":"https:\/\/mcclanahoochie.com\/blog\/tag\/arrayfire\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/01\/gtc-2010-front-door.jpg?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":1896,"url":"https:\/\/mcclanahoochie.com\/blog\/2011\/11\/gpu-tv-l1-optical-flow-with-libjacket\/","url_meta":{"origin":2503,"position":4},"title":"GPU TV-L1 Optical Flow with ArrayFire","author":"mcclanahoochie","date":"November 6, 2011","format":false,"excerpt":"Update 1: LibJacket has been renamed to\u00a0\u00a0ArrayFire. Update 2: Huang Chao-Hui was nice enough to port the LibJacket code mentioned here to ArrayFire - see his work here. As one of my\u00a0Computer Vision\u00a0class\u00a0projects, I decided to implement optical flow, because I wanted to learn more about optical flow, and also\u2026","rel":"","context":"In \"arrayfire\"","block_context":{"text":"arrayfire","link":"https:\/\/mcclanahoochie.com\/blog\/tag\/arrayfire\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/11\/jkt-oflow-tvl1-1024x626.png?resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/11\/jkt-oflow-tvl1-1024x626.png?resize=350%2C200 1x, https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/11\/jkt-oflow-tvl1-1024x626.png?resize=525%2C300 1.5x"},"classes":[]},{"id":1731,"url":"https:\/\/mcclanahoochie.com\/blog\/2011\/08\/image-processing-with-libjacket-opencv\/","url_meta":{"origin":2503,"position":5},"title":"Image processing with LibJacket + OpenCV","author":"mcclanahoochie","date":"August 24, 2011","format":false,"excerpt":"Update: one year later:\u00a0ArrayFire+OpenCV The OpenCV library is the de-facto standard for doing computer vision and image processing research projects. OpenCV includes several hundreds of computer vision algorithms, aimed for use in real-time vision applications. LibJacket is a matrix library built on CUDA. LibJacket offers hundreds of general matrix and\u2026","rel":"","context":"In \"arrayfire\"","block_context":{"text":"arrayfire","link":"https:\/\/mcclanahoochie.com\/blog\/tag\/arrayfire\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/08\/Screen-shot-2011-08-24-at-2.42.52-PM-1024x640.png?resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/08\/Screen-shot-2011-08-24-at-2.42.52-PM-1024x640.png?resize=350%2C200 1x, https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/08\/Screen-shot-2011-08-24-at-2.42.52-PM-1024x640.png?resize=525%2C300 1.5x"},"classes":[]}],"jetpack_likes_enabled":false,"_links":{"self":[{"href":"https:\/\/mcclanahoochie.com\/blog\/wp-json\/wp\/v2\/posts\/2503","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mcclanahoochie.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mcclanahoochie.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mcclanahoochie.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mcclanahoochie.com\/blog\/wp-json\/wp\/v2\/comments?post=2503"}],"version-history":[{"count":0,"href":"https:\/\/mcclanahoochie.com\/blog\/wp-json\/wp\/v2\/posts\/2503\/revisions"}],"wp:attachment":[{"href":"https:\/\/mcclanahoochie.com\/blog\/wp-json\/wp\/v2\/media?parent=2503"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mcclanahoochie.com\/blog\/wp-json\/wp\/v2\/categories?post=2503"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mcclanahoochie.com\/blog\/wp-json\/wp\/v2\/tags?post=2503"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}