Pages

Sunday, March 3, 2013

How to easily install OpenCV on Raspberry Pi

Hi all

      Building opencv source code in Raspberry Pi will take about 6-7 hours.
Here is the link to install opencv from source

Easy method to install opencv

1)Connect to Raspberry Pi using ssh. Fig shows an example of connecting Rpi using ssh




2)Install synaptic package manager from command line of raspberry pi


3)Install tight-vnc server from command line


4)Start a vnc server in Rpi for viewing the screen and detection window from opencv

Enter the command to start a vnc-server on Rpi

vncserver :1 -geometry 1366x600 -depth 16 -pixelformat rgb565

#New ‘X’ desktop is raspberrypi:1


5)Start vnc client from PC

eg: vncviewer 192.168.1.3:5901
eg:vncviewer rpi_ip:5901


6)Start synaptic from root terminal like this 


7)Install opencv from synaptic like this



8)Download the source code from below


9)Copy files from PC to Rpi using scp command

scp -r facedetect.py face.xml pi@192.168.1.3:"/home/pi"


10)Run python file using following command

python facedetect.py --cascade=face.xml 0


Output
--------


Video:


77 comments:

  1. Why don't you just apt-get it? Surely that would be way faster then installing VNC for no reason...

    sudo apt-get install *opencv*

    Done.

    ReplyDelete
  2. Yes ,ofcourse. It can be done in both ways. I did it in this way to showcase the desktop and make a feel that it is running in Rpi. :)

    It will perform better if you run from ssh terminal

    ReplyDelete
  3. I think this post cover most of commands for interacting with Rpi, So this will a good tutorial for beginers.

    ReplyDelete
  4. which type of camera are u used?

    ReplyDelete
  5. are you done same process in java and cross compilation of raspberry pi.and please give the source code for raspberry pi face detection .

    ReplyDelete
  6. Hi Arun

    I am using I ball face2facecam. I am not using java and all. I included the source code in the post itself.

    http://www.mediafire.com/?ahd677sxyfpf1m7

    ReplyDelete
  7. When I used opencv on the Pi I just ran sudo apt-get install opencv-python and did a whole host of things. Check out my blog post http://orictosh.blogspot.co.uk/?m=1

    ReplyDelete
  8. Correction on that package name should be python-opencv

    ReplyDelete
  9. Hi,

    i saw the opencv with eye and mouth and nose detection.iam download u r given source code and supported file.how to compile that face detection in the raspberry pi.please give me some steps how send this material on raspberry pi and how to compile that?iam send source code through scp command.is this ryt procedure?please clarify me.


    Thanks&Regards,
    K.Arungopal

    ReplyDelete
  10. Hi Arun,

    There is no change in the compilation procedure of opencv, its same as the pc, because we are working on OS layer, so command will be same.
    What matters is processing power. When i tried the facedetection code, i scaled the image into 320x240. So what you have to do is scale image before processing. If you run face,nose and eye detection, it will take good amount of processing power, just rescale image into 320x240 and try, i have a doubt whether it work or not in RasPi.

    ReplyDelete
  11. ok thanks joseph.i want to compile opencv in raspberry pi.do u know about this?are u haveing any source code?presently iam working on this board for opencv face and eye and mouth detection.iam compiled u r code in raspi that is face detection only with rectangular.it is working cool.thanks.....when iam run the ./video it show s the error.please help me how to comipile that programe.



    Thanks&Regards,
    K.Arungopal

    ReplyDelete
  12. i have one dought.in python face detection is done in ractangular face using same code it is possible to get the mouth and eyes and nose detection.it is possible?if possible what changes iam done?i mean adding of extra xml file sin programe.how to add xml files in programe.



    Thanks&Regards,

    K.Arungopal

    ReplyDelete
  13. Hi, I think that is usefull show the list of packages that you installed on raspbian throught synaptic, while tha packages are installable throught apt, if the list is complete, someone could install opencv with terminal instead that on X or compile the library (lot of time).

    ReplyDelete
  14. Hi joseph thanks for the reply...what is my question is on the raspberry i want do the face detection?so please help me for giving any idea about that source code and xml files.....

    Thanks&Regards,
    K.Arungopal

    ReplyDelete
  15. hello joseph,i ran your face detection code on raspberrypi,but i am getting detection time in between 600 and 900 ms,your is 200 ms.i am using intex webcam.
    Thanks&Regards,
    Abhilash

    ReplyDelete
  16. Hi

    Did you try it without vnc_server?? And what about your webcam resolution, Is it 640x480?

    ReplyDelete
  17. hi,if i only use ssh,then its giving gtk error.should i modify the program?my webcam resolution is 640x480.
    -abhilash

    ReplyDelete
  18. Hi joseph and anonymous....

    first in raspberry pi install vncserver...for that open a terminal and type sudo apt-get install toghtvncserver....and open a host terminal and type sudo apt-get install xvnc4viewer....after installation in host type open a terminal and type in host vncviewer...type u r ip address and enter and it asks password and enter it shows the raspberry pi gui screen.....



    Thanks&Regards,
    K.Arungopal

    ReplyDelete
  19. I get an error message when I put this in the terminal ...

    4)Start a vnc server in Rpi for viewing the screen and detection window from opencv

    Enter the command to start a vnc-server on Rpi

    vncserver :1 -geometry 1366x600 -depth 16 -pixelformat rgb565

    #New ‘X’ desktop is raspberrypi:1

    ReplyDelete
  20. Did you install tightvnc package in Raspberry Pi ? You need to install it first.

    ReplyDelete
  21. OK I installed it now. And got the vncserver running.

    Now I cant get further at step 5).

    I have a mac. How can I start the vncviewer there?

    ReplyDelete
  22. I got it already I installed VNC Viewer for Mac in the end and I hat to put the IP Adress like this in there 192.168.178:1.

    Also OpenVC is working now. I had to kill motion first.

    Thanks for the great tutorial!

    ReplyDelete
  23. how to transfer facedetect.py file from windows xp to raspberry pi vis ssh?

    scp is not working..

    ReplyDelete
  24. Try this

    http://winscp.net/eng/index.php

    ReplyDelete
  25. thanx....

    now i got another problem...
    installed opencv from synaptic...and installed packages....
    and i saved facedetect.py and face.xml in my gmail draft...then i saved both from raspberry pi platform(using midori browser)...
    when i type this

    python facedetect.py --cascade=face.xml 0

    it gives the error

    no module named cv2.cv in line 10....

    please help...

    ReplyDelete
  26. Hi varun..iam using this blog..its absolutely work on raspberry pi..First u have to install simplecv in raspberry pi..http://www.internetdelascosas.cl/2012/12/06/instalando-bibliotecas-en-python/...Just follow this link..install python on raspberry pi bacause code in python..and for installing opencv in raspberry pi

    sudo apt-get install libcv-dev
    sudo apt-get install python-opencv
    sudo apt-get install libopencv-dev
    sudo apt-get install libcv2.3
    sudo apt-get install libopencv-doc

    Thats it u r opencv is installing on raspberry pi..its is very simple to use..try this sure u get output..xml and code files is send through only scp command only..otherwise it can not works.


    Thanks&Regards,
    K.Arungopal

    ReplyDelete
  27. after installing the above packages....there is no space left in pi....

    what to do now?

    showin no space left error....
    please help

    im using type B rpi....comes with 512MB RAM..

    ReplyDelete
  28. @Varun ,I am using 32GB SD card, may be you need to expand the SD Card size,

    "no space left error" is only due to SD card not due to RAM !!

    ReplyDelete
  29. ok im using 4gb card...

    but i have a doubt...after plugin out the card from rpi and connecting to pc using card reader it shows
    only 58MB used...

    ReplyDelete
  30. Hi, thank you for this tutorial. I'm following the steps from terminal in my macbook. i reached this point and got:

    pi@raspberrypi ~ $ vncviewer 102.168.2.2:5901
    -bash: vncviewer: command not found

    :( i don't know what to do here. can you please help me?

    ReplyDelete
  31. Hi ,You need to run vncviewer from client system ,ie ubuntu. For getting vncviewer command in client system, you have to install xvnc4viewer from synaptic.

    ReplyDelete
  32. This comment has been removed by the author.

    ReplyDelete
  33. Hi, after running the command
    root@PIWEB:/OpenCV# python facedetect.py --cascade=face.xml 0

    i got the following error:

    (result:10414): Gtk-WARNING **: cannot open display: localhost:10.0

    what is wrong there???

    Thx

    ReplyDelete
  34. i was able to get the cam working on raspberry using the above method but how to power the servos as they ar enot moving if i power them from raspberry.How you used external power for servos ?

    Thanks

    ReplyDelete
  35. @AV Exporters

    Servos will consume good amount of current, so power to raspberry pi must have suffficient amount of current sourcing capacity. I think 5V,2A power supply will work fine with one or two servos

    ReplyDelete
  36. I am using my Note 2 adapter to power raspberry.None of the servos move and now my raspberry just hangs after detecting face for the first time

    ReplyDelete
  37. Got it all working.Servos work and detect face but then the tilt servo just stuck at 180 degree any ideas

    ReplyDelete
  38. Hi guys...i have Rpi and laptop with Ubuntu OS...so i want to run video via USB cam using by Rbi...please tel me step by step procedure...

    Thanks

    regards,
    Dhanash.

    ReplyDelete
  39. hi good eve...i installed Raspbian in Rpi...now i want to install opencv c++ on Rpi...how to install.. help me guys....

    thankyou

    regards
    prakash

    ReplyDelete
  40. Hi Dhanash

    You can view usb cam using this following tool called camorama

    $sudo apt-get update
    $sudo apt-get install camorama

    ReplyDelete
  41. Hi Prakash

    This post also gives idea about the installation of opencv c++.

    ReplyDelete
  42. Hi,

    I did the full steps of the tutorial, but I have a problem running the program.

    I plug 3 different cameras and I also install camorama, but all of them give me this error:

    $ python facedetect.py --cascade=face.xml 0
    VIDIOC_QUERYMENU: Invalid argument
    VIDIOC_QUERYMENU: Invalid argument
    VIDIOC_QUERYMENU: Invalid argument
    libv4l2: error allocating conversion buffer
    mmap: Cannot allocate memory
    munmap: Invalid argument
    munmap: Invalid argument
    munmap: Invalid argument
    munmap: Invalid argument
    Unable to stop the stream.: Bad file descriptor
    munmap: Invalid argument
    munmap: Invalid argument
    munmap: Invalid argument
    munmap: Invalid argument
    libv4l1: error allocating v4l1 buffer: Cannot allocate memory
    HIGHGUI ERROR: V4L: Mapping Memmory from video source error: Invalid argument

    The only one that do not show this error is the Asus Xtion but it wont shows anything!!

    regards

    Andres

    ReplyDelete
  43. Hey Lentin!
    I am using eye blink detection using opencv on raspberry pi. It is working fine but it lags a lot. It might be probably due to large image resolution. Is it possible to change the image resolution and how?
    Please help!
    Thanks !

    ReplyDelete
  44. Hi Kevin

    I think its version 2.4.3 or 2.4.5

    ReplyDelete
  45. Andreas

    I couldnt find the reason, its not the problem of code i think. Its a bug found in low virtual memory. What is the size of memory card you using?

    ReplyDelete
  46. Hey Lentin,
    Actually my question was different...:D ... I am using your eye blink detection code on my raspberry pi... It is working fine but it lags a lot. It might be probably due to large image resolution. Is it possible to change the image resolution and how?
    Please help!

    ReplyDelete
  47. Hi Kevin

    Change the line number 77 and 78. This indicate the resolution. Reduce the resolution to 160 x 120.

    ReplyDelete
  48. This comment has been removed by the author.

    ReplyDelete
  49. Hi Lentin,
    you are talking about these two commands right?
    cv::Mat img_display;
    roiImg.copyTo( img_display );
    Thanks!

    ReplyDelete
  50. Hi Kevin

    I mean the following lines


    width = 320 #leave None for auto-detection
    height = 240 #leave None for auto-detection

    change into


    width = 160 #leave None for auto-detection
    height = 120 #leave None for auto-detection

    ReplyDelete
  51. Hi Andreas

    Are you using 512 mb sdcard? Try to upgrade it into 4gb or 8 gb. May be you can solve this issue

    ReplyDelete
  52. Hi Lentin!, actually I was talking about eye blink detection not about face detection:)..So please tell me what changes do I have to make in eye blink detection code?

    ReplyDelete
  53. Hi Kevin
    Sorry for the carelessness :).Eye blink detection will take good system resource so i dont suggest you to run it in Rpi.

    Currently i didnt put code to reduce resolution because it was tested in a pc. But you can make a try in Rpi with reduced resolution. You can do this by adding 2 more lines below the cvCaptureFromCAM(0) as show below. Make a try and please tell me if it is working in Rpi or not.

    capture = cvCaptureFromCAM( 0);

    cvSetCaptureProperty( capture, CV_CAP_PROP_FRAME_WIDTH, 320);

    cvSetCaptureProperty( capture, CV_CAP_PROP_FRAME_HEIGHT, 240 );

    ReplyDelete
  54. Hi Lentin,

    im using now 16gb and still not working!!! any Idea?

    Andres

    ReplyDelete
  55. Hi Andres

    I think its because of driver fault. My web cam support uvc driver and it displays video stream.

    I searched in internet about this issue, but it remains unresolved. For debugging this issue please mail me the screenshot of 'dmesg' and 'lsusb' to lentin007@gmail.com

    ReplyDelete
  56. The blog was absolutely fantastic! Lot of great information which can be helpful in some or the other way. Keep updating the blog,
    looking forward for more contents...Great job, keep it up.
    stream host.

    ReplyDelete
  57. Hi Lentin

    The post is really good for me.
    Actually, I run a python file and display is shown, ok.
    But there is no red rectangular which is not shown.
    And i want to change code for showing a position that is face location. How should i do ?

    ReplyDelete
  58. Hi John

    Rectangular only appears when there is a face detection.. The detection depends upon lighting conditions and all.. you can print the face location too ..

    pt1 = (int(x * image_scale), int(y * image_scale))
    pt2 = (int((x + w) * image_scale), int((y + h) * image_scale))
    You can print pt1 and pt2 ..Avg of pt1 and pt2 gives center .. Pt1 and pt2 contain x,y of the rectangle

    ReplyDelete
  59. Hi, I'm using the raspberry camera. Now, when I start the script I have a blank window (result). Can you help me? This is a screenshot: https://dl.dropboxusercontent.com/u/22330630/DSC_0869.jpg P.S. I want to precise that the cam works when I use raspistill

    ReplyDelete
  60. Hi Kamil
    I think rpi cam is not support in opencv now. I was using a usb webcam for this project.

    ReplyDelete
  61. Thanks for the response and compliments for your blog ;)

    ReplyDelete
  62. I found a solution installing UV4L > http://www.linux-projects.org/modules/sections/index.php?op=viewarticle&artid=16 ;)

    ReplyDelete
  63. im developing driver profile authentication system in car ..for that face recognition is needed .. can this raspberry pi+camera work like a standalone system for recognition. Or system interfacing is mandatory??
    thanks in advance..

    ReplyDelete
  64. To install OpenCV using the terminal on Ubuntu:
    $ su -
    # apt-get update
    # apt-get install build-essential
    # apt-get install libavformat-dev
    # apt-get install x264 v4l-utils ffmpeg
    # apt-get install libcv2.3 libcvaux2.3 libhighgui2.3 python-opencv opencv-doc libcv-dev libcvaux-dev libhighgui-dev

    OpenCV should be installed in /usr/local/ Installation Directory

    You may also want to compile and view examples
    $ cp -r /usr/share/doc/opencv-doc/examples .
    $ cd examples
    $ cd c
    $ sh build_all.sh

    Source: http://namhuy.net/1205/how-to-install-opencv-on-ubuntu.html

    ReplyDelete
  65. hi Lentin,

    I got the error below when i run your code. pls help me. The error showed like this:

    HIGHGUI ERROR: V4L/V4L2: VIDIOC_CROPCAP
    /dev/video0 does not support memory mapping
    VIDIOC_QBUF: Inappropriate ioctl for device

    By the way, I am using raspi camera and model B raspberry pi with 32GB memory card. Thanks

    ReplyDelete
  66. Hi Richard

    Actually this example is working with ordinary webcam. If you are using Rpi camera, you can follow this link for setting opencv

    http://thinkrpi.wordpress.com/2013/05/22/opencv-and-camera-board-csi/

    ReplyDelete
  67. Hi Lentin,

    Is your tutorial compatible to any versions of OpenCV? Can i get your e-mail address so i can give you my code for you to test in your own raspberry pi and see the actual problem that i am experiencing??Thanks lentin.

    ReplyDelete
  68. Hi Richard
    My email id is lentin007@gmail.com. May be you can send me the error you getting, That will be enough for debugging.

    ReplyDelete
  69. Hi Lentin,
    I got an error in line 63
    cascade=cv.load(options.cascade)
    TypeError: OpenCV returned NULL
    could you please help me in this?

    ReplyDelete
  70. Hi,
    You have to include cascade file during the execution of this code like this

    python facedetect.py --cascade=face.xml 0. Where facedetect.py is the python file, face.xml is the cascade file and 0 is the camera index

    ReplyDelete
  71. Hi Lentin,

    Are u familiar with auto running of python script during boot process in raspberry pi? Thanks

    ReplyDelete
  72. Hey.. Getting this error for your sample face detect example.
    running Rpi Raspbian using SSH ubuntu 12.04:

    VIDIOC_QUERYMENU: INVALID ARGUMENT
    libv4l2:error setting pixel format:device busy
    extension Randr missing on display :0

    ReplyDelete
  73. Hi @Richard
    Following link shows how we can run a python script during booting

    http://www.raspberrypi-spy.co.uk/2013/07/running-a-python-script-at-boot-using-cron/

    ReplyDelete
  74. Did you find a way to cross-compile OpenCV for RasPi, e.g. from a Ubuntu system?
    I'm stuck with cmake, because it checks available ressources on Ubuntu instead of the Pi, even if I set the pathes correctly.

    ReplyDelete
  75. You can follow this link to setup raspicam

    http://www.uco.es/investiga/grupos/ava/node/40

    ReplyDelete
  76. How do u access xml file or download xml file?
    The file I was going to downloaded face.xml.

    ReplyDelete