Como enviar correos con adjuntos desde Linux desde linea de comandos


Es frecuente   en el manejo de maquinas Linux  usar muchos scripts en bash o c-shell para automatizar tareas  de una forma sencilla, dado  que al contrario de lo que muchas personas piensan,   shell script (o c-shell)  son  bastantes potentes  a la hora de manipular información .

Ante la cuestión de cómo enviar un correo electrónico desde linea de comandos  o desde un script , incluso  con archivos adjuntos desde una máquina Linux ,    lo primero   que pensamos es usar  la utilidad  mailx la cual mejora en muchos aspectos a la utilidad mail de viejos sistemas

La sintaxis básica para enviar correos electrónicos desde una máquina Linux mediante el comando mailx se muestra a continuación:

mailx -vvv -s   $asunto -r   $from  -S   $smtp     $destino

Como vemos , podemos   observar  varios parámetros en la  línea  anterior;

  • -vvv = Verbosity.
  • -s = especifica el asunto (subject).
  • -r = especificar el origen del Email.
  • -S = especifica el  smtp server.

Y lo ideal es usar variables:

  • $asunto: almacenamos el asunto ( subject ) del correo
  • $from : almacenamos el usuario que envía el correo
  • $smtp : almacenamos el servidor de correo
  • $destino : almacenamos  la dirección de correo destinatario  ( pueden poner sucesivas separando con espacios estas)

El comando anterior se puede complementar añadiendo   un cuerpo al contenido del correo  gracias al comando echo redirigiendo con el pipe (|)  hacia mailx

 echo  $cuerpo  | mailx -vvv -s   $asunto -r   $from  -S   $smtp     $destino

Dónde  $cuerpo  es  una variable que almacena el cuerpo del  email

person using macbook pro on brown wooden desk

Photo by rawpixel.com on Pexels.com

Es importante destacar que podemos obviar el servidor  stmp server si está configurado en la máquina así  como el origen del correo obvio , quedando su uso habitual tal como sigue:

 echo  $cuerpo  | mailx  -s   $asunto  -S     $destino1  $destino2  $destino3

Como se aprecia,   se  añade   un cuerpo al contenido del correo  gracias al comando echo redirigiendo con el pipe (|)  hacia mailx y se usan varias variables:

  • $cuerpo  es  una variable que almacena el cuerpo del  email
  • $asunto: almacenamos el asunto ( subject ) del correo
  • $smtp : almacenamos el servidor de correo
  • $destino1 : almacenamos  la dirección de correo destinatario
  • $destino2 : almacenamos  la dirección de correo destinatario
  • $destino3 : almacenamos  la dirección de correo destinatario

Anexando  adjuntos

Si   la versión de mailx que esta usando está por encima  de 12.x,e puede usar el nuevo interruptor adjunto (-a) en mailx para enviar archivos adjuntos con el correo ,  lo cual es una opción más simple  que el comando uuencode.

Como ejemplo mandar un fichero  a un destinatario, es muy sencillo usando el siguiente comando:

mailx -a $file  -s  $asunto  $destino1

En l comando anterior  se usan estas variables :

  • $asunto: almacenamos el asunto ( subject ) del correo
  • $destino1 : almacenamos  la dirección de correo destinatario
  • $file: ruta directa cal fichero a  anexar

El comando anterior imprimirá una nueva línea en blanco en el cuerpo del mensaje  aunque puede escribir el cuerpo del mensaje  presionar [ctrl] + [d] para enviar, lo cual  adjuntará el archivo al correo electrónico saliente correctamente con el Content-Type y encabezados  apropiados.

Para hacer esto más “scriptable”, puede enviar el mensaje sin un cuerpo con el siguiente comando:

mailx -a $file  -s  $asunto  $destino1< /dev/null

Para enviar correos con un cuerpo de mensaje, reemplace / dev / null en el comando anterior con su archivo de cuerpo de mensaje.

mailx -a $file  -s  $asunto  $destino1<   $cuerpo

Donde $cuerpo  es  una variable que almacena el cuerpo del  email

En esta  versión de mailx, los encabezados que se usan en el correo electrónico saliente cambian de:

From:
Date:
To:
Subject:

A la forma siguiente:

From:
Date:
To:
Subject:
User-Agent:
MIME-Version:
Content-Type:
Content-Transfer-Encoding:

Si la versión de mailx está por debajo de 12.x, puede usarse el comando uuencode para enviar correos con archivos adjuntos.

El comando uuencode  se utiliza para codificar un archivo binario.De forma predeterminada, uuencode tiene entrada desde la entrada estándar y escribe en la salida estándar como se muestra a continuación ( esa es la razón por la que se repite el nombre del fichero) utilizando  por defecto el formato de codificación estándar de UU.

 uuencode  $fichero $fichero | mailx -s $asunto  $destino

Usando el formato anterior ,como se aprecia, se  añade   un cuerpo al contenido del correo  gracias al comando echo redirigiendo con el pipe (|)  hacia mailx  , de forma similar a añadir un cuerpo al  correo ,  pero esta vez estamos anexamos un fichero previamente codificado con uuencode

Las variables usadas:

  • $asunto: almacenamos el asunto ( subject ) del correo
  • $destino : almacenamos  la dirección de correo destinatario
  • $fichero : almacenamos  la ruta completa del fichero a adjuntar
  •  $fichero : almacenamos  la misma  ruta completa del fichero a adjuntar ( en efecto se repite y no es un error)

Por cierto, en caso de necesitar adjuntar varios ficheros, puede usar esta receta:

uuencode $fichero1 $fichero1  >/tmp/out.mail

uuencode $fichero2 $fichero2  >/tmp/out.mail

cat email-body.txt >>/tmp/out.mail

Y ahora ya si podemos  enviar el correo:

mailx -s $asunto  $destino </tmp/out.mail

high angle view of paper against white background

Photo by Pixabay on Pexels.com

Correos con anexos y cuerpo

La sintaxis  para enviar correos electrónicos desde una máquina Linux mediante el comando mailx  puede tener problemas a la hora de incluir  además de anexo un cuerpo  en el mensaje, por lo que podemos usar en su lugar el comando mutt usando la siguiente sintaxis:

echo $body | mutt -s $asunto -a $fichero  $destino1  $destino2 $destino3

Como vemos , podemos   observar  varios parámetros en la  línea  anterior;

  • -s = especifica el asunto (subject).
  • -a = especifica el nombre del fichero con la ruta completa

Y como en  los ejemplos anteriores , lo ideal es usar variables:

  • $asunto: almacenamos el asunto ( subject ) del correo
  • $destino1 : almacenamos  la dirección de correo destinatario
  • $destino2 : almacenamos  la dirección de correo destinatario
  • $destino3 : almacenamos  la dirección de correo destinatario
  • $body : almacenamos el cuerpo del correo
Anuncios

Sistema de detección de carril con opencv


Kemal Ficici     nos demuestra  con su proyecto escrito en  python,  que por cierto  ha publicado con su código completo en  github,   como es posible usando la librería  OpenCv    construir un detector de carril   que  incluso  maneja carriles con  curvas.

A pesar del gran avance , sin embargo el autor  reconoce  que la salida de su sistema  todavía se ve afectada por sombras y drásticos cambios en la textura de la carretera  lo cual invalida en gran parte su resultado ,  lo cual  le hace  pensar en futuras actualizaciones de su proyecto  haciendo  uso de técnicas de aprendizaje automático para llegar a desarrollar un sistema de detección de vehículo e increíblemente robusto carril.

En el siguiente video podemos ver el resultado de su trabajo:

En cualquier escenario de conducción, las líneas de carril son un componente esencial de lo que indica el flujo de tráfico y donde se debe conducir un vehículo  así  que también es un buen punto de partida en el desarrollo de  niveles de automatismos de ayuda a la conducción ( Sistemas ADAS).
En un proyecto anterior de detección de carril  Kemal  había implementado un sistema de detección de carril  que funcionaba decentemente en perfectas condiciones, sin embargo no detectaba curvas carriles con precisión y no era robusta a obstrucciones y sombras, de modo que  esta nueva versión mejora su   primera propuesta puesto que ha implementado  detección de lineas  curvas en los carriles , de modo que   funciona mucho mejor y es más robusto para entornos exigentes.

El sistema de detección de carril ha sido  escrito en Python usando la librería OpenCV y ha seguido resumidamente las siguientes etapas en el  procesamiento de imagen:

  • Corrección de distorsión
  • Deformación de la perspectiva
  • Filtro de Sobel
  • Detección de picos del histograma
  • Búsqueda de ventana deslizante
  • Ajuste de curvas
  • Superposición de carril detectado
  • Aplicar el resultado a  la salida  al vídeo

Respecto al hardware utililizado :

  • Nvidia Jetson TX2×1
  • Raspberry Pi 3 Model B×1

 

 

Corrección de distorsión

Las  lentes de las cámaras distorsionan la luz entrante al  enfocarla en el sensor de la cámara o CCD . Aunque esto es muy útil porque nos permite capturar imágenes de nuestro entorno, a menudo terminan distorsionando la luz ligeramente de forma imprecisa lo cual  puede ofrecernos medidas inexactas en aplicaciones de visión por ordenador . No obstante  fácilmente podemos corregir esta distorsión calibrando la imagen de un objeto conocido ( por ejemplo  tablero de ajedrez asimétrico,)y generando un modelo de distorsión que represente las distorsiones de la lente.

La cámara utilizada en la prueba video  fue utilizada para tomar 20 imágenes de un tablero de ajedrez, que fueron utilizados para generar el modelo de distorsión.El autor comenzó por convertir la imagen a escala de grises y  entonces aplico la  función cv2.findChessboardCorners .Como sabemos que este tablero de ajedrez es un objeto tridimensional  con líneas rectas exclusivamente podemos aplicar algunas transformaciones a las esquinas detectadas para alinearlos correctamente utilizando cv2.CalibrateCamera()  obteniendo así  los coeficientes de distorsión y la matriz de cámara  de modo que  así  ya estaba calibrada la cámara

Realizado el proceso anterior se puede utilizar  cv2.undistort()  para corregir el resto de sus datos de entrada.

Como demostración en la imagen se puede ver la diferencia entre la imagen original del tablero de ajedrez y la imagen corregida a continuación:

ajedrez

Aquí está el código exacto que usó el autor para esto:

def undistort_img():
    # Prepare object points 0,0,0 ... 8,5,0
    obj_pts = np.zeros((6*9,3), np.float32)
    obj_pts[:,:2] = np.mgrid[0:9, 0:6].T.reshape(-1,2)
    # Stores all object points & img points from all images
    objpoints = []
    imgpoints = []
    # Get directory for all calibration images
    images = glob.glob('camera_cal/*.jpg')
    for indx, fname in enumerate(images):
        img = cv2.imread(fname)
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        ret, corners = cv2.findChessboardCorners(gray, (9,6), None)
        if ret == True:
            objpoints.append(obj_pts)
            imgpoints.append(corners)
    # Test undistortion on img
    img_size = (img.shape[1], img.shape[0])
    # Calibrate camera
    ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, img_size, None,None)
    dst = cv2.undistort(img, mtx, dist, None, mtx)
    # Save camera calibration for later use
    dist_pickle = {}
    dist_pickle['mtx'] = mtx
    dist_pickle['dist'] = dist
    pickle.dump( dist_pickle, open('camera_cal/cal_pickle.p', 'wb') )
def undistort(img, cal_dir='camera_cal/cal_pickle.p'):
    #cv2.imwrite('camera_cal/test_cal.jpg', dst)
    with open(cal_dir, mode='rb') as f:
        file = pickle.load(f)    mtx = file['mtx']
    dist = file['dist']
    dst = cv2.undistort(img, mtx, dist, None, mtx)
    return dst
undistort_img()
img = cv2.imread('camera_cal/calibration1.jpg')
dst = undistort(img) # Undistorted image

Y ahora podemos ver  la corrección de distorsión aplicada a una imagen de la carretera.

imagencorregida.png

Solo se puede notar  diferencias leves, pero esto como veremos puede tener un impacto enorme en el tratamiento de la imagen.

Deformación de la perspectiva

La detección de carriles con trazados curvas  en espacios de la cámara espacio no es uan tarea  fácil asi que la idea es  conseguir una vista de pájaro de las pistas , lo cual se e puede hacer aplicando una transformación de perspectiva en la imagen. Aquí es lo que parece:

carril

Como vemos nos es nada espectacular debido a que el carril esta sobre una superficie plana en 2D, asi  que podemos encajar un polinomio que puede representar fielmente el carril en el espacio del carril

Puede aplicar estas transformaciones a cualquier imagen usando la función cv2.getPerspectiveTransform()  para obtener la matriz de transformación, y  aplicar la función cv2.warpPerspective() a una imagen.

Aquí está el código que uso el autor para ello:

def perspective_warp(img,
                     dst_size=(1280,720),
                     src=np.float32([(0.43,0.65),(0.58,0.65),(0.1,1),(1,1)]),
                     dst=np.float32([(0,0), (1, 0), (0,1), (1,1)])):
    img_size = np.float32([(img.shape[1],img.shape[0])])
    src = src* img_size
    # For destination points, I'm arbitrarily choosing some points to be
    # a nice fit for displaying our warped result
    # again, not exact, but close enough for our purposes
    dst = dst * np.float32(dst_size)
    # Given src and dst points, calculate the perspective transform matrix
    M = cv2.getPerspectiveTransform(src, dst)
    # Warp the image using OpenCV warpPerspective()
    warped = cv2.warpPerspective(img, M, dst_size)
    return warped

Filtro de Sobel

En otras versiones una opción era filtrar las líneas de carril con el color peor sin embargo, esto no siempre es la mejor opción. Si el camino utiliza luz de color concreta en lugar de asfalto, el camino pasa fácilmente a través del filtro de color, y esta la percibirá como una línea de carril blanco, pero  eso no es correcto.

En su lugar, podemos utilizar un método similar al detector de borde, esta vez para filtrar hacia fuera de la carretera. Las líneas de carril suelen tienen un alto contraste en  la carretera, por lo que podemos utilizar esta peculiaridad para nuestro beneficio. La funcion detector de borde  Canny utilizado anteriormente  hace uso de Operador de Sobel , para obtener el gradiente de una función de la imagen. La documentación de OpenCV tiene una fantástica explicación sobre cómo funciona asi que utilizaremos esto para detectar zonas de alto contraste para las marcas de carril filtro e ignorar el resto del camino .

Todavía utilizaremos el espacio de color HLS nuevamente, esta vez para detectar cambios en la saturación y la ligereza. Los operadores de sobel se aplican a estos dos canales, y extraemos el gradiente con respecto al eje x y añadiremos los píxeles que pasan nuestro umbral de degradado a una matriz binaria que representa a los píxeles de nuestra imagen. Aquí está como se ve en cámara espacio y lane

blancoynegro.PNG:

Tenga en cuenta que las partes de la imagen que estaban más lejos de la cámara no conserven su calidad muy bien. Debido a las limitaciones de resolución de la cámara, datos de los objetos más lejos son muy borrosos y ruidosos  pero no necesitamos concentrarnos en la imagen, para que podamos utilizar sólo una parte de esta.

Detección de picos del histograma

Ahora aplicaremos un algoritmo especial llamado Sliding Window Algorithm ( algo asi como algoritmo  Desplazamiento de Ventana )para detectar nuestras líneas de carril. Sin embargo, antes de que lo podemos aplicar, debemos determinar un buen punto de partida para el algoritmo pues este funciona bien si comienza en un lugar donde haya píxeles de lineas  presentes, pero ¿cómo podemos detectar la ubicación de estos píxeles de carril en primer lugar?

Estará recibiendo un histograma de la imagen con respecto al eje X. Cada parte del histograma siguiente muestra píxeles blancos en cada columna de la imagen. Entonces tomamos los picos más altos de cada lado de la imagen, uno para cada línea de carril y tendríamos resulto esta parte

Aquí vemos como  el histograma parece, al lado de la imagen binaria:

histograma

Búsqueda de ventana deslizante

Ahora  necesitamos  utilizar el algoritmo de ventana deslizante para distinguir entre los límites del carril de la izquierda y derecha para que podemos caber dos curvas diferentes que representan los límites del carril.

El algoritmo sí mismo es muy simple. A partir de la posición inicial, la primera ventana mide cuántos píxeles se encuentran dentro de la ventana. Si la cantidad de píxeles alcanza un cierto umbral, desplaza la siguiente ventana a la posición lateral media de los píxeles detectados. Si no se detectan los suficientes píxeles, comienza la siguiente ventana en la misma posición lateral.

Esto continúa hasta que las ventanas alcanzan el otro borde de la imagen .Asimismo los píxeles que corresponden a las ventanas reciben un marcador.

En las imágenes de abajo, los píxeles marcados azules representan el carril derecho, y los rojos representan la izquierda:

lineas

Ajuste de curvas

El resto del proyecto es ya mas fácil. Aplicamos la regresión polinomial para los pixeles rojos y azules individualmente usando np.polyfit() , y entonces el detector se hace  sobre todo

Esto es lo que parecen las curvas:

 

Superposición de carril detectado

Ya estamos en la parte final del sistema de detección: la interfaz de usuario. Simplemente creamos una superposición que llena en la parte detectada del carril, y luego  finalmente lo aplicamos al vídeo.

Este es el resultado final

 

 

!Sin duda un resultado  realmente espectacular que puede servir de partida para proyectos  mas ambiciosos!

Mas información en www.hackster.io

 

Como crear musica gracias a machine learning con Raspberry Pi


La tecnología siempre ha desempeñado un papel en la creación de nuevos tipos de sonidos que inspiran a los músicos, desde los sonidos de distorsión hasta los sonidos electrónicos de los sintetizadores,sin embargo gracias a los avances en el aprendizaje automático y las redes neuronales han abierto nuevas posibilidades para la generación de sonido  como los demuestra el  grupo Magenta de Google que es el que ha creado NSynth Super,   basandonase en una Raspberry Pi 3  y utilizando Machine Learning con TensorFlow para explorar nuevos sonidos y melodías a músicos y artistas(TensorFlow es una biblioteca de código abierto para aprendizaje automático a través de un rango de tareas, y desarrollado por Google para satisfacer sus necesidades de sistemas capaces de construir y entrenar redes neuronales para detectar y descifrar patrones y correlaciones, análogos al aprendizaje y razonamiento usados por los humanos).

 

El proyecto es  totalmente abierto y “cualquiera” familiarizado con  la electronica debería podérselo construir en su propia casa o en el taller, aunque esto es la teoría pues en la practica todos los componentes son SMD ,lo cual complica las cosas bastante a la hora de ponerse a soldar los diferentes componentes que  constituyen ese proyecto.

Usando TensorFlow , han   construido herramientas e interfaces que permiten a artistas y músicos utilizar el aprendizaje automático en su trabajo. El algoritmo NSynth Super AI usa redes neuronales profundas para investigar el carácter de los sonidos y luego construye nuevos sonidos basados ​​en estas características en lugar de simplemente mezclar los sonidos.

Usando un autoencoder, extrae 16 características temporales definitorias de cada entrada. Estas características se interpolan linealmente para crear nuevas incrustaciones (representaciones matemáticas de cada sonido).

Estas nuevas incrustaciones se decodifican en nuevos sonidos, que tienen las cualidades acústicas de ambas entradas (se pueden encontrar más detalles en la página NSynth: Neural Audio Synthesis ).

 


Open NSynth Super luego toma el audio generado y proporciona una interfaz física o instrumento con:

    • Entrada MIDI para conectar un teclado de piano, un secuenciador o una computadora, etc.
    • Cuatro codificadores giratorios utilizados para asignar instrumentos a las esquinas del dispositivo
    • Pantalla OLED para el estado del instrumento y la información de control
    • Controles finos para:
      • La posición estableciendo la posición inicial de la onda.
      • Attack establece el tiempo necesario para el inicio inicial del nivel.
      • Decay establece el tiempo necesario para el posterior agotamiento.
      • Sustain establece el nivel durante la secuencia principal del sonido.
      • Release establece el tiempo necesario para que el nivel disminuya desde el nivel de sostenido a cero.
      • El volumen establece el volumen de salida.
    • Interfaz táctil para explorar las posiciones entre los sonidos.

Obviamente la Rasbpeberry   es usada  para  administrar las entradas físicas y esto se programa antes del primer uso.

 

 

El equipo publica todos los diseños de hardware y software que son parte de su investigación en curso bajo licencias de código abierto, lo que le permite  que cuaqluiera  que tenga los medios adecuados  puedas construirse  su propio sintetizador usando esta tecnlogia .

 

Utilizando estas herramientas de código abierto, Andrew Black ha producido su propia NSynth Super, mostrada en el video anterior.

La lista de materiales de construcción de Andrew incluye:

    • 1x Raspberry Pi 3 Model B (896-8660)
    • 6x Alps RK09K Series Potentiometers (729-3603)
    • 4x Bourns PEC11R-4315F-N0012 Rotary Encoders
    • 2x Microchip AT42QT2120-XU Touch Controller ICs (899-6707)
    • 1x STMicroelectronics STM32F030K6T6, 32bit ARM Cortex Microcontroller (829-4644)
    • 1x TI PCM5122PW, Audio Converter DAC Dual 32 bit (814-3732)
    • 1x Adafruit 1.3″ OLED display

 

El equipo de Magenta también proporciona archivos de Gerber para que se  pueda fabricar la placa de circuito impreso , de modo que una vez se haya fabricado, se pueda comenzar con el soldado de componetes  em la PCB (incluye una tabla de contenidos para agregar componentes)

Como adelantabmos ,laa construcción no es trea fácil: requiere habilidades de soldadura o acceso a alguien que pueda ensamblar PCB pues la mayoría de los componentes son SMT de modo que el paso de componentes se reduce a alrededor de 0,5 mm, que aun se se pueden soldar a mano si se tiene cuidado. Sin embargo, aunque algunos podrían argumentar que no es absolutamente necesario, es aconsejable tener un microscopio estéreo y una estación de aire caliente disponibles también. ¡Y no hace falta decir que también debería tener suficiente flujo y mecha de soldadura!

Para probar  este diseño , descargamos un archivo MIDI de Internet y luego lo reproducimos a través de una computadora portátil Linux y una interfaz USB / MIDI usando el comando “aplaymidi”. Efectivamente, el NSynth Superarrncara  y  ya podremos asignar instrumentos a cada esquina y luego interpolar a través de la maravilla del aprendizaje automático para crear nuevas, hasta ahora desconocidas, 

 

Puede echar un vistazo a la publicación de blog de Andrew y al informe oficial de NSynth GitHub para ver si está preparado para el desafío.

Aquí información útil para montarlo:https://www.rs-online.com/designspark/building-the-google-open-nsynth-super

 

Error 400 en Google translate


En este breve post vamos a ver un típico error que puede  ocurrir de forma sistemática con el uso del servicio de traducción de Google : el   Error 400 obtenido  al intentar traducir una pagina desde el popular servicio del traductor de Google (https://translate.google.com/)

El aspecto del error es muy escueto, tal  como podemos ver  en la imagen de mas abajo , y la verdad es que  no da demasiadas   pistas de su origen y obviamente de su solución:

 

error de google

La traducción seria la siguiente

400. Eso en en error .

Su cliente ha emitido una solicitud con formato incorrecto o ilegal. Eso es todo lo que sabemos.

Por  extraño que pueda parecer no es un problema puntual de servidores  de Google , ni de red ,  ni tampoco generalizado  y en  efecto  como vamos   a  ver, no  se debe  a un mal funcionamiento  del sistema operativo,   sino   mas bien inherente  al  propio navegador ( en este caso Google Chrome) , para  lo cual antes de continuar, es importante que compruebe si desde otro navegador ,idealmente Microsoft Edge  funciona . Abstenerse de probar con  Firefox pus precisamente también con este puede presentar un problema similar

Lo normal es que precisamente desde el navegador  Microsoft Edge accediendo a la pagina de Google Translate  no ocurra lo mismo , lo cual confirmara que el error se debe a  la configuración del navegador Chrome  y por lo tanto, necesitara realizar un limpieza profunda en Chrome para deshacerse de este problema.

Un primer paso para intentar solucionar el problema es eliminar la cookies para lo cual siga estos pasos:

  1.  Lanze el navegador Chrome de su PC y escriba lo siguiente en la barra de direcciones.
    Chrome://Settings/siteData
  2. Pulsar “Eliminar Todos” .                                                                                                                                        borrar_datos.PNG
  3. Ahora cierre el navegador Google Chrome y vuelva a probar a traducir cualquier pagina desde Google Translate

 

Si con esta medida  ha solucionado el problema !enhorabuena!   y no tiene  que investigar mas. Si no lo  ha solucionado lamentablemente con esa medida,   toca dirigirse a una medida mas drástica de restablecimiento de Chrome , para lo cual  siga los siguientes pasos:

  1.  Haga clic en los puntos del parte superior   , situados al lado de la barra de direcciones  a la derecha  después de abrir el navegador Chrome.
  2. Ir  Configuración y haga clic en él.
  3. Al abrir una nueva pestaña, desplazese hacia abajo y haga clic en avanzado y la página se  expandirá hacia abajo con más opciones.
  4. Hacer scroll hasta abajo del todo
  5. Nos interesa la ultima opción  Recuperar ajustes y borrar
  6. Clicar en Restablecer                                                                                                                                                            
  7. Tenga en cuenta los cambios que se producen al recuperar la configuración pues se recuperan los valores predeterminados de las opciones de configuración que se indican a continuación:
    • El motor de búsqueda predeterminado, que vuelve a ser Google.
    • La página principal y las pestañas.
    • La página Nueva pestaña.
    • Las pestañas que haya fijado. 
    • La configuración de contenido, como permitir que un sitio web muestre ventanas emergentes o utilice tu micrófono.
    • Cookies y datos de sitios web, como artículos de un carrito de compra online.
    • Extensiones y temas

    Solo se recupera la configuración del perfil de Chrome en el que haya iniciado sesión. La nueva configuración se aplica en todos los ordenadores o dispositivos en los que haya iniciado sesión en su perfil activo.

  8. Si esta de acuerdo con lo anterior pulse RESTABLECER
  9. Tras unos minutos puede volver a probar  a traducir cualquier pagina desde Google Translate: ahora ya si debería de volver a funcionar

Facil creacion de un disco de musica para el coche


Tal vez le sorprenda el titulo de este post, pues seguramente no crea que existan aun coches que no incluyan en su equipamiento de audio standard un reproductor de audio con entrada  USB, pero en efecto  existen  y en realidad son un porcentaje muy alto (esta cifra se deduce simplemente haciéndonos eco de la antigüedad del parque  automovilístico).

Si el equipo de audio de su coche no cuenta con  un reproductor  mp3 con entrada USB o SD , en  efecto existen infinidad de soluciones en el mercado de reproductores  MP3 con entrada USB  para coche ( incluso nos hemos hecho eco en este blog mejorando su funcionalidad ). Desgraciadamente casi todas las soluciones de reproductores mp3    con entradas  varias ( USB, SD, Bluetooth  e incluso de audio externa  ) se basan  en modular la salida  de  audio  por   FM , con los problemas  inherentes a las interferencias  y además con un pequeño handicap: no se puede controlar con los mandos del propio  equipo de audio del coche ,   y mucho menos desde los mandos del volante, así   que quizás en estos casos aun merezca la pena de  crear un CD  con nuestras canciones favoritas , equipamiento que si suelen llevar todos los coches incluso  los mas antiguos  .

 

¿Que necesitamos?

Antes de empezar necesitaremos  una grabadora de CD o DVD instalada en su equipo   y por supuesto CD’s virgenes  para hacer las copias.

Si no cuenta con una grabadora de CD o DVD  interna  en su equipo ,  las hay externas  por un precio muy asequible de unos 14€    con conexión USB.

.

 

descarga.jpg

Como ejemplo esta   grabadora de DVD de  nueva generación es muy delgada y lo suficientemente   delgada  para llevarla  a cualquier  parte integrando ademas el cable USB en el dispositivo .

Dispone de USB 3.0,  compatible con entradas USB 2.0 y USB 1.0 hasta un máximo de 5Gbps y tiene la capacidad de corregir errores, disponiendo de tecnología antigolpes y de reducción de ruido.

Lo mejor de todo es que no necesita adaptador a corriente ya que se alimenta por el USB con un bajo consumo de energía y no necesita drivers de instalación, simplemente conectar y usar. Soporta discos:DVD-ROM,CD-ROM,DVD-R,DVD+R,DVD-RW,CD-R, etc.

Asimismo ,para grabar música en CD’s necesitara los ficheros mp3  que puede obtenerlos desde su portal  favorito (google play music, amazon music o incluso spotify premium) .

Una forma sencilla de  obtener  muchos ficheros de audio es por ejemplo extrayendo de sus video favoritos  musicales  de youtube solo el audio

Grabación de un cd de audio

La música en un CD  se  puede  grabar en formato .cda y es posible grabar hasta 80 minutos de música, pero   aún se  puede grabar  si  su reproductor los soporta   en formato MP3 ,pues con este formato pueden caber alrededor de 8 horas de música ( es decir  sobre unas 140 canciones )

Si cuenta con ficheros en  MP3 y quiere grabarlos en un CD para escucharlos en el reproductor de CD de su coche o cualquier reproductor de CD,  lo que seguro siempre funcionara es  grabar estos como CD de audio , lo cual  en tiempo son unos 80 minutos de música.

Para  crear  un CD de audio  lo mejor es  usar el reproductor   Windows Media Player  incluido   en todas las versiones de windows a partir de en Windows 7. Como sugerencia  no se recomienda  usar  software antiguo de grabación (por ejemplo versiones antiguas de nero  Burning Rom  p sw libre como InfraRecorder  )   pues probablemente no le  funcione    correctamentea al 100%  sobre windows  10 ,o con toda probabilidad ,malogre algunos discos

Para  grabar  discos de audio  con WMP puede seguir  estos pasos:

  • Abra el Reproductor de Windows Media (Inicio > Todos los programas > Reproductor de WM).
  • Haga clic en la pestaña “Grabar”.
  • Haga clic en “Opciones de grabación” (flecha debajo de pestaña Sincronizar) y verifique que esté seleccionado “CD de audio”.
  • Arrastre las canciones que quiere grabar desde la Biblioteca del Reproductor de Windows Media al panel “Lista de grabación” (panel de la derecha).
  • Puede modificar el orden de las canciones en la lista de grabación arrastrando las canciones, e incluso eliminarlas haciendo clic derecho y seleccionando “Quitar de la lista”.
  • Una vez todas sus canciones en la lista de grabación, haga clic en “Iniciar grabación”

windows media.png

Grabación de un  CD con ficheros  MP3

El formato MP3 es un formato de archivos de audio comprimido que permite la creación y la transmisión de archivos de sonido de calidad comercial en una fracción  importante de su tamaño anterior  (por ejemplo, un archivo MP3 de 2 o 4 MB podría tener unos 50 MB de tamaño si lo almacena en un archivo WAV).

Si su reproductor de CD  soporta reproducción de ficheros mp3 ( casi todos los reproductores de cd de  automóviles lo soportan  a partir del 2009)  , los ideal ,es  crear un CD con ficheros MP3, pues es posible en el mismo soporte físico de un CD  añadir  muchas  más pistas (más de 100 , idealmente  mas de 140 ) . Incluso algunos  reproductores  soportan  otros formatos de archivos de audio  con mayor compresión  y que también puede copiar en su CD con este mismo procedimiento.

Por tanto ,la cantidad de música que se puede copiar en un sólo disco hace del  formato MP3 el formato perfecto para crear un CD de música para viajar y que puede usar en su automóvil , pues como vamos  a ver, como en el caso anterior   de las pistas de audio , tampoco hace falta un sw especia,

 

Para copiar sus ficheros mp3 en un CD es muy importante destacar  que el tamaño no debe superar en ningún caso los 700Mb mpues  de superarlo el sw lo rechazara   así que  tenga cuidado con el total del tamaño de  los archivos que selecciona es  siempre ligeramente inferior a esa cantidad .

El proceso es sencillo pues solo debe insertar un CD virgen en su grabadora  de CD’s o DVD    .

Automáticamente aparecerá un subsumen  emergente donde deberá seleccionar  la segunda opción (con un reproductor de CD o DVD ) ,  pues el reproductor del coche necesitara que el disco este cerrado para poderlo reproducir:

grabar un disco

Simplemente pulsaremos en “Siguinte” y se  visualizara el  contenido en el explorador de Windows (estará vacío):

 

discoddd

Ahora  simplemente  arrastre  los ficheros  mp3   a la unidad de CD’s  vacía ( que se ira llenando de forma virtual esta unidad  ) . No olvidad no superar el  máximo de 700MB de ficheros mp3.

discocd.png

Una vez haya arrastrado todos  los ficheros que desea grabar, pulse con el botón derecho sobre la unidad CD/DVD   y seleccione la  opción “Grabar  en  disco”:

grabar en disco.png

En este paso puede  añadir el titulo del disco:

paso1.png

Ahora  tenga cuidado pues   pues podría crear un cd de audio normal a partir de los ficheros mp3 pues tendría que desechar la mayoría de los ficheros que haya seleccionado, así que  lo ideal es si su reproductor de CD lo soporta, que cree directamente un disco de datos ( opción segunda):

grabarcdaudio.png

 

Puede que  supere  la capacidad  pero no se preocupe  pues  el sw le avisara  si supera  la capacidad permitida ,pero en ese caso  tendrá que eliminar algunos ficheros  y repetir el proceso:

problema

Si la capacidad es la correcta, en unos minutos comenzara   la grabación del CD hasta  su conclusión momento en el cual se expulsara automáticamente el CD.

Ya puede llevarse el CD  al reproductor de su coche  pues debería poder disfrutar de su  música favorita sin ningún paso  más

 

 

Como sugerencia  no se recomienda  usar  software antiguo de grabación (por ejemplo versiones antiguas de nero  Burning Rom  o algún w libre como InfraRecorder  )   pues probablemente no le  funcione    correctamente al 100%  sobre windows  10 ,o con toda probabilidad ,malogre algunos discos

 

 

Contador con reconocimiento facial para Raspbery Pi 3


Con una Raspberry Pi se pueden hacer muchas cosas , pero seguramente  se sorprenda que incluso puede utilizar la cámara para experimentar  con reconocimiento facial, labor que ha hecho  DekuNukem utilizando una Raspberry Pi 3, el módulo de la cámara de Raspberry Pi y una pantalla OLED para la visualización de los datos

 El concepto es relativamente simple: la pi-camera toma una foto cada 15 segundos, de modo que  si se encuentra nuestra cara, la cual  previamente habremos cargado, se registra la hora actual. y el tiempo registrado se suma para calcular el  horario laboral exacto todas las semanas mostrándose el resultado en una pantalla OLED.

Para este proyecto  estrictamente como puede deducirse  no es necesario incluir la pantalla OLED  ya que nos  podemos  conectar  a la propia Raspberry Pi  3 para consultar ese dato , pero definitivamente la pantalla extra añade inmediatez y flexibilidad , dejando ver el tiempo diario y semanal de un vistazo sin tener que acceder su frambuesa Pi para ver  los datos.

 

dekuNukem facepunch raspberry pi facial recognition

 

Resumiendo estos son los componentes usados :

  • Raspberry Pi 3 Model B. También podría funcionar en Zero
  • Módulo de cámara Raspberry Pi
  • OPCIONAL : pantalla OLED de 1.3 pulgadas de 128×64. Pantallas de 0.96 pulgadas OLED también funcionan.Que sea  OLED es opcional; Omita los pasos relacionados con la pantalla si se opta por no usar  esta

Modulo de visualización

Se  puede conectar una OLED a la  Pi con el Pi interfaz I2C o SPI. En general, I2C utiliza menos pines  pero es algo más lenta. SPI es mas rápido, pero requiere un numero o de pines del GPIO  extra por lo que esta elección  debe considerarse en función de sus necesidades .

La interfaz I2C es la normal que se use por su mayor sencillez    pero para ‘escritura’ en la pantalla solamente, asi todavía tendrá el marco entero 512 bytes del búfer en el microcontrolador RAM  aunque no se podran  leer datos de lo OLED (aunque I2C es un protocolo bidireccional).

Antes de comenzar el cableado de la  pantalla , en muchas  de estas debe conectarse  una franja de pines que deben soldarse a la placa  OLED , pues no es posible  simplemente hacer las conexiones enrollándolos a las cabeceras

Si su OLED compatible con I2C y SPI, asegúrese de comprobar cómo se configuran los puentes de soldadura para configurar  la interfaz correcta, asi que para comenzar, usted necesitará  dos puentes en la parte posterior de la pantalla OLED de la soldadura. Debe soldarse como ‘cerrado’ para   configurar la pantalla en modo  I2C

 

Para usar la  Raspberry Pi  3 , habilitar I2C antes desde el interfaz  de Raspbian antes de cablearlo

Las conexiones necesarias son las siguientes:

  • Conectar pin 3  de GND   de la  Raspberry Pi  3 , al pin GND de la  pantalla  (cable negro).
  • Conectar  VIN  de la pantalla  al pin 1  Raspberry Pi  3 , de 3.3 voltios (cable rojo).
  • Conectar el terminal Reset de la pantalla al pin pin32 de la  Raspberry Pi  3 ,   (cable azul). Alternativamente puede usar cualquier pin digital libre de GPIO para el pin de reset.
  • Conecte el pin SCL de la pantalla  al pin 5 SCL de la   Raspberry Pi  3 ,  (cable morado).
  • Conectar el pin SDA  de la pantalla al pin 3 SDA de la  Raspberry Pi  3   (cable naranja).

 

 

El módulo de cámara es un complemento personalizado y diseñado para Rasbperry Pi. Se conecta a Raspberry Pi a través de uno de los dos pequeños conectores de la parte superior de la placa. La cámara debe ser  compatible con la última versión de Raspbian, el sistema operativo preferido de Raspberry Pi.

El módulo en sí, es pequeño, en torno a 25 mm x 20 mm x 9 mm. Se conecta a Raspberry Pi  3 mediante un cable plano flexible al conector  de cámara .

Sin título.png

Resto de conexiones

Como dekuNukem explica en el repositorio de GitHub para la construcción del prototipo se puede utilizar una placa de  prototipos para montar  incluso  la pantalla  adhiriendo  esta a la pcb , conectado el conjunto a la Raspberry  Pi  por el GPIO   ,lo cual es  una forma agradable y sencilla de tener  todo el proyecto juntos sin cables sueltos o incluso simplificar  si  se necesita modificarlo.

Puede colocar la cámara y el OLED juntos en una placa perforada que se conecta al bus GPIO  o por supuesto, puede colocarlos en otro lugar o diseñar su propia PCB.

 

Librerias necesarias

Para este proyecto se necesitan las siguientes librerias:

 

Proporcione su foto

El programa necesita una imagen de su rostro para saber cómo se ve. Obtenga una imagen de su cara bien iluminada con un fondo limpio, llamándola por ejemplo  me.jpg y colóquela en la carpeta del software.

La resolución debe ser de alrededor de 400×400, de lo contrario el tiempo de procesamiento va a ser largo. Ya se proporciona un ejemplo, así que simplemente reemplace esta  por el suyo.

Ejecucion del programa

Ejecute python3 detect.py para iniciar la detección de rostros y el registro.
Ejecute python3 display_oled.py para mostrar las estadísticas de tiempo en el OLED.
O si no usa un OLED, ejecute python3 display_text.py para imprimir las estadísticas en el terminal.
Es posible que tenga que expeimentar r con camera.rotation y camera.brightness al principio de detect.py, dependiendo de cómo esté orientada la cámara y de su condición de iluminación. Puede abrir image.jpg para ver la última foto tomada.
El pin de reinicio OLED predeterminado es 17, cámbielo a lo que usa en display_oled.py.

 

 

Esta  incursión en reconocimiento facial  puede  incorporarse  en  otros proyectos de automatización del hogar:  como por ejemplo  una identificación de usuario de Magic Mirror, quizás, o un timbre que reconoce a amigos y familiares.

En todo caso la idea presentada  en su simpleza destaca uan genialidad  pues  nos  da una estadística visual y desatendida de las horas que nos pasamos delante de la pantalla.

 

 

 

Como transcribir voz a texto


Express Scribe es un software profesional de reproductor de audio para PC o Mac diseñado para ayudar a transcribir grabaciones de audio.

Un mecanógrafo puede instalarlo en su ordenador y controlar la reproducción de audio usando un pedal  usb especial  de transcripción o un teclado (con teclas “calientes”). Este software de transcripción también ofrece funciones valiosas para los mecanógrafos, que incluyen reproducción de velocidad variable, control multicanal, reproducción de video, administración de archivos y más.

La versión gratuita es compatible con formatos de audio comunes, incluidos wav, mp3, wma y dct (  aunque siempre puede actualizar a la versión profesional para soporte de formato propietario).

Algunas características del software de transcripción:

  • Reproducción de velocidad variable (no constante)
  • Admite reproducción de audio y video
  • Reproduce la mayoría de los formatos, incluidos los archivos de dictado encriptados. Ver formatos de archivo admitidos
  • Admite pedales USB profesionales para controlar la reproducción. Ver controladores de pedal de pie profesionales compatibles
  • Utiliza ‘teclas rápidas‘ para controlar la reproducción cuando se transcribe a otro software (por ejemplo, Word)
  • Acople grabadores de voz portátiles analógicos y digitales para cargar grabaciones
    Funciona con Microsoft Word y todos los principales procesadores de texto
  • Recibe y carga automáticamente archivos por Internet (FTP), correo electrónico o en una red informática local
  • Automáticamente envía tipeo a quienes dictaron el trabajo
  • Funciona con software de reconocimiento de voz como Dragon Naturally Speaking para convertir automáticamente la voz en texto
  • Permite cargar audio de CD directamente y comenzar a trabajar a medida que se carga el audio
  • Funciona con el expansor de texto FastFox para ingresar frases médicas y legales y frases comunes con atajos de teclado

 

Pasos a seguir  para   probar este software

instalador.PNG

  • Express Scribe puede usar cualquier procesador para el reconocimiento de voz compatible con SAPI (4,0 o 5,0) para ayudarle en la transcripción de grabaciones. Por ejemplo: Dragon Systems NaturallySpeaking, Microsoft Voice o IBM Via Voice (y muchos más)

 

 

.enter image description here

 

  • En caso  de no poder seleccionar el perfil de audio , existe un paquete de audio en español  que puede descargar e  instalar siguiendo el link a continuación RealSpeak TTS engine Spanish (21.7 MB) . Despues de inslarlo  tenemos que configurar el  perfil de audio

reconocimiento de voz.PNG

 

 

  • Una vez se haya configurado Express Scribe para la conversión de voz a texto y cuando cargue un archivo éste será procesado en segundo plano y luego incluirá el texto completo en el cuadro de notas. Aunque el equipo sea rápido, esto proceso puede tomar algún tiempo (incluso más tiempo que la propia grabación), por lo que esta función es ideal cuando tiene una lista de trabajos de transcripción pendientes. Sin embargo, debido a que el reconocimiento de voz se ejecuta en segundo plano, puede empezar la transcripción de inmediato.

 

 

No debe entusiasmarse demasiado con la conversión de voz a texto. Probablemente  pasarán a  tiempos antes que las máquinas sean capaces de transcribir con precisión. Por el momento, un procesador muy bien entrenado le ofrecerá alrededor de un 90% de precisión. Creemos que utilizará esta función como una herramienta que le proporcionará un borrador del texto que puede utilizar a una velocidad más rápida y corregir o volver a formatearlo.

El entrenamiento es esencial para obtener una conversión de voz a texto razonable. Debe “entrenar” el procesador para reconocer las voces que van a ser usadas. La función de entrenamiento es administrada por el software para el reconocimiento de voz y no por Express Scribe. Consulte el manual del reconocedor de voz para más información.

Express Scribe coincide automáticamente cada archivo del dictado con un reconocedor de voz entrenado que usa el ID del remitente en Express Dictate (o DialDictate). Este ID se obtiene cuando se registra el software (todos los usuarios no registrados, archivos WAV y grabaciones acopladas se consideran un ID 0). Después que el reconocedor de voz está entrenado para reconocer la voz del usuario, Express Scribe puede configurar que éste se ejecute cada vez que este usuario envíe un archivo. Hágalo desde el menú Opciones -> pestaña ‘conversión de voz’ a texto, en la sección “perfiles específicos de usuario”.

Configuración para conversión de voz en texto

  • Abra el cuadro de diálogo de las Opciones y seleccione la pestaña ‘convertir voz en texto’.
  • Oprimir “habilitar reconocimiento de voz”.
  • .Seleccione el procesador para el reconocimiento de voz desde la lista desplegable. Si no ve ningún procesador en la lista desplegable, entonces no ha instalado el software para el reconocimiento de voz o no es compatible con SAPI.
  • Seleccione un perfil de voz desde la lista desplegable de perfiles predeterminados. Este es el perfil que será usado para cualquier dictado que se reciba de usuarios que no están en la lista de “perfiles específicos de usuario”.
  • Haga que cada usuario entrene el procesador para que puedan ser reconocidos. Lo pueden hacer usando el software para el reconocimiento de voz. Consulte el manual proporcionado con el software de reconocimiento de voz. Con la mayoría de procesadores, los usuarios pueden entrenar el reconocimiento de voz usando otra PC y luego exportar el archivo de entrenamiento al sistema.
  • Por cada usuario que haya completado el entrenamiento, añada el ID de usuario y el perfil de voz a la lista de “perfiles específicos de usuario”. Si son usuarios registrados con Express Dictate o DialDictate, entonces use el ID que obtuvieron al registrar el software. ID 0 de usuario para todos aquellos usuarios no registrados, archivos WAV y grabaciones acopladas.

Nota: Al abrir la pestaña ‘convertir voz en texto’ en las Opciones, o al cambiar el procesador seleccionado, el cuadro de diálogo “recuperando perfiles” puede ser visualizado por algún tiempo.

Cuando se cargue el próximo dictado, Express Scribe ejecutará el procesador de voz en segundo plano. Al finalizar, “pegará” el texto en el cuadro de notas.

Tenga paciencia. El proceso puede tardar algún tiempo (aun más que la propia grabación). Por lo tanto, la función es ideal cuando se tiene una lista de trabajos pendientes. Pero recuerde que puede empezar a transcribir inmediatamente.

Tenga en cuenta que el proceso de conversión de voz a texto sólo se produce cuando se carga primero un dictado. Si ejecuta Express Scribe con un dictado ya cargado el proceso de reconocimiento no se ejecutará.