martedì 20 luglio 2021

Sottotitolazione di eventi dal vivo

E' difficile ottenere buoni risultati con la sottotitolazione di eventi dal vivo.

In parte perché il risultato deve essere prodotto entro pochi millisecondi, in parte perché si può basare solo su informazioni del passato, a differenza della trascrizione in differita, in cui si possono fare più passaggi di trascrizione e si dispone di tutte le informazioni comprese quelle future.

Approcciando il problema della visualizzazione in modo semplicistico non so decidermi se sia meglio visualizzare i risultati in tempo reale durante la decodifica o se visualizzare solo i risultati quando sono definitivi. 

video 1: sottotitolazione live di tg con risultati parziali e finali



video 2: sottotitolazione live di tg con risultati finali


Cosa vi pare meglio?

giovedì 19 settembre 2019

Servizi Speech to text in italiano

I seguenti servizi sono disponibili in italiano:

A pagamento:

https://www.speechmatics.com/       3,6£/ora
https://sonix.ai/ (solo files audio)     10$/ora
https://transcribe.wreally.com/          6$/ora
https://www.trascrivi.it/                     16,8€/ora
https://www.happyscribe.co/user       12$/ora
https://trint.com                                   52$/mese illimitato
https://newportal.transcribeme.com    0,99$/minuto
https://vocalmatic.com/                        15$/ora
https://www.listenbycode.com               2,4$/ora

Gratuiti

https://dictation.io/speech (solo microfono, non accetta files audio)
https://speechlogger.appspot.com/ (solo microfono)
https://speechnotes.co/ (solo microfono, files audio a pagamento)

martedì 10 settembre 2019

Italian Speech Datasets

Degli ASR, il lavoro duro, per fortuna, è già stato fatto da qualche cervello fine.
Tra i vari ASR a disposizione ho scelto di sperimentare Kaldi, come sistema speaker-indipendent.
Ecco qualche consiglio per creare i modelli, basato sulle mie esperienze.
Le competenze: come ho detto, la parte difficile è già stata risolta. Bisogna essere bravi nelle parole incrociate, pazienti compositori di puzzle e ossessivi collezionisti.
La strategia di prendere tantissimi dati e metterli in un calderone non ha soddisfatto le mie aspettative (ho semplificato troppo il senso dei big-data?). Ha prodotto un sistema che fa sì le trascrizioni, ma ha la tendenza a trascrivere la qualsiasi, soprattutto i rumori.
Meglio prendere pochi dati, ma consistenti.
Quanto pochi? Qui ci sono alcune indicazioni https://cmusphinx.github.io/wiki/tutorialam/, ma in generale bisogna usare il buon senso.
Il progetto VoxForge si è posto un minimo di 140 ore, ma ci sono solo 20 ore di audio a disposizione

Si tratta di preparare dei segmenti audio di alcuni secondi, idealmente da 5 a 20 secondi. Un po' di materiale pronto in rete si trova:

Link Ore
http://www.voxforge.org/it/downloads 20
https://voice.mozilla.org/it/datasets 122
https://www.caito.de/2019/01/the-m-ailabs-speech-dataset/ 140

http://voice.fub.it/activities/corpora/emovo/index.html 0,5

Italian Conversational Speech Corpus - MagicHub


facebookresearch/voxpopuli: A large-scale multilingual speech corpus for representation learning, semi-supervised learning and interpretation (github.com)

Multilingual TED at openslr.org

The SIWIS database
https://phonogenres.unige.ch/downloads/siwis_latest.zip                    4,77

ArtiPhon: Articulatory Phone Recognition
http://www.mspkacorpus.it/

Evalita connected digits recognition
http://www.evalita.it/sites/evalita.fbk.eu/files/doc2009/evalita2009srt.zip

Sugar
https://github.com/evalitaunina/SUGAR_Corpus

Altre risorse invece richiedono del lavoro supplementare per segmentare gli audio in files in piccoli:

CLIPS, LIP
http://www.clips.unina.it/it/corpus.jsp
http://www.parlaritaliano.it/index.php/it/volip
http://www.leadhoc.org/index.php/data-access/corpus-of-spoken-italian/
https://kiparla.it/

https://lionbridge.ai/datasets/12-best-italian-datasets-for-machine-learning/

https://github.com/JRMeyer/open-speech-corpora

Dunque il grosso del lavoro è creare i files necessari a Kaldi per l'addestramento del modello, quest'acqua qui https://www.eleanorchodroff.com/tutorial/kaldi/training-acoustic-models.html#create-files-for-datatrain

Che problemi ci sono nell'utilizzo di questi dati?

La qualità audio non sempre è buona.

Clipping


Sottocampionamento approssimativo (aliasing)


Accenti
I volontari che donano la loro voce spesso non sono madrelingua e hanno un forte accento (vedi gli audio librivox all'interno di M-AILABS)

Mismatch

A volte il testo non corrisponde all'audio. E' normale, provare a gestire centinaia di migliaia di prompt!!!!! Per questo servono le capacità di un collezionista


Distribuzione degli speakers
Gran parte del corpus M-AILABS è stato dettato da 2 soli speakers. Volendo fare un modello speaker-indipendent, parrebbe sensato utilizzare il maggior numero possibile di speakers equamente distribuiti

Lexicon arcaico
Alcuni degli audio che si trovano in rete contengono un italiano di 100 anni fa.
Non c'è niente di male in questo se non che è necessario del lavoro supplementare per creare la trascrizione fonetica di parole che mai oggi verrebbero utilizzate.
Ad esempio, per addestrare le novelle di Pirandello presenti in M-AILABS ho dovuto creare la trascrizione fonetica di 30.000 nuove forme lessicali che difficilmente verranno riutilizzate in un contesto reale.


In conclusione, la preparazione dei dati per l'addestramento di un modello richiede tantissimo tempo e impegno.
Preparare i dati da zero anziché partire da quelli a disposizione non è detto che sia una opzione svantaggiosa.
A parte M-AILABS, non mi risulta che ci siano altri tentativi in italiano di progetti tipo https://github.com/kaldi-asr/kaldi/tree/master/egs/librispeech.
Il limite dell' approccio con gli audiolibri, a mio avviso, è che il numero degli speakers è limitato in quanto sono quasi sempre gli stessi attori professionisti, e la voce è impostata e non naturale.



















martedì 8 gennaio 2019

Alexa: le funzionalità presenti nel mercato USA non disponibili in Italia

App Alexa per Windows 10.

Ma anche no, c'è già l'applicazione web

Modalità whisper

Per chiedere di notte al buio "che ore sono" senza svegliare nessuno
Se sussurri un comando ad Alexa, anche lei ti risponderà sussurrando.

Richieste multistep

Permette di inserire nella lista della spesa più elementi con un comando solo: ad esempio "Alexa, aggiungi latte e biscotti alla lista della spesa" e aggiungerà due items alla lista

Tracking ordini

In Italiano Alexa rendiconta solo gli ordini senza descrivne il contenuto. Nella versione americana ci sono tutti i dettagli e nei dispositivi con video appare l'immagine dei prodotti ordinati

Fare un annuncio udibile in tutti i dispositivi in casa

"Alexa, announce it's dinner time," "Alexa, broadcast it's time to go," o "Alexa, tell everyone good night."

Discutere con Alexa delle proprie preferenze in fatto di musica

Qui siamo lontani anni luce.
Nella versione italiana è già difficile farsi capire quando si vuole ascoltare un titolo o una playlist in inglese.
Nella versione americana si può instradare Alexa verso i propri gusti con una specie di dialogo dopo che Aexa ha iniziato a suonare: "Alexa, play dinner music. Alexa, actually, play instrumental dinner music. Alexa! Play upbeat instrumental music. Alexa, why are you playing Windham Hill?"
Inoltre, Alexa è in grado di porre delle domande quando cerchi le canzoni:

"Alexa, metti della musica di Natale"
Alexa riproduce un coro di bimbi e chiede"ti piace questo?"
"No"
Alexa riproduce un brano d Frank Sinatra e chiede"e allora questo?"
"Si"
e via di questo passo.
Il Product Manager millanta che il dialogo per la scoperta delle canzoni è in grado di farti ascoltare la musica che ti piace in 25 - 30 secondi.


Alexa, metti la musica che mi piace

Quando chiedo ad Alexa di mettere della musica, ho l'impressione che non abbia ancora capito i miei gusti.
La possibilità di mettere "mi piace" o "non mi piace" è limitata alle playlist personalizzate
Nella versione americana puoi dire "Alexa, this is my favorite" o "Alexa, I don't like this" su qualsiasi brano e Alexa apprenderà meglio i gusti musicali.

Ascoltare musica in streaming dai miei server

Nel mercato americano sono disponibili skill come Plex o Synology che permettono di ascoltare la propria musica con la qualità che si vuole.

Notifiche uscite discografiche su Amazon Music

Nella versione americana di Amazon Music è possibile seguire gli artisti preferiti e Alexa ti informerà del nuovo album e delle nuove produzioni degli artisti seguiti

ORA DISPONIBILI

Modalità follow-up

Per evitare di dire "Alexa" ad ogni comando. Con questa modalità, Alexa continuerà ad ascoltare i comandi finché non dici "stop" o interviene un timeout.

Integrazione Skype per Alexa

Negli USA puoi chiamare o videochiamare i tuoi contatti Skype dicendo:  "Alexa, call [person's name] on Skype."
continua...
 

martedì 25 dicembre 2018

C'è più umanità nel mondo di Alexa che nel resto di internet

Nel giorno di Natale i server di Alexa si sono fermati e gli utenti, anziché manifestare le solite lamentele del tipo: "ho pagato un servizio, è vergognoso che non funzioni", sono per la maggior parte a favore di Alexa che si è presa un po' di riposo, insomma una ribellione allo sfruttamento dei lavoratori amazon.
Ma la cosa veramente bella di Alexa è che puoi avere una risposta immediata a domande quali i risultati delle partite di calcio o alla programmazione dei cinema, senza pubblicità di mezzo, mentre porre la stessa domanda in un browser ti costringe a lottare contro una miriade di popup prima di ottenere le stesse informazioni.
Fino a quando Alexa resterà così?
 

mercoledì 9 maggio 2018

Controllo WebView UWP in una applicazione WPF o Windows Forms

Si torna indietro? Alcuni nuovi controlli per apps UWP saranno utilizzabili anche nelle applicazioni Win32

Nell'esempio in coda, il controllo WebView UWP è inserito dentro una finestra WPF e apre
la pagina https://developer.microsoft.com/en-us/microsoft-edge/testdrive/demos/microphone/

Windows 10 1803
Visual Studio 15.7.0
Pacchetto NuGet Microsoft.Toolkit.Win32.UI.Controls 3.0.0-preview https://github.com/Microsoft/WindowsCommunityToolkit

Progetto di esempio: WebView.zip

martedì 1 maggio 2018

Dettatura in italiano con Windows 10 1803

L'annuncio della nuova feature introdotta con April 2018 Update ha deluso le mie aspettative.



In realtà nelle Impostazioni->Accessibilità->Comandi vocali, la nuova feature è disponibile solo per inglese USA.

Più in basso nella stessa pagina c'è un'altra opzione ma penso si riferisca a quella presente fin da Windows 7 implementata tramite system.speech namespace


Al solito le possibilità per dettare in italiano rimangono:

- Chrome e Google: https://www.studiocataldi.it/risorse/riconoscimento-vocale.asp
- Microsoft Garage Dictate https://www.microsoft.com/en-us/garage/profiles/dictate/
- fai da te con windows.media.speechrecognition namespace https://docs.microsoft.com/en-us/uwp/api/windows.media.speechrecognition

mercoledì 21 marzo 2018

Accesso remoto con TeamViewer a un sistema Linux headless sotto VirtualBox

Se si dispone di un account TeamViewer, è possibile gestire comodamente da remoto un server senza X installato.

In Ubuntu 16.04.4 LTS


#wget http://download.teamviewer.com/download/version_12x/teamviewer_i386.deb
#sudo apt-get install ./teamviewer_i386.deb
#sudo teamviewer setup

Se la macchina Linux gira sotto virtualizzazione VmWare non ci sono problemi.
Ma se sposto la macchina sotto virtualbox, il client teamviewer mostra un errore "Initializing Display Parameters", mentre il log su Linux riporta un loop di errori infinito

FB: Attaching to frame buffer device failed: 22, Errorcode=22
InitDesktop failed, waiting 1 second, Errorcode=22

Guardando le differenze tra le istanze che girano sotto vmware e virtualbox, ho scoperto che virtualbox usa un framebuffer proprietario vboxvideo

#dmesg | grep "frame buffer"

Aggiungendo questo modulo alla blacklist dei devices teamviewer ho pensato che potesse risolvere il problema

#sudo nano /etc/modprobe.d/blacklist-framebuffer.conf

aggiungi una linea
 
blacklist vboxvideo

e riavvia.

Invece appare il seguente errore

The framebuffer console seems to be unavailable or has the wrong format. Please make sure that
/dev/fb0 is accessible and it is configured to 32-bit depth.

sudo nano /etc/default/grub
GRUB_GFXMODE=1024x768x32

GRUB_GFXPAYLOAD_LINUX=keep
sudo update-grub
reboot

e finalmente funziona 

martedì 30 gennaio 2018

Win10 1709 System Image Restore VSS Error

https://social.technet.microsoft.com/Forums/windows/en-US/1f21b451-1431-414c-89e4-8010dfa5d239/win10-1709-system-image-restore-vss-error?forum=win10itprosetup

Con Windows 10 1709 non è più possibile utilizzare la funzione di restore dell'immagine di sistema.
E' una seccatura ma bisogna farsene una ragione.

Scarica dl.acronis.com/s/AcronisTrueImage2018.iso.
Utilizza Rufus per creare un disco bootable
Procedi come sempre con Backup e Restore

mercoledì 27 dicembre 2017

Utilizzo del Microfono in un controllo UWP WebView

L'utilizzo del microfono con le API Web Audio è ben descritto qui https://developer.microsoft.com/en-us/microsoft-edge/testdrive/demos/microphone/

L'utilizzo del controllo WebView in una applicazione UWP è ben descritto qui:
https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/XamlWebView

Se voglio provare ad aprire la pagina del microfono all'interno dell'applicazione UWP devo aggiungere la funzionalità Microfono in Package.appmanifest, ma anche così non funziona.

Il trucco è aggiungere l'evento PermissionRequested al controllo WebView

<WebView x:Name="WebViewControl" PermissionRequested="WebViewControl_PermissionRequested"/>

private void WebViewControl_PermissionRequested(WebView sender, WebViewPermissionRequestedEventArgs args)
        {
            if (args.PermissionRequest.PermissionType == WebViewPermissionType.Media)
                args.PermissionRequest.Allow();
        }



 
 

venerdì 24 novembre 2017

Il Black Friday ha scassato i maroni

C'è ancora qualcuno al mondo il cui progetto di vita non sia cojonare il prossimo?

mercoledì 6 settembre 2017

Come aggiornare (quasi) facilmente VMWARE ESXi da 5.x a 6.x

Abilitare SSH, spegnere tutte le machine virtuali ed entrare in Maintenance Mode


Da ssh:

Controllare la versione corrente
~ # vmware -lv
VMware ESXi 5.5.0 build-3568722
VMware ESXi 5.5.0 Update 3

Configurare il firewall
~ # esxcli network firewall ruleset set -e true -r httpClient

Scaricare la lista aggiornata delle versioni

~ # esxcli software sources profile list -d "https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml" | sort -r
Name                              Vendor        Acceptance Level
ESXi-6.5.0-4564106-standard       VMware, Inc.  PartnerSupported
ESXi-6.5.0-4564106-no-tools       VMware, Inc.  PartnerSupported
ESXi-6.5.0-20170702001-standard   VMware, Inc.  PartnerSupported
ESXi-6.5.0-20170702001-no-tools   VMware, Inc.  PartnerSupported
...........
--------------------------------  ------------  ----------------

Il sito https://esxi-patches.v-front.de/ contiene informazioni su ogni versione.
Ad oggi l'ultima versione è:

2017-07-27 (Update 1)
Imageprofile ESXi-6.5.0-20170702001-standard (Build 5969303)

Dopo aver googlato per verificare che l'ultima versione sia compatibile con il ferro, procedere con l'aggiornamento

~ # esxcli software profile update -p ESXi-6.5.0-20170702001-standard -d https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml

Ahi!
[DependencyError]
VIB AR81Family_bootbank_net-atl1e_1.0.1.14 requires com.vmware.driverAPI-9.2.0.0, but the requirement cannot be satisfied within the ImageProfile.
VIB AR81Family_bootbank_net-atl1e_1.0.1.14 requires vmkapi_2_0_0_0, but the requirement cannot be satisfied within the ImageProfile.
Please refer to the log file for more details.


Il VIB è il driver per la scheda di rete Atheros interna al PC, ma non ha mai funzionato e ai tempi ho dovuto aggiungere una scheda di rete Intel.
Riprovo dopo aver rimosso  il VIB che non mi serve.
~ # esxcli software vib remove --vibname=AR81Family_bootbank_net-atl1e_1.0.1.14

Bene, ha funzionato.

Anzi no, infatti sono stato troppo ottimista:

[InstallationError]
[Errno 28] No space left on device

       vibs = VMware_locker_tools-light_6.5.0-0.23.5969300

Please refer to the log file for more details.

Questo thread salvifico https://communities.vmware.com/thread/560543 suggerisce di abilitare lo swap a livello Datastore: Manage->System->Swap Edit Settings.
Da Datastore "No" ho impostato un datastore

Riavviato, ripetuto l'aggiornamento e l'update ora ha funzionato

Rimettere a posto il firewall
~ # esxcli network firewall ruleset set -e false -r httpClient

Riavviare il sistema

~ # vmware -lv
VMware ESXi 6.5.0 build-5969303
VMware ESXi 6.5.0 Update 1

I log li visualizzo così: https://IP_of_Your_ESXi/host

La licenza ESXi 5.5 non è più valida e va sostituita con quella per ESXi 6.5.

Infine ho trovato nell'inventario una vm orfana poiché avevo brutalmente cancellato dal datastore la cartella che la conteneva.
L'unico modo che ho trovato per far sparire la voce invalida dall'inventario è stato quello di ripristinare la vm, riavviare il sistema e deregistrare la vm.


sabato 19 agosto 2017

Copia di file su server remoto senza password

Testato  con Ubuntu 16.04.3

Il metodo più semplice e sicuro è usare le chiavi SSH
Verificare che in /etc/ssh/sshd_config sia configurato
PubkeyAuthentication yes

$ scp -i .ssh/id_rsa source_path user@server:/destination_path .

id_rsa è la chiave privata generata con:
 
$ ssh-keygen -t rsa

La chiave pubblica id_rsa.pub deve essere copiata sul server dentro  ~user/.ssh/authorized_keys

$ ssh-copy-id -i .ssh/id_rsa.pub user@server

Una guida molto chiara è qui
Una guida per i server synology è qui e qui

La password mi veniva comunque richiesta e ho tribolato un po' per trovare l'errore.
Prima di tutto ho lanciato il comando in modalità debug

$ ssh -vv -i .ssh/id_rsa user@server

debug2: we did not send a packet, disable method
debug1: Next authentication method: password

Il passaggio successivo è stato consultare sul server il file /var/log/auth.log dove era finalmente riportato l'errore:

sshd[3471]: Authentication refused: bad ownership or modes for directory /home/user/.ssh

Infine

$ chmod 755 /home/user/.ssh

mercoledì 16 agosto 2017

Come individuare la lingua di una stringa in C#

Metti caso che vuoi sviluppare un sistema per determinare la lingua di una frase.
Uno dei metodi migliori sembra essere addestrare un classificatore, ma se i dati di partenza non sono corretti i risultati non saranno soddisfacenti. Un classificatore è un classico sistema Garbage in, Garbage out.
Quindi per sviluppare un sistema per determinare la lingua di una frase potrebbe essere utile disporre di un altro sistema per determinare la lingua di una frase,  in modo da filtrare i dati che servono per l'addestramento.
Da Windows 7 in poi si possono usare gli Extended Linguistic Services.
Su NuGet è disponibile un wrapper C# WindowsAPICodePack-ExtendedLinguisticServices

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.WindowsAPICodePack.ExtendedLinguisticServices;
using System.Diagnostics;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            MappingService langDetect = new MappingService(MappingAvailableServices.LanguageDetection);
            using (MappingPropertyBag bag = langDetect.RecognizeText("good morning vietnam", null))
            {
                string[] languages = bag.GetResultRanges()[0].FormatData(new StringArrayFormatter());
                foreach (string lang in languages)
                    Console.WriteLine(lang);
            }         
        }
    }
}

 
 

venerdì 23 giugno 2017

Dettatura in italiano con Cortana. Qualcosa si sta muovendo

Finalmente le API di Cortana sono state utilizzate per creare un addin per Word e le altre applicazioni Office.
L'addin si chiama Dictate ed è un progetto Microsoft Garage.
Non solo trascrive, ma anche traduce in decine di lingue.
Una manna per gli antichi come me che si ostinano a usare Word invece di Chrome e Google docs.
Una volta attivato l'addin, Cortana non scrive in Word ma nella finestra correntemente attiva, per cui potreste anche scrivere in Wordpad o Notepad mentre sono in primo piano.
Per ora il grosso limite è che non permette di modificare il vocabolario.
Il sistema funziona benissimo in un contesto generico adatto ai creativi, ma i creativi preferiscono usare la tastiera.
Il vocale viene invece utilizzato da coloro che vengono spremuti sul lavoro per scrivere, che so, referti di TAC al torace piuttosto che relazioni sulle caldaie, ma questi hanno bisogno di un vocabolario tecnico e perciò il sistema in sé è ancora poco utile.

venerdì 9 giugno 2017

Come calcolare la frequenza delle parole in un testo in C#

Calcolare la frequenza delle parole in un testo è un problema puramente accademico perché esistono già centinaia di programmi ed esempi di codice pronti per l'uso.
Dovendo comunque scrivere del codice, essendo pigro di natura, sono sempre alla ricerca della procedura più semplice e più breve possibile, ovviamente in C#
L'esempio contempla l'uso delle stopwords


//Testo da esaminare. Ho provato con files fino a 500MB senza attese fastidiose
string text = File.ReadAllText(path, Encoding.Default);

//caratteri separatori che identificano i limiti di una parola
char[] separators = new char[] { ' ', '\r', '\n', ',', '\\', '.', ';', ':', '(', ')', '"', '?', '!', '\'', '-', '«', '/' };

//lista delle parole contenute in text
List<string> words = text.Split(separators, StringSplitOptions.RemoveEmptyEntries).ToList();

//lista delle parole da escludere dal conteggio, le cosiddette stopwords, ad esempio congiunzioni, articoli e preposizioni
List<string> stopwords = File.ReadAllLines("StopWords.txt", Encoding.Default).ToList();

//Rimuove dalla lista le stopwords
//Non è possibili utilizzare Except perché fa una DISTINCT e annulla le frequenze
//Ho trovato molti forum in cui si chiede come utilizzare Contains in modo case insensitive
//O la documentazione è poco chiara o quei post si riferiscono a una versione di .NET antica
//La soluzione è semplice: utilizzare StringComparer
words.RemoveAll(item => stopwords.Contains(item, StringComparer.OrdinalIgnoreCase));

//Infine LINQ per contare le frequenze e presentarle in ordine discendente
var frequencies = words.GroupBy(n => n).Select(n => new { Value = n.Key, Count = n.Count() }).OrderByDescending(a => a.Count);

martedì 23 maggio 2017

Come convertire un file .wav (o un audio qualsiasi) in un filmato .mp4 o un altro formato video

A cosa serve convertire un audio in un filmato?
Non ho trovato altre motivazioni se non caricare un file audio su YouTube.
Ci sono applicazioni desktop e web che già fanno questa conversione, ma se si deve farlo a riga di comando le API di Windows sono di grande aiuto
Ecco il codice di una applicazione console che usa l'oggetto MediaComposition

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Windows.Media.Editing;
using Windows.Media.MediaProperties;
using Windows.Media.Transcoding;
using Windows.Storage;


namespace Audio2Video
{
class Program
{
static private string filePath;

static void Main(string[] args)
{

if (args.Length != 1)
{
Console.WriteLine("Usage: Audio2Video ");
return;
}

filePath = args[0];
if (!File.Exists(filePath))
{
Console.WriteLine("The file {0} doesn't exist", filePath);
return;
}

Audio2Video().GetAwaiter().GetResult();

}

static async Task Audio2Video()
{
MediaComposition composition = new MediaComposition();

StorageFile inputFile = await StorageFile.GetFileFromPathAsync(filePath);
var audioproperties = await inputFile.Properties.GetMusicPropertiesAsync();
string video = Path.ChangeExtension(filePath, ".wmv");
File.Create(video).Dispose();
StorageFile outputFile = await StorageFile.GetFileFromPathAsync(video);

var backgroundTrack = await BackgroundAudioTrack.CreateFromFileAsync(inputFile);
composition.BackgroundAudioTracks.Add(backgroundTrack);

var clip = MediaClip.CreateFromColor(Windows.UI.Color.FromArgb(0,0,0,0), audioproperties.Duration);
composition.Clips.Add(clip);

var profile = MediaEncodingProfile.CreateWmv(VideoEncodingQuality.Qvga);

// Call RenderToFileAsync
var saveOperation = await composition.RenderToFileAsync(outputFile, MediaTrimmingPreference.Fast, profile);

}
}
}

lunedì 25 luglio 2016

Barbarie nel traffico

New Entries
- In una grande città deserta nel weekend di Ferragosto parcheggiare in divieto di sosta per non fare cinque metri in più
- Città deserta, un solo pedone e una sola auto all'orizzonte. L'auto inchioda per non investire il pedone sulle strisce. Segue discussione che blocca le poche macchine circolanti.

Questa mattina tutte a me:
  1. parcheggiare in doppia fila davanti alla mia macchina
  2. svuotare al semaforo il portacenere dal finestrino
  3. impegnare l'area di intersezione di un incrocio anche quando la circolazione è bloccata (effetto tappo)
  4. parcheggiare in doppia fila all'altezza di un'altra macchina in doppia fila in direzione opposta (effetto imbuto)
  5. procedere ad andatura lentissima al centro della strada e infine passare col giallo quasi rosso
  6. guidare col telefono in mano senza lasciar intendere le traiettorie che si intraprenderanno

domenica 29 maggio 2016

Dettatura in italiano con Cortana

Sebbene quella del riconoscimento vocale sia ormai una tecnologia mainstream, il suo utilizzo è ancora piuttosto scarso a causa di un limite culturale o, più probabilmente, per la mancanza di interfacce vocali ben fatte.
Android e Apple Ios hanno i propri sistemi di dettatura integrati così come Windows, ma fino a Windows 7 l'unico modo per dettare in Italiano con i sistemi operativi Microsoft era installare un software commerciale come Dragon NaturallySpeaking.
Con Cortana e Windows 10 siamo passati alla seconda generazione dei motori di riconoscimento vocale, grazie all'utilizzo di modelli basati sulle reti neurali profonde (DNN).
Microsoft ha reso disponibile il riconoscimento vocale in decine di lingue, ma mancano le applicazioni che lo utilizzano tant'è che a oggi è possibile solamente dettare degli SMS con Windows phone oppure rivolgere delle domande a Cortana. Dettare delle email o un documento in Word è possibile in potenza ma di fatto manca ancora l'integrazione con Cortana.
Eppure le API ci sono. Basta avere Windows 10 e un collegamento a internet perché Cortana trascriva la nostra voce in tempo reale.
Le API di Cortana sono API WinRT, cioè pensate per le App Windows Store ma, esattamente come descritto nel post per le API OCR, è possibile utilizzarle in una normale applicazione desktop.
Qui un semplice progetto WPF che integra le API Windows.Media.SpeechRecognition con cui potrete giudicare l'accuratezza di Cortana.
Richiede Windows 10, l'accesso a Internet e l'input audio microfonico.
Quando terminate di parlare premete il pulsante Stop altrimenti il sistema produrrà un Timeout.
E qui l'esempio ufficiale di Microsoft

Update 23/06/2017: addin Office per la dettatura

martedì 29 marzo 2016

Log Tail in Windows

Domandandomi se ci fosse un comando simile a tail -f in Windows mi sono imbattuto in questo comando PowerShell:

Get-Content myfile.log -Wait

Proprio ora a Build 2016 hanno annunciato una shell bash nativa per Windows 10. Straordinario