{"id":868,"date":"2015-01-29T10:58:23","date_gmt":"2015-01-29T09:58:23","guid":{"rendered":"http:\/\/eyesofthings.eu\/?p=868"},"modified":"2015-01-29T10:58:23","modified_gmt":"2015-01-29T09:58:23","slug":"low-cost-computer-vision-board-announced-on-kickstarter","status":"publish","type":"post","link":"https:\/\/eyesofthings.eu\/?p=868","title":{"rendered":"Low-cost Computer Vision Board announced on Kickstarter"},"content":{"rendered":"<p>https:\/\/www.kickstarter.com\/projects\/1898348310\/openmv-cam-embedded-machine-vision<\/p>\n<p>http:\/\/openmvcam.com\/<\/p>\n<p>The project is detailed here on Hackaday in detail\u00a0https:\/\/hackaday.io\/project\/1313-openmv<\/p>\n<p>The project is the work of\u00a0Ibrahim Abdelkader<\/p>\n<p>https:\/\/plus.google.com\/109305911147330890102\/videos<\/p>\n<p>And is based on the\u00a0STM32F427XXX family which contains a Cortex M4 and various accelerators<\/p>\n<p>http:\/\/www.st.com\/web\/en\/resource\/technical\/document\/datasheet\/DM00071990.pdf<\/p>\n<p>Detailed description<\/p>\n<h2><strong>Features:<\/strong><\/h2>\n<ul>\n<li><strong>Scriptable<\/strong> in Python3.<\/li>\n<li><strong>$15 <\/strong><strong>BOM<\/strong>\/1000&#8217;s including 4-layer PCB (<strong>OpenMV1<\/strong>).<\/li>\n<li><strong>On board<\/strong> <strong>uSD<\/strong>\u00a0or internal flash storage for storing scripts\/images\/video.<\/li>\n<li><strong>2MP\u00a0<\/strong>RGB\/YUV\/JPEG sensor (OV2640).<\/li>\n<li><strong>Recording\/Streaming<\/strong> <strong>MJPEG: <\/strong>to\u00a0SD or\u00a0via external WiFi shield.<\/li>\n<li><strong>Extension Header: <\/strong>breaks<strong>\u00a0<\/strong>UART\/PWM\/SPI\/I2C<\/li>\n<li><strong>Friendly<\/strong>\u00a0<strong>IDE:<\/strong>\u00a0upload\/execute scripts, upload templates, view the framebuffer.<\/li>\n<li><strong>16MB SDRAM: <\/strong>\u00a0on-board enables <strong>uClinux<\/strong> to run on <strong>OpenMV2<\/strong><\/li>\n<li><strong>Image processing<\/strong>:\n<ul>\n<li><strong>Viola-jones<\/strong> object detection (comptatible with OpenCV&#8217;s cascades)<\/li>\n<li><strong>Template matching<\/strong> with <strong>NCC<\/strong>\u00a0(normalized cross correlation)<\/li>\n<li><strong>FAST\/FREAK:\u00a0<\/strong>keypoint detector\/descriptor and matching.<\/li>\n<li><strong>Face Recognition: <\/strong>With LBP (Local Binary Patterns) work in progress.<\/li>\n<li><strong>Misc<\/strong>: RGB-&gt;LAB CLUT, kmeans clustering, histogram, median filter, scaling, sub-image and blitting, alpha blending.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2><strong>The Hardware:<\/strong><\/h2>\n<ul>\n<li><strong>MCU:\u00a0<\/strong>The MCU I choose is the <strong>STM32F4xx<\/strong>, an ARM Cortex-M4 micro running at 168-180MHz. It has a\u00a0single\u00a0precision\u00a0<strong>FPU<\/strong>, <strong>DSP<\/strong>\u00a0capabilities\u00a0and a <strong>DCMI<\/strong>(Digital Camera Interface). Having a hardware camera interface along with the FPU\/DSP made this particular MCU a perfect match for the project.<\/li>\n<li><strong>PCB:\u00a0<\/strong>A 4-layer PCB is used, which costs more but much better signal integrity\/EMI wise, especially when both sides have components and not much reference planes left over, plus, using 4-layers made it possible to fit everything on a 1.0&#215;1.3 inches board. Prototypes are all done by OSHPark.<\/li>\n<li><strong>Image Sensor: OpenMV1<\/strong>\u00a0supports many single package lens\/sensors, such as the <strong>OV965x<\/strong>(1.3MP),\u00a0<strong>OV2640<\/strong>(2MP\/JPEG). Using a single package sensor allows experimenting with different sensors easily.\u00a0<strong>OpenMV2<\/strong>\u00a0supports only the OV2640 with an external lens.<\/li>\n<li><strong>Debugging\/Firmware update:\u00a0<\/strong>The serial wire debugging (<strong>SWD<\/strong>) is broken out on a 2.00mm header, and the <strong>DFU<\/strong> is easily accessible to upload new firmware images via USB.<\/li>\n<li><strong>I\/O Expansion:\u00a0<\/strong>The main 2.54mm header breaks<strong> SPI, I2C, USART and PWM<\/strong>, for example, an SPI LCD viewing the framebuffer (the LCD driver is written completely in Python):<br \/>\n<img decoding=\"async\" src=\"https:\/\/static.hackaday.io\/images\/6336331401894310596.JPG\" alt=\"\" \/><\/li>\n<li><strong>Wireless expansion: <\/strong>\u00a0I designed WiFi shields based on the CC3K module from TI, for <strong>OpenMV1\/2<\/strong>. The camera can stream <strong>MJPEG<\/strong> to compatible\u00a0browsers, and here&#8217;s a custom\u00a0Android demo viewing the camera stream from my phone, the CC3K module is fast enough (<strong>54Mbps<\/strong>) to stream live video from the camera:<img decoding=\"async\" src=\"http:\/\/static.hackaday.io\/images\/6679931401891432426.JPG\" alt=\"\" \/><\/li>\n<\/ul>\n<h2><strong>The Software:<\/strong><\/h2>\n<p>OpenMV uses a lot of cool SW, for example,\u00a0ChaN&#8217;s\u00a0FatFS, CC3K SDK, ARM&#8217;s DSP\/Math libraries etc.. And of course it&#8217;s completely programmable in Python 3! Yes, you can write Python scripts that have access to peripherals (SPI\/I2C\/UART), uSD, wireless, and of course the image processing code.<\/p>\n<p><strong>The IDE:<\/strong><\/p>\n<p>OpenMV\u00a0has a friendly IDE that I made with Python\/Glade\/PyGTK.\u00a0The IDE has syntax highlighting, it can upload or run scripts on the camera, view the framebuffer, update the firmware\u00a0and can even help with some image processing tasks, such as\u00a0saving\u00a0templates or keypoint descriptors to\u00a0the camera:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/static.hackaday.io\/images\/3376811403203380901.gif\" alt=\"\" \/><\/p>\n<p>I plan on extending the IDE with more features, to communicate with the camera using sockets when WiFi shields are connected, this way the IDE will have remote access to the camera to stream images or upload scripts over the air.<\/p>\n<h2><strong>OpenMV2:<\/strong><\/h2>\n<p>The second OpenMV uses the newer STM32F429 runing at 180MHz, with more built-in SRAM, external 16MB SDRAM, external lens for the sensor, 2xIR LEDs, 2xServo headers and 20 I\/Os.. see full specs below:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/static.hackaday.io\/images\/6016271405562781094.JPG\" alt=\"\" \/><\/p>\n<p><strong>OpenMV1 Specs:<\/strong><\/p>\n<ul>\n<li>Processor: STM32F407 (168MHz)<\/li>\n<li>Features: FPU\/DSP\/DCMI<\/li>\n<li>RAM:196KB SRAM<\/li>\n<li>Flash: 512KBs<\/li>\n<li>Sensor: OV965x(1.3MP)\/OV2640(2MP\/JPEG)<\/li>\n<li>I\/O: USART\/SPI\/I2C\/PWM<\/li>\n<li>USB 2.0 FS<\/li>\n<li>uSD interface: SPI<\/li>\n<li>Power consumption: 120 mA<\/li>\n<li>Dimensions: 1.0&#8243; x 1.3&#8243;<\/li>\n<\/ul>\n<p><strong>OpenMV2 Specs:<\/strong><\/p>\n<ul>\n<li>Processor: STM32F429 (180MHz)<\/li>\n<li>Features: FPU\/DSP\/DCMI\/2D Acceleration<\/li>\n<li>RAM:256KB SRAM\/16MB SDRAM(up to 64MB)<\/li>\n<li>Flash: 2MB<\/li>\n<li>Sensor: OV2640(2MP\/JPEG)<\/li>\n<li>2x IR LEDS<\/li>\n<li>2x Servo headers<\/li>\n<li>20 I\/Os: USART\/SPI\/I2C\/PWM<\/li>\n<li>USB 2.0 FS<\/li>\n<li>uSD interface: SDIO (4-bit mode)<\/li>\n<li>Power consumption: TBD<\/li>\n<li>Dimensions: 1.6&#8243; x 2.0&#8243;<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>https:\/\/www.kickstarter.com\/projects\/1898348310\/openmv-cam-embedded-machine-vision http:\/\/openmvcam.com\/ The project is detailed here on Hackaday in detail\u00a0https:\/\/hackaday.io\/project\/1313-openmv The project is the work of\u00a0Ibrahim Abdelkader https:\/\/plus.google.com\/109305911147330890102\/videos And is based on the\u00a0STM32F427XXX family which contains a Cortex M4 and various accelerators http:\/\/www.st.com\/web\/en\/resource\/technical\/document\/datasheet\/DM00071990.pdf Detailed description Features: Scriptable in Python3.&hellip; <\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19],"tags":[],"class_list":["post-868","post","type-post","status-publish","format-standard","hentry","category-information"],"_links":{"self":[{"href":"https:\/\/eyesofthings.eu\/index.php?rest_route=\/wp\/v2\/posts\/868","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/eyesofthings.eu\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/eyesofthings.eu\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/eyesofthings.eu\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/eyesofthings.eu\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=868"}],"version-history":[{"count":2,"href":"https:\/\/eyesofthings.eu\/index.php?rest_route=\/wp\/v2\/posts\/868\/revisions"}],"predecessor-version":[{"id":872,"href":"https:\/\/eyesofthings.eu\/index.php?rest_route=\/wp\/v2\/posts\/868\/revisions\/872"}],"wp:attachment":[{"href":"https:\/\/eyesofthings.eu\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=868"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/eyesofthings.eu\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=868"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/eyesofthings.eu\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=868"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}