domenica 25 agosto 2013

Login automatico con GDM3

Per abilitare il login in automatico di un utente con GDM3 si editi il file
/etc/gdm3/daemon.conf


modificando le seguenti righe
-----------------------------------------
# GDM configuration storage
#
# See /usr/share/gdm/gdm.schemas for a list of available options.

[daemon]
# Enabling automatic login
  AutomaticLoginEnable = true
  AutomaticLogin = luca
------------------------------------------
e riavviando con

dpkg-reconfigure gdm3

OpenCV in C++

Per tentare in futuro di usare il riconoscimento real-time degli oggetti ho convertito lo script in Python visto in questo post in questa versione in C++

si compila, come gia' indicato, mediante

g++ `pkg-config --cflags --libs opencv` opencv.cpp -o opencv
-------------------------------------------------------------
#include "opencv2/highgui/highgui.hpp"
#include <iostream>
#include <sstream>
#include <iomanip>
#include <stdlib.h>


using namespace cv;
using namespace std;


int msleep(unsigned long milisec)  
{  
    struct timespec req={0};  
    time_t sec=(int)(milisec/1000);  
    milisec=milisec-(sec*1000);  
    req.tv_sec=sec;  
    req.tv_nsec=milisec*1000000L;  
    while(nanosleep(&req,&req)==-1)  
        continue;  
    return 1;  
}

int main(int argc, char* argv[])
{
    VideoCapture cap(0); // open the video camera no. 0

    if (!cap.isOpened())  // if not success, exit program
    {
        cout << "Cannot open the video file" << endl;
        return -1;
    }

   double dWidth = cap.get(CV_CAP_PROP_FRAME_WIDTH); //get the width of frames of the video
   double dHeight = cap.get(CV_CAP_PROP_FRAME_HEIGHT); //get the height of frames of the video

    vector<int> compression_params;
    compression_params.push_back(CV_IMWRITE_JPEG_QUALITY); 
    compression_params.push_back(98); /
    cout << "Frame size : " << dWidth << " x " << dHeight << endl;
    namedWindow("MyVideo",CV_WINDOW_AUTOSIZE); //create a window called "MyVideo"
    int i = 0;
   while (1)
    {
        Mat frame;
i++;
        bool bSuccess = cap.read(frame);
         if (!bSuccess) 
        {
             cout << "Cannot read a frame from video file" << endl;
             break;
        }
        stringstream ss;
ss << std::setfill('0') << std::setw(5) << i;
      bool bSuccess2 = imwrite("a_"+ss.str()+".jpg", frame, compression_params); 
msleep(1000);
    }
    return 0;
}

venerdì 23 agosto 2013

Raspberry + Webcam + Python + OpenCV = Camera Car

Riprendendo l'idea precedente (e grazie alla batteria) e' possibile anche fare dei CameraCar


La webcam era posta diretta davanti al volante


in questo caso, data la velocita', avrei dovuto ridurre il tempo di ripresa tra due fotogrammi per rendere il tutto piu' fluido. Sarebbe carino aggiungere un modulo Bluetooth, un GPS bluetooth ed una antenna Wireless per crearsi un piccolo una Google Car

Raspberry + Webcam + Python + OpenCV = tramonto in TimeLapse

Per questo progettino da un giorno ho provato ad usare la Raspberry per catturare dei time lapse


La base hardware e' quella presente in foto ovvero una Raspberry, una batteria esterna da 10000 mAh per essere autonomi dalle prese di corrente ed una comune webcam Logitech C310



La Raspberry e' configurata con un indirizzo statico ed un DHCP server e SSH Server per collegarsi con un portatile ed un cavo cross in modo da poter interagire in caso di necessita' mediante portatile

Per la configurazione software per prima cosa e' necessario installare OpenCV per Python mediante

apt-get install python-opencv

lo script e' il seguente (molto banale)
------------------------------------------
import cv
import time

nome = 0
capture = cv.CaptureFromCAM(0)

while True:
nome = nome + 1
frame = cv.QueryFrame(capture)
indice = ("%04d")%nome
cv.SaveImage("/home/luca/a_"+indice+".jpg",frame)
time.sleep(20)
------------------------------------------

per mandare in esecuzione in automatico lo script e' stato modificato il file /etc/rc.local come segue aggiungendo
python /home/luca/camera.py

una volta ottenute le immagini queste sono state montate in file mpg mediante il comando
ffmpeg  -f image2 -i a_%03d.jpg tramonto.mpg


(attenzione che gli indici di ffmpeg devono iniziare da 1. Le immagini sono denominati come a_001.jpg, a_002,jpg ed a seguire)

giovedì 22 agosto 2013

OpenCV2 con Eclipse in Ubuntu

Update
-------------------------------------
altrimenti in modo piu' semplice e senza installare Eclipse
g++ `pkg-config --cflags --libs opencv` opencv.cpp -o opencv
-------------------------------------

Per utilizzare la libreria OpenCV in C++  in ambiente Eclipse si deve prima di tutto aver installato Eclipse con il plugin CDT
Successivamente si puo' installare la libreria con il comando

apt-get install libopencv-dev

A questo punto si crea un nuovo progetto C++ dal wizard di Eclipse e si configurano i puntamenti alle directory di include e lib


nell'esempio sono riportate sono alcune librerie di base di OpenCV2. Se si usano funzioni avanzate sara' necessario aggiungere le corrispondenti librerie



a questo punto si puo' compilare un semplice esempio che mostra una immagine passata come argomento dalla linea di comando

-------------------------------------------------
#include "opencv2/highgui/highgui.hpp"
#include <iostream>


using namespace cv;
using namespace std;

int main(int argc, char** argv)
{
  Mat im;
  if (argc == 2) im = imread(argv[1]);

  if (im.empty())
  {
    cout << "Cannot open image!" << endl;
    return -1;
  }
  imshow("image", im);
  waitKey(0);
  return 0;
}



mercoledì 21 agosto 2013

Pacchetti non aggiornati con apt-get

In alcuni casi facendo

apt-get update
apt-get upgrade

risulta che alcuni pacchetti siano rimasti non aggiornati.Si puo' risolvere con

apt-get dist-upgrade

da fare ovviamente con le dovute accortezze

Apici inversi in Bash

Riprendendo il precedente post si puo' sostituire l'apice inverso  come segue

apt-get install linux-headers-`uname -r`

puo' essere scritto come

apt-get install linux-headers-$(uname -r)

martedì 20 agosto 2013

Emulatore Commodore 64 in Debian

Per installare l'emulatore del Commodore 64 e' necessario proecedere come segue

per prima cosa si installa il programma Vice mediante

apt-get install vice


Successivamente e' necessario acquisire le Rom che si possono scaricare da questo link
Si decomprime il file nella directory /usr/lib/vice (permessi di root necessari) e si avra' una sottodirectory per ogni calcolatore emulato. Ricontrollare a questo punto che i permessi siano impostati in modo tale che anche l'utente normale possa leggere i file

per lanciare gli emulatori si digiti

x64 (per Commodore 64)
x128 (per Commodore 128)
xcbm2 (per Commodore CBM-II)
xpet  (per Commodore Pet)
xplus4 (per Commodore Plus 4)
xvic (per Commodore VIC 20)


Mandelbrot in Simons Basic (Commodore 64)

Circa 20 anni fa lo facevo sui Commodore 64 reali, registravo sul datasette e per salvare le schermate usavo un VHS....al giorno d'oggi, non avendo piu' l'hardware, non mi rimane che l'emulazione




Attenzione: in modalita' Warp il programma richiede oltre 30 minuti per terminare
----------------------------------------------
10 hires 1,0
12 me = -2.0
14 mi = -1.2
20 de = 0.009375
30 di = 0.012
40 for i = 0 to 199
50 for j = 0 to 319
60 a = me + (j*de)
70 b = mi + (i*di)
80 x=0
90 y=0
100 for k = 1 to 100
110 xn = (x*x)-(y*y)+a
120 yn = (2*x*y)+b
130 t = (xn*xn)+(yn*yn)
135 cl = mod(k,2)
140 if (t>4) then plot j,i,cl
145 if (t>4) then k=101
150 x = xn
160 y = yn
170 next k
180 next j
190 next i
200 pause 5

Installazione di CentOs

Sempre per tornare a RedHat e simili ho provato l'installazione di CentOs, una distribuzione che ricompila i sorgenti di RHEL omettendo tutto quanto soggetto a copyright.

Per rendere le cose piu' interessanti sono partito dal cd di NetInstall piu' che altro per vedere le differenze con il NetInstall di Debian



la prima grande differenza e' che si deve esplicitamente scrivere l'indirizzo della immagine che si vuole utilizzare durante l'installazione via rete. Al contrario di Debian non vengono forniti suggerimenti sui server geograficamente piu' vicini


in seguito l'installazione e' abbastanza standard con la regolazione dell'orologio

ed il download dei pacchetti

al termine dell'installazione ci troveremo con un sistema minimale di shell Linux senza ambiente grafico. Si dovra' quindi configurare anche un utente per le operazioni di tutti i giorni (nell'installazione e' presente solo l'utente root)
I pacchetti si installano con yum che funzione in modo molto simile ad apt-get. Per una lista dettagliata dei comandi relativi a yum si puo' andare a questo link



i pacchetti possono essere installati anche per gruppi.
Di seguito alcuni esempi di cui il primo installa il server X

yum -y groupinstall "Desktop" "Desktop Platform" "X Window System" "Fonts"
yum groupinstall 'Development Tools'
yum -y groupinstall "Graphical Administration Tools"
yum -y groupinstall "Internet Browser"
yum -y groupinstall "General Purpose Desktop"
yum -y groupinstall "Office Suite and Productivity"
yum -y groupinstall "Graphics Creation Tools"


CentOs e' sicuramente veloce ma ci sono alcune cose piuttosto curiose del tipo

  • Di default viene installato Gnome 2 (nessuna traccia di Gnome3)
  • Come alternativa c'e' praticamente solo KDE. Altri WM si possono installare ma non in modo banale
  • I repository sono pochi e decisamente meno forniti di Debian
  • Il kernel e' ancorato alla versione 2.6
  • E' installata ancora la versione 3 delle Qt e per usare la versione 4 viene indicato di ....partire dai sorgenti (evito i commenti)
  • come editor c'e' ancora vi e non nano o simili piu' recenti
In conclusione puo' essere un fantastico ambiente server (ho amministrato a lungo una RedHat 7.2 un bel po' di tempo fa) e puo' essere anche una distribuzione con un lunghissimo tempo di supporto ma e' piu' indicata per l'uso Desktop dell'ufficio piuttosto che per l'uso di normale utente che ogni tanto vuole utilizzare qualche programma un po' piu' recente

Flash player su Iceweasel/Debian

Di default Iceweasel (la versione libera di Firefox) in Debian non permette di riprodurre i filmati di Youtube (o simili) per la mancanza del plugin di Flash



per ovviare a questo problema, dopo aver modificato i repository aggiungendo quelli non-free si puo' digitare

apt-get install flashplugin-nonfree

ed in automatico viene scaricato ed installato il plugin direttamente da Macromedia

lunedì 19 agosto 2013

Scientific Linux 6.4

Continuando l'esame delle distribuzioni basate su RHEL ho provato Scientific Linux installando come base il Live Cd ed effettuando l'installazione su Hard Disk

A parte il fatto che non ci sono particolari motivi per usare SL al posto di CentOs c'e' da segnalare che su SL 6.4 non si riescono a compilare le estensioni di VirtualBox per cui non si puo' modificare le dimensioni dello schermo


per il resto ha gli stessi pregi e difetti di CentOS.

Linux Oracle

Nella ricerca di una distribuzione Linux compatbile con Red Hat (ma non vincolata all'acquisto della licenza) mi sono imbattuto in Linux Oracle


La distribuzione usa il sorgenti di Red Hat Enterprise ed e' decisamente veloce (almeno sotto VirtualBox) pur con la limitazione tipica del Kernel 2.6, di Gnome 2 e di repository piuttosto scarni

La cosa veramente fastidiosa e' che di default non e' abilitata la scheda di rete
Infatti si deve editare il file
/etc/sysconfig/network-scripts/ifcfg-eth0
modificando in yes la proprieta' ONBOOT

DEVICE=eth0 
BOOTPROTO=dhcp 
ONBOOT=yes

da qui in poi sara' possibile aggiornare la distribuzione ed aggiungere nuovo software via rete

venerdì 16 agosto 2013

OTG su Mediacom 850i


In modo abbastanza fortuito mi sono accorto che sul tablet Mediacom 850i (non so se a seguito di questa modifica) e' possibile utilizzare la modalita' USB OTG per montare supporti di memoria esterni (in questo caso una chiavetta da 32 Gb)

Nell'area delle notifiche non appare nessuna icona ma usando un file manager e' possibile visualizzare i file sulla chiavetta USB


LLama3 Anita

A seguito di questo post ho provato a vedere ho provato a vedere cosa accadeva ad utilizzare un modello specifico per la lingua italiana in...