Visualizzazione post con etichetta linux. Mostra tutti i post
Visualizzazione post con etichetta linux. Mostra tutti i post

martedì 13 dicembre 2016

How to read a image sequence with OpenCV


This rough post contains information about the stored image sequence management for still images processing in OpenCV. This post is a reminder, not a tutorial.

Simple assumptions


  • Your image sequence contains images with file name like this: image000001.png. Normally you store images with this sequential file name convention (consider also the case of auto file naming)
  • Your images are in png format (It is only for this example)
  • Your folder absolute path is /folder1/folder2/folder3/ (please consider that Unix and Win paths are different, so use carefully the \ or / chars)


ImageList file

you can use the image list file creator inside the opencv samples, to build a xml file containing the list of the images inside the target folder.
Then you can import the list of images as a vector inside your code

VideoCapture

0. some variables
cv::Mat image_frame;
std::string str_sequenceFileName = "/folder1/folder2/folder3/image%06d.png ";

1. create a videocapture object and then open it, check if is opened and eventually send an error on the shell.

cv::VideoCapture videoCapture;
videoCapture.open(str_sequenceFileName); // open the default camera
if (!videoCapture.isOpened()) {  // check if we succeeded
std::cerr << "[EE] opening video capture OFFLINE device" << std::endl;
return -1;
}
}

2. use the videocapture object instance to grab the current frame. the videocapture grabs the frame from the image sequence folder. You can use it directly inside your main image processing loop.

videoCapture >> image_frame;

Glob

0. some variables
cv::String str_sequenceFolder = "/folder1/folder2/folder3"
cv::String glob_folder = str_sequenceFolder + "/*.png";
std::vector<cv::String> imageFileNamesList;
imageFileNamesList.clear();
cv::Mat image_frame;

1. fill the vector with the image names inside the sequence folder, to obtain the image names list vector

cv::glob(glob_folder, imageFileNamesList);

2. sort the vector (maybe it is not useful)

std::sort(imageFileNamesList.begin(), imageFileNamesList.end());

3. read the current image from the sequence folder

for (int n_frameNumber=0; n_frameNumber < imageFileNamesList.size(); ++n_frameNumber) 
{
    image_frame = cv::imread(imageFileNamesList[n_frameNumber]);
    //some image processing
}

venerdì 12 febbraio 2016

Ubuntu 14.04 LTS on Dell inspiron 15 7000 series



subtitle: a lot of problems





ok, this is the page of the hardware configuration certification in ubuntu
http://www.ubuntu.com/certification/catalog/component/dmi/4755/dmi%3ADellSystemInspiron157000Series7537/


...but...

WI FI

when you finish the installation stage, u could have no wireless connection
due to problems with Intel wireless drivers

on the Dell pc you have this wireless card
Intel® Wireless 7265
Intel® Wireless 3165 (starting from firmware XX.XX.13.0 and kernel 4.1)

https://wireless.wiki.kernel.org/en/users/Drivers/iwlwifi


a solution is to use this trick:


First, verify that you have these two files; iwlwifi-7265D-13.ucode and iwlwifi-7265-13.ucode:
ls /lib/firmware | grep 7265
If so, we are going to make copies but rename them:
cd /lib/firmware
sudo cp iwlwifi-7265D-13.ucode  iwlwifi-3165-9.ucode
sudo cp iwlwifi-7265-13.ucode  iwlwifi-3165-13.ucode

FROM: http://askubuntu.com/questions/672700/how-can-i-install-intel-dual-band-wireless-ac-3165-drivers

This solution works for me.


Kernel 4.X

you could have problems with this kernel
in my case the nouveau drivers crash on startup 


FREEZING


sometimes the OS freezes,

I don't be sure that this is the solution...

If you have installed the Ubuntu distro on a PC with Microsoft Windows pre-installed maybe the fast startup settings could be put on the RAM some configuration files, then when you start linux it could be find a incoerent state...
 
try to disable the hybernate and sleep, and fast startup in windows OS


I tryed also to install other kernels or other versions of  ubuntu and mint, but I cannot have more than half an hour to spend in installations...

mercoledì 28 ottobre 2015

Uninstall MatLab Linux

come disintstallare matlab su linux?

segui qui!

http://www.mathworks.com/matlabcentral/answers/102428-how-do-i-uninstall-matlab-products-on-a-unix-or-linux-machine


lunedì 12 maggio 2014

Installare packages LaTex ubuntu 14.04

Per installare i packages di LaTex su ubuntu 14.04 che provengono da CTAN si può usare tlmgr

Procedura  per installare il pacchetto changes come esempio.

1. Installazione di texlive-base che nella versione di ubuntu 14.04 contiene tlmgr
$ apt-get install texlive-base

 Usage:
    tlmgr [*option*]... *action* [*option*]... [*operand*]...

2. se non inizializzi tlmgr  allora compare questo errore:
$ tlmgr install changes
(running on Debian, switching to user mode!)
cannot setup TLPDB in /home/nomeutente/texmf at /usr/bin/tlmgr line 5336.

per inizializzare tlmgr, con creazione della directory appropriata

$ tlmgr init-usertree
(running on Debian, switching to user mode!)

3. Ricordarsi di installare anche il pacchetto ubuntu xzdec

$ sudo apt-get install xzdec





4. A questo punto si può installare il package di  LaTex


$ tlmgr install changes

tlmgr: package repository http://ctan.mirror.garr.it/mirrors/CTAN/systems/texlive/tlnet
[1/1, ??:??/??:??] install: changes [5k]
tlmgr: package log updated: /home/nomeutente/texmf/web2c/tlmgr.log
running mktexlsr ...
done running mktexlsr.

5. se si vuole installare con il download del pacchetto da CTAN fare riferimento qui:

en.wikibooks.org/wiki/LaTex/Installing_Extra_Packages

martedì 17 settembre 2013

Usare due schermi

come usare un monitor esterno con xrandr

script per gestire due schermi, di cui uno esterno da far diventare principale:
#!/bin/bash
xrandr --output DVI-D-0 --pos 0x0 --primary --size 1920x1080 --output LVDS-0 --right-of DVI-D-0 --auto


xrandr gestisce gli schermi
LVDS-0 è lo schermo del pc portatile
DVI-D-0 è lo schermo del pc al lavoro

con xrandr si possono esplorare gli schermi collegati e fare uno script per le diverse tipologie di connessioni.


Conversioni per sequenze di immagini

conversion from images sequence to video and viceversa.

FFMPEG

from video to image sequence

ffmpeg -i foo.avi -r 1 -s WxH -f image2 foo-%03d.jpeg
 
viceversa, from images to video

ffmpeg -f image2 -i outimage%03d.png -r 12 -qscale 0 foo.avi
 

-sameq does not mean same quality, you have to use -qscale 0 

pay attention to the difference between linux and win operating systems.

reference:
http://www.ffmpeg.org/ffmpeg.html

giovedì 16 maggio 2013

Installa OpenCV ubuntu 12.04

Brevemente per passi come installare opencv su ubuntu 12.04
brevemente perchè questo post è sicuramente da migliorare

Per esempio usiamo ubuntu 12.04
con partizione dati /media/data/qualcosa
con opencv 2.4.5

questa procedura potrebbe andare bene per ogni distro linux

1. scaricare l'ultima versione di opencv dalla pagina ufficiale www.opencv.org

2. il file per linux è un tar.gz, opencv-2.4.5.tar.gz salvarlo in una cartella del filesystem, tenendo conto che questa cartella non va rimossa, meglio se inserita in una parte del filesystem in cui si ha accesso in lettura/scrittura con utente normale, la cartella estratta potrebbe essere /media/data/qualcosa/opencv-2.4.5

3. all'interno della cartella scompattata creare la cartella build, in cui si compila opencv
cd /media/data/qualcosa/opencv-2.4.5
mkdir build
All'interno della cartella build bisogna configurare il makefile, si fa tramite l'utility cmake, deve essere installata nel sistema la versione > 2.8

4. selezionare con 
ccmake ..
le impostazioni per la generazione del makefile che verrà utilizzato per compilare le librerie

5. una volta selezionate tutte le opzioni desiderate premere c per configurare

6. finito premere g per generare il makefile

7. make 

8. sudo make install

9. le librerie sono installate nel sistema operativo

10. sudo ldconfig per configurare pkg config

11. si può controllare la giusta configurazione di pkg config mediante 
pkg-config --libs --cflags opencv

per installare la versione aggiornata, prima di eseguire tutti i passi,
andare nella cartella build delle vecchie librerie e fare
sudo make uninstall

giovedì 22 novembre 2012

Installare ROS su Ubuntu 12.04

Come installare ROS dentro a Ubuntu precise, 12.04 LTS

Seguire le istruzioni su:
http://www.ros.org/wiki/fuerte/Installation/Ubuntu#fuerte.2BAC8-Installation.2BAC8-DebEnvironment.Environment_setup

Settare la cartella workspace, in cui lavorare, in modo che quando si esegue

roscd

si entra nella directory del workspace;

sudo vim /opt/ros/fuerte/setup.sh

qui basta inserire tra le altre cose:


ROS_WORKSPACE= ~/ROS_workspace/2012_ROS
export ROS_WORKSPACE

martedì 13 novembre 2012

Scaricare filmati rtmp dal web

Alcuni filmati in streaming si trovano con il protocollo rtmp, quindi non si riescono a scaricare come i filmati di youtube.

Tramite un qualunque sistema bisogna trovare l'indirizzo del filmato, poi si può utilizzare rtmpdump
rtmpdump -r indirizzo -o nomefileoutput.mp4

nel caso in cui ci siano dubbi
rtmpdump --help

Compilare un programma per OpenCV

Per compilare un programma OpenCV in linux è necessario, da riga di comando, scrivere

g++ hello-world.cpp -o hello-world \
-I /usr/local/include/opencv -L /usr/local/lib \
-lm -lcv -lhighgui -lcvaux

Compilatore
g++ o gcc, fare attenzione al tipo di file per non avere errori stupidi!

Librerie
Dopo aver installato OpenCV nella propria macchina, gli header dovrebbero trovarsi in
 /usr/local/include/opencv
Mentre i .so dovrebbero trovarsi in
/usr/local/include/opencv

Con cmake basta fare il CMakeLists.txt in questo modo:
project( DisplayImage ) 
find_package( OpenCV REQUIRED ) 
add_executable( DisplayImage DisplayImage.cpp ) 
target_link_libraries( DisplayImage ${OpenCV_LIBS} )

Per opencv dal 2.2 in poi:
 You need to pass the libraries which are part of the new version of OpenCV (which have been listed through pkg-config command). You can make use of pkg-config to pass the compiler & linker flags something on these lines : g++ cv.cpp -o cv $(pkg-config --cflags --libs opencv)

Dal sito di willowgarage:

cd /where/you/have/the/source/code
PKG_CONFIG_PATH=/where/you/have/installed/opencv/lib/pkgconfig:${PKG_CONFIG_PATH}
export PKG_CONFIG_PATH
You can check that the PKG_CONFIG_PATH is correct by doing either:
pkg-config --cflags opencv
pkg-config --libs opencv
You must have something like:
$ pkg-config --cflags opencv
-I/where/you/have/installed/opencv/include/opencv  
$ pkg-config --libs opencv
-L/where/you/have/installed/opencv/lib -lcxcore -lcv -lhighgui -lcvaux  

[Linux, MacOSX] Then you can optionally run "sudo make install" (on Linux or MacOSX). Note, that if you are using CMake (and, therefore, OpenCVConfig.cmake) for your projects, it is not necessary to run "make install". Just use OpenCV from where you built it. And actually this is recommended approach, since it does not pollute system directories with potentially conflicting OpenCV versions.

References
http://www.bo.cnr.it/corsi-di-informatica/corsoCstandard/Lezioni/16Linuxgcc.html
http://www.cs.iit.edu/~agam/cs512/index.html
http://www.jestinstoffel.com/?q=node/112
http://opencv.willowgarage.com/wiki/CompileOpenCVUsingLinux
http://docs.opencv.org/doc/tutorials/introduction/linux_gcc_cmake/linux_gcc_cmake.html#linux-gcc-usage

https://www.ibm.com/developerworks/mydeveloperworks/blogs/theTechTrek/entry/computer_vision_getting_started_with_opencv4?lang=en

http://jayrambhia.wordpress.com/2012/06/20/install-opencv-2-4-in-ubuntu-12-04-precise-pangolin/

http://stackoverflow.com/questions/1712899/what-is-the-memory-structure-of-opencvs-cvmat

lunedì 12 novembre 2012

Rinomina sequenze di immagini

Se abbiamo delle sequenze di immagini con singoli file con nome
Image1_altro.ppm

Image10_altro.ppm
Image123_altro.ppm
In pratica con un prefisso, un numero non formattato e un suffisso,


e vogliamo rinominarle come
Image_altro0001.ppm
con solo un prefisso e un numero con un ben definito numero di cifre possiamo fare:


1. togliamo il suffisso
rename 's/_altro//' *
2. togliamo il prefisso
rename 's/Image//' *
3. a questo punto abbiamo le immagini solo con i numeri in questo modo:
1.ppm 10.ppm 123.ppm
possiamo con foreach di tcsh rinominarle formattando anche il numero di cifre:
foreach i ( *.ppm )
foreach? cp $i `printf "Image_altro%04d"$i`
foreach? end

Passo passo:

per ogni file di tipo ppm presente nella cartella

foreach i ( *.ppm )

copio il file con nome $i (es. 1.ppm) in un file che ha nome Image_altro0001.ppm
con il comando tra apici `printf` che viene eseguito prima di cp
con il nome dell'immagine trasformata con il prefisso Image_altro che era il prefisso desiderato
foreach? cp $i `printf "Image_altro%04d"$i`

Per concludere il foreach mettiamo end
foreach? end

Convertire sequenze di immagini

Per convertire una sequenza di immagini da ppm a jpeg,
usando convert di imagemagick

#!/bin/tcsh foreach i (*ppm)
convert $i $i:r.jpg
end


Per cambiare il nome si può utilizzare krename, se ad esempio capita che le immagini hanno nome Img000_pippo.png possiamo con krename cambiarle in Img_pippo000.png.

tcsh foreach

Per usare il foreach di tcsh, esempio per copiare file di un certo tipo in una sottocartella


foreach file ( *.tif )
foreach? cp $file res/$file:r
foreach? echo -n $file 
foreach? end

Ora commento pezzo per pezzo:

La sintassi del comando foreach è la seguente:
foreach var ( statement )
Nel caso dell'esempio ho una variabile file, che contiene tutti i file .tif uno per uno all'interno della directory
foreach file ( *.tif )

Questo è quanto appare nella shell una volta dato il comando foreach correttamente
foreach?

Copio cp, il contenuto della variabile $file dentro alla cartella res, con :r tolgo l'estensione
foreach? cp $file res/$file:r

Filename modifiers
$file:h Remove a trailing pathname component, leaving the head.
$file:t Remove all leading pathname components, leaving the tail.
$file:e Remove all but the extension.
$file:r Remove a filename extension `.xxx', leaving the root name.
$file:u Uppercase the first lowercase letter.
$file:l Lowercase the first uppercase letter.
$file:s/l/r/ Substitute l for r. l is simply a string like r, not a regular expression.


Per la stampa di quello che ho copiato, modalità verbose in proprio:
foreach? echo -n $file 
con -n si toglie l'acapo automatico dall'echo

Per completare il foreach
foreach? end

References

mercoledì 7 novembre 2012

Ridurre dimensioni di un pdf - linux

Una volta fatto un repor, tesi, tesina, progetto, articolo potrebbe essere utile ridurre le dimensioni in mb del pdf generato, per mandarlo per mail o per archiviarlo.

Comando che strizza i pdf

ps2pdf -dCompatibilityLevel=1.4 -dMAxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true -sPAPERSIZE=a4 paper.pdf

Si ottiene un file paper.pdf.pdf che è di dimensione ridotta.
Giocando con i parametri si possono avere riduzioni maggiori.

ps2pdf è un comando che di suo produce un file PDF 1.4, le opzioni sono quelle di gs:

Usare umask

Brevi appunti su come usare umask in linux.

umask [-p] [-S] [maschera]
dove la maschera può essere:
  • un numero da uno a quattro cifre in base otto secondo la rappresentazione ottale dei permessi che indica i permessi che si desidera negare;
  • una stringa secondo la rappresentazione simbolica dei permessi che indica l'insieme dei permessi che possono essere concessi.

Tabella dei permessi umask

OttalePermessi negatiPermessi consentitiBinario
0---rwx000
1--xrw-001
2-w-r-x010
3-wxr--011
4r---wx100
5r-x-w-101
6rw---x110
7rwx---111
Valori comunemente usati per umask

  • 002 per impedire la scrittura agli utenti che non sono proprietari del file e che non fanno nemmeno parte del gruppo assegnato al file
  • 022 per impedire la scrittura a utenti diversi dal proprietario ( valore di default )
  • 044 per impedire la lettura a utenti diversi dal proprietario
  • 077 per impedire lettura, scrittura ed esecuzione a utenti diversi dal proprietario
  • 000 permette tutto 

Alcune reference:

http://it.wikipedia.org/wiki/Umask
http://en.wikipedia.org/wiki/Umask

martedì 6 novembre 2012

Errore matlab libc.6 linux

Quando si lancia matlab da terminale potrebbe presentarsi questo errore:

/usr/local/MATLAB/R2010b/bin/matlab: 1: /usr/local/MATLAB/R2010b/bin/util/oscheck.sh: /lib64/libc.so.6: not found

Normalmente questo potrebbe accadere con una distribuzione Ubuntu

per risolverlo, in base alla propria distribuzione, è sufficiente fare:

Ubuntu 64 bit:
sudo ln -s /lib/x86_64-linux-gnu/libc.so.6 /lib64/libc.so.6

Ubuntu 32 bit:
sudo ln -s /lib/i386-linux-gnu/libc.so.6 /lib/libc.so.6

Ubuntu 64-bit con Student Version:
sudo ln -s /lib/x86_64-linux-gnu/libc.so.6 /lib


Aggiungere comandi linux

Per aggiungere un nuovo comando, per lanciare ad esempio un'applicazione
In questo appunto ho fatto riferimento a Matlab, in modo da poter lanciare matlab da riga di comando come se fosse un normale comando della distribuzione Linux.

Creare lo script in bash o altro, per lanciare il programma, l'ho fatto in una cartella che uso per gli script
touch matlab.sh

Il file matlab.sh contiene questo:

#!/bin/bash
/usr/local/MATLAB/R2010b/bin/matlab -desktop

Ricordarsi di mettere i permessi di esecuzione al file
chmod +x matlab.sh


Linkare dentro alla cartella /usr/bin lo script
root@pippo:/usr/bin: ln -s /home/utente/Scripts/matlab.sh matlab

Ora si puo' lanciare matlab come un normale comando di linux.

Cambiare proprietario al file o cartella


Utilizzando il comando chown
Change the owner, cambia il proprietario del file o della cartella.

Cambia il proprietario del file
chown utente:gruppo nomefile

Cambia il proprietario della cartella
chown -R utente:gruppo nomedirectory

L'utente root o superuser possono cambiare i proprietari.

Pagina del manuale: man chown

NAME
       chown - change file owner and group

SYNOPSIS
       chown [OPTION]... [OWNER][:[GROUP]] FILE...
       chown [OPTION]... --reference=RFILE FILE...

Open in terminal - Nautilus

Per avere anche in gnome nautilus open in terminal, cliccando con il tasto destro del mouse

si puo' usare il pacchetto nautilus-open-terminal


sudo apt-cache search nautilus-open-terminal

nautilus-open-terminal - nautilus plugin for opening terminals in arbitrary paths

1. installazione del pacchetto

sudo apt-get install nautilus-open-terminal

2. reboot, ora cliccando con il destro si puo' trovare nel menu' open in terminal

Montare file .iso con Linux

Post per montare i file .iso con Linux

prima soluzione

tasto destro e monta archivi, o archive mounter

da terminale

I comandi vanno eseguiti con i permessi di amministratore, root.
Quindi o sudo o entrando come root.

1. costruisci la cartella in cui montare la iso
sudo mkdir /media/iso

2. montare la iso dentro alla cartella creata:
sudo mount -o loop /home/nomeUtente/Directory/file.iso /media/iso
e dovrebbe comparire nel menu' delle risorse

3. ricordarsi di smontare la .iso
sudo umount /media/iso/