Archive

Archive for the ‘python’ Category

N$ recognizer kivy implementation

August 18, 2015 Leave a comment
Categories: GSOC2015, kivy, python Tags: , , ,

Canvas to handle strokes and stroke processing.

June 5, 2015 1 comment

During my milestone 1 period, we came up with 4 new classes for ink processing.
StrokePoint: Class with coordinates x and y. This is the native structure for the StrokeCanvas behavior.
StrokeRect: Logical Rectangle which purpose is to bound a stroke generated in the StrokeCanvas. Provides methods to:
Know if a point is contained in a rectangle.
Know if another rectangle overlap itself.
Stroke: The stroke contains a list of points. The list of points form a line. A stroke have different drawing attributes:
color → change color of Stroke.
width → change the size of the graphic line.
is_highlighter → changes the visibility.
A stroke provides:
get_bounds method to get the enclosed rectangle in which a stroke is.
StrokeCanvas:
A StrokeCanvas contains a list of strokes. A StrokeCanvas provides:
Events to access to the strokes created when they are added or removed.
A StrokeCanvas is the visual representation of a Stroke using Lines.
Event to access to the mode when this is changed.

stroke_canvas_kivyThe branch for this can be found at: https://github.com/andnovar/kivy/tree/mpl_kivy and you need the colors from here: https://github.com/andnovar/kivy/tree/colors_in_utils.py although these colors are going to change eventually for more descriptive ones.

Categories: GSOC2015, kivy, python Tags:

Install Pyopencl and CUDA 5.0 on Ubuntu 13.04 64 bits using nvidia optimus with Bumblebee and Primus

May 31, 2013 2 comments

The main motivation for this post is how difficult was for me run pyopencl on my fresh ubuntu 13.04 installation. First of all nvidia drivers don’t work well on ubuntu; I am still unable to run nvidia-settings in order to change xorg.conf to run ubuntu-desktop with nvidia card.

Let’s start sharing what I did to achieve running pyopencl programs on ubuntu.

Since my graphics card is an optimus enabled, I followed this wonderful post in which this guy explains how to use your discrete nvidia card to run steam for linux. He states that you should NOT install nvidia-drivers directly so you should have a clean installation.

Basicly to make optimus work Bumblebee should be installed in our system. These are the summarized steps from cjenkins blog:

Bumblebee and Primus installation with nVidia propietary driver

sudo add-apt-repository ppa:bumblebee/stable
sudo add-apt-repository ppa:ubuntu-x-swat/x-updates
sudo apt-get update
sudo apt-get install bumblebee bumblebee-nvidia
sudo shutdown -r now

To run programs with the nvidia card you require to type in a terminal optirun followed by the name of the program you would like to run, such as:

optirun glxspheres
optirun glxgears

You can check how increase the performance by just running them without optirun with your low power graphic card.

If you want to get even better performance install Primus:

sudo add-apt-repository ppa:zhurikhin/primus
sudo apt-get update
sudo apt-get install primus

Test Primus

vblank_mode=0 optirun -b primus glxspheres

(Optional and recommended: use latest nvidia-drivers)

Just in case this does not work for you or you want to run bumblebee with the latest nvidia drivers, you can try this post. Summarizing they installed the latest nvidia-drivers in that time (nvidia-experimental-310) and then he changed configuration files for bumblebee and for primus as well:

I have to say that I followed the steps in the same way but I hope someone else tries with the latest nvidia-drivers.

sudo apt-get install nvidia-310-updates nvidia-experimental-310 nvidia-settings-310-updates

Modify bumblebee configuration file:

sudo vim /etc/bumblebee/bumblebee.conf

– on line 22, make sure “Driver=” is set to “nvidia”, like this:
Driver=nvidia

– change the “KernelDriver=” (on line 55) to “nvidia-experimental-310”, like this:
KernelDriver=nvidia-experimental-310

– change “LibraryPath=” (on line 58) to “/usr/lib/nvidia-experimental-310:/usr/lib32/nvidia-experimental-310”, so it looks like this:
LibraryPath=/usr/lib/nvidia-experimental-310:/usr/lib32/nvidia-experimental-310

– change the “XorgModulePath=” (line 61) to “XorgModulePath=/usr/lib/nvidia-experimental-310/xorg,/usr/lib/xorg/modules” so it looks like this:
XorgModulePath=/usr/lib/nvidia-experimental-310/xorg,/usr/lib/xorg/modules

Restart Bumblebee

sudo service bumblebeed restart

Logout and Login and try

optirun glxspheres

If you are using primus modify script /usr/bin/primusrun in line 16 changing nvidia-current with the nvidia-driver you installed. Same in line 27.

After this you should be able to run bumblebee and primus together and get the best from your graphic card.

Installing CUDA toolkit

Now that our nvidia drivers are working next step will be install CUDA toolkit to work with it. I will summarize this excellent post in the following steps:

Downloads =>
=> CUDA pack from developer.nvidia.com
=> pyopencl from https://pypi.python.org/pypi/pyopencl

I was just interested in pyopencl so I will focus in that part. Then in a terminal:

sudo vim /etc/environment

==> and add to PATH line the following ‘:/usr/local/cuda-5.0/bin’

sudo vim /etc/ld.so.conf 

==> and add lines: /usr/local/cuda-5.0/lib and /lib

sudo vim /etc/bash.bashrc 

==> add lines to the end

export PATH=/usr/local/cuda-5.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-5.0/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/usr/lib/:$LD_LIBRARY_PATH

Then run the following commands:

sudo ldconfig
sudo apt-get install freeglut3-dev python-opengl python-pytools python-setuptools python-numpy libboost1.48-all-dev
sudo apt-get install build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev
sudo ln -s /usr/lib/x86_64-linux-gnu/libglut.so /usr/lib/libglut.so
sudo sh cuda_5.0.35_linux_64_ubuntu11.10-1.run

Once the installer is running there are some issues I had the first one don’t install the nvidia-drivers from the pack just type no at the moment of installation.
Type y for CUDA toolkit and SAMPLES (optional).

The reason why you should not install the nvidia-drivers from the pack, you will probably get this error:

ERROR: The kernel header file
       ‘/lib/modules/3.8.0-22-generic/build/include/linux/version.h’ does
       not exist.  The most likely reason for this is that the kernel
       source files in ‘/lib/modules/3.8.0-22-generic/build’ have not been
       configured.

Next Possible error with the toolkit is the following one:

Unsupported compiler: 4.7.3

SOLUTION:

sudo apt-get install gcc gcc-4.4
sudo update-alternatives --remove-all gcc
sudo update-alternatives --config gcc
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 20
gcc --version

Error:
Missing required library libglut.so

SOLUTION:

sudo ln -s /usr/lib/x86_64-linux-gnu/libglut.so.3 /usr/lib/libglut.so

Installing PyOpenCL

Once you have CUDA installed you should proceed to install pyopencl:

python configure.py   --boost-inc-dir=/usr/include/boost   --boost-lib-dir=/usr/lib   --no-use-shipped-boost   --cl-inc-dir=/usr/local/cuda-5.0/include/   --cl-lib-dir=/usr/lib/nvidia-310-updates/  --cl-libname=OpenCL
make
sudo make install

After I got to install pyopencl successfully a last error showed up:

clGetPlatformIDs failed: platform not found khr

SOLUTION:

If you just have this one

/usr/lib/nvidia-310-updates/libnvidia-opencl.so.310.44

Create a link and write in nvidia.icd the link

ln -s libnvidia-opencl.so.310.44 libnvidia-opencl.so.1
echo libnvidia-opencl.so.1 | sudo tee /etc/OpenCL/vendors/nvidia.icd
cd examples
optirun python benchmark.py

After this you should be able to run pyopencl scripts with optirun

Extract files from a directory to another by file extensions

May 19, 2013 Leave a comment

Due to the complexity of the folders created for testdisk, I decided to implement a script to get the data I am interest in.
Copy this script and save it as script.py in the directory you would like to scan. Run the script on the terminal by:

python script.py “/home/username/path-to-folder”

The argument is the path where you are going to save your extracted files.

import os
import shutil
import sys, getopt
from os.path import join, getsize

def main(argv):
    path = '.'
    try:
        opts, args = getopt.getopt(argv,"")
    except getopt.GetoptError:
        print 'script.py "path"'
        sys.exit(2)
    for root, dirs, files in os.walk(path):
        for name in files:
            if name.endswith((".jpg",".mov",".mp4")) and getsize(join(root,name))/1024 > 100:
                print name, getsize(join(root,name))/1024
                shutil.copy2(join(root,name), args[0])

if __name__ == "__main__":
    main(sys.argv[1:])

Once finished you will have in the folder you specified all the files greater than 100Kb and with extensions “.jpg”,”.mov” and “.mp4”. Feel free to add the extensions you want.

Categories: python, ubuntu Tags: , , ,

Mediacore error PIL – IOError: decoder jpeg not available

March 7, 2012 Leave a comment

There is an error with mediacore community edition installation, when you try to upload a thumbnail to a video it shows Error 2038 and it can’t upload the image.
It is because PIL that comes with the mediacore installation didn’t find paths to the libjpeg and zlib libraries. To solve this you have to:

  1. Download PIL 1.1.6
  2. Delete mediacore_env/lib/python2.7/site-packages/PIL
  3. Delete mediacore_env/lib/python2.7/site-packages/PIL.pth
  4. Delete mediacore_env/lib/python2.7/site-packages/PIL-1.1.6-py2.7-linux-x86_64.egg
  5. tar -xvzf Imaging-1.1.6.tar.gz
  6. cd Imaging-1.1.6
  7. python setup.py install
  8. cd mediacore-community
  9. paster serve –reload development.ini

Then It should work !

Categories: python, ubuntu Tags:

Kivy – Multiple Layouts

September 14, 2011 Leave a comment

I wonder how can I have several layouts and change between them using kv files in kivy. Actually I have the answer.

You have to create an ejercicio.kv file. You have to define the classes you are going to use for each layout such as.

#:kivy 1.0

<MyLabelWithBackground>:
       #definition

<Ejercicio>:
      #definition

<Layout1>:
      #definition

<Layout2>:
      #definition

Read more…

Categories: kivy, multitouch, python Tags: , , ,

Kivy – Label with background

August 3, 2011 2 comments

Kivy is a framework for develop multitouch applications, I started to use pyMT, but pyMT evolved into Kivy.

Adding a background to a label is not possible using the common functions in documentation.

A possible solution by @Mathieu Virbel could be:

class MyLabelWithBackground(Label):
  pass
And put in a kv that you load somewhere:
<MyLabelWithBackground>:
  canvas.before:
    Color:
      rgb: 1, 0, 0 # your color here
    Rectangle:
      pos: self.pos
      size: self.size
Categories: kivy, multitouch, python Tags: , , ,