Como crear una cuenta de gmail para su hijo de forma segura de acuerdo con la legalidad


Ahora que su hijo comienza a usar su primer dispositivo Android  o simplemente necesita una cuenta de correo  electrónico robusta  y confiable  la aplicación Family Link de Google puede ayudar a establecer ciertas reglas digitales básicas pues de hecho se puede crear una cuenta de Google para él similar a la suya , y además gestionar sus aplicaciones, supervisar el tiempo que pasa delante de la pantalla o bloquear de forma remota su dispositivo, entre otras opciones.

En el caso de que requiera supervisar la tableta o el terminal  para padres, madres o tutores pueden ejecutar Family Link en dispositivos Android 4.4 (Kit Kat) o versiones posteriores, y en dispositivos iPhone con iOS 9 o versiones posteriores. Sin  embargo para los niños ,estos  pueden ejecutar Family Link en dispositivos Android 7.0 (Nougat) o versiones posteriores aunque . Es posible que los dispositivos con Android 5.0 y 6.0 (Lollipop y Marshmallow) también puedan ejecutar Family Link.

Con esta app  se puede por tanto:

  • Gestionar las aplicaciones que puede utilizar si hijo de  modo que tecibirá una notificación en su dispositivo que le permitira autorizar o bloquear las aplicaciones que su hijo quiere descargar de Google Play Store.
  • Supervisar el tiempo de pantalla limitando el tiempo de uso del dispositivo, definiendo una hora de acostarse y pudiendo comprobar con qué frecuencia usa su hijo sus aplicaciones favoritas.
  • Bloquear el dispositivo de su hijo de forma remota de modo qeu permite bloquear el dispositivo de su hijo u ocultar determinadas aplicaciones cuando sea el momento de jugar, estudiar o dormir.

 

En el caso de que quiera crear una cuenta de gmail, también puedes crear una cuenta de Google para su hijo menor de 13 años o la edad aplicable en tu país, y gestionarla con Family Link. Con las cuentas de Google, los niños pueden acceder a productos de Google, como la Búsqueda, Chrome ,y  Gmail.

Cuando su hijo cumpla 16 años (o la edad que corresponda según la legislación vigente en tu jurisdicción), podrá decidir si quiere cambiar a una cuenta de Google normal. Antes de esa fecha, el padre, la madre o el tutor recibirán un correo electrónico en el que se les notificará que su hijo podrá hacerse cargo de su cuenta el día de su cumpleaños, por lo que ya no podrán seguir gestionándola. El día que cumpla 16 años, el niño podrá elegir si quiere gestionar su propia cuenta de Google o dejar que su padre, madre o tutor sigan haciéndolo.

 

 

Pasos para crear una cuenta de gmail para su hijo

Esta es la url  para crear una nueva cuenta de gmail https://accounts.google.com/signup/v2/webcreateaccount?hl=es-419&flowName=GlifWebSignIn&flowEntry=SignUp

A continuación no saldrá el formulario  para que ingresemos el nombre de la nueva cuenta  y su contraseña

crear.PNG

Rellenados esos campos, si la cuenta no existe aun en los servidores de g-mail  , nos permitirá  dar  a “siguiente” para continuar con el proceso, ,   donde ahora nos pedirá un teléfono (opcional) , la fecha real de nacimiento  y el genero ( opcional)

Creo que en este caso deberíamos ser honestos  y contestar con la fecha real

preuebceilla

Ahora , una vez detectada la edad del menor precisamente nos saltara la vinculación a otra cuenta de gmail de su tutor.

vincular

Una vez pulsemos siguiente   tendremos que introducir nuestra cuenta de correo  vinculada a la cuenta de google ( es decir nuestra cuenta de gmail)

A continuación nos pedirá la clave  de nuestra cuenta de google y si es correcta  ya nos aparecerá información sobre la gestión de la cuenta:

cverifiacion1.png

Le daremos a siguiente, y  nos aparecerá el consentimiento de unir la cuenta del menor a la cuenta el grupo familiar

unira

Como administrador de un grupo familiar en Google, sera el único miembro que puede realizar acciones como las siguientes:

  • Agregar o quitar miembros del grupo familiar
  • Borras el grupo familiar
  • Suscríbirse a los servicios familiares de Google o cancelar la suscripción

Ahora  simplemente daremos Aceptar y  hecho esto  nos repetirá la información para que lo verifiquemos que todo es correcto:

confrimacion.png

Ahora viene el tema  problemático  de la cuenta

previatraejeta.png

Ahora  nos da el texto legal explicando el  consentimiento parental de aviso de divulgación de Family Link para padres

Estas son las primerlas lineas:

divulgacion

Es interesante  marcar  en un principio las condiciones mas restrictivas , es decir:

  • No guardar el “Historial de búsqueda” de YouTube de mi hijo en su cuenta de Google
  • No guardar el “Historial de reproducciones” de YouTube de mi hijo en su cuenta de Google
  • No guardar la “Actividad web y de aplicaciones” de mi hijo en su cuenta de Google

noguardar.PNG

Una vez cumplimentado viene el aspecto mas delicado,pues si quiere crear una cuenta de Google para su hijo, debemos dar el consentimiento parental, mediante una tarjeta de crédito ( Y NO HAY MODO DE SALTARSE ESTE PASO)

Aseguran que no nos cobraran nada pues  la emplearan para generar una autorización temporal en la tarjeta con la que verificaremos que es válida la cual en la mayoría de los casos, las autorizaciones temporales desaparecen de la cuenta en un plazo de 48 horas, es decir es un método por el que quieren asegurarse que somos las personas que decimos ser

Nos pedirá  por tanto una tarjeta  bancaria  (en caso de no tener registrada ninguna)   y  en caso de tenerla registrado  el CVV de la tarjeta

Este código aparece en las tarjetas de crédito, de débito y en las tarjetas prepago cuando se recargan. El CVV se compone de tres dígitos en las tarjetas Visa y MasterCard que aparecen impresos en la banda de la firma, situado en el reverso de la tarjeta.

Por cierto las tarjetas de prepago o   virtuales ( incluso sin saldo) son admitidas  ,

visa

Comprobada la validez de la tarjeta, ya solo queda aceptar

creaste.png

Ya ha terminado el  proceso,  de modo que si va a su correo de gmail podrá comprobar qeu se ha registrado la cuenta de su hijo correctamente.

Solo una cuestión mas ,para que su hijo pueda comprobar su correo , una vez ingrese la cuenta del menor , gmail le pedirá al responsable de la cuenta de google family que también introduzca  su contraseña y ya podrá ver el menor ver su correo el cual obviamente estará protegido  por google dada la casuistica particular

 

Mas información en  https://myaccount.google.com/?pli=1&nlr=1

 

 

Anuncios

Como eliminar protección de escritura en una unidad extraible USB


Después de haber trabajado con versiones Linux utilizando su memoria flash sobrescrita o con varias particiones, es posible que desee volver a una partición única (es decir restaurar la unidad flash a su estado original) para que pueda volver a leerse por todas los ordenadores .Asimismo es relativamente habitual cuando se comparten unidades USB entre sistemas Linux  como Lubuntu   y Windows  terminar dejando estas unidades  inaccesibles.Asimismo  incluso sin haber insertado la unidad en un equipo Linux   puedea que tampoco deje de responder

Casi siempre la unidad extraible USB    o las propias trajestas SD o micro-sd  tanto al conectarlas a un equipo Windows como un equipo Linux o Windows  , no permiten su formateo  desde el propio interfaz, respondiendo del mismo modo:

  • Error de Protección de escritura(Read-only)
  • Introduzca una unidad extraible

Hay una herramienta  para entorno Windows von suerte nos puede ser muy útil para Restaurar una unidad flash utilizando HP USB Format Tool , pues  como se  ve en la pantalla   es bastante intuitiva su modo de funcionamiento:

hpformat.PNG

No obstante como se puede apreciar en la imagen , no siempre podrá resolver el problema , así que antes de tirar la toalla   puede probar  las tres siguientes herramientas:

 

 Método manual a través de Diskpart – Windows

Diskpart es una utilidad de línea de comandos que permite administrar discos. Algunos comandos sólo pueden ser accedidos a través de Diskpart y no mediante el “Administrador de discos” de Window .

Al estar integrada con Windows , su uso es bastante sencillo como vamos a ver;

  1. Ejecute desde el interfaz de Cortana  cmd.exe
  2. Escriba Diskpart y presione Enter
  3. Se abrira  una nueva ventana ademas del la interfaz  comandos
  4. Escriba List Disk y presione Enter. Observe que aparece un numero junto a la palabra “Disco”
  5. Escriba Seleccione Disco X donde X es el número de disco de su unidad USB (en el ejemplo x=1 ) y presione Intro.
  6. Escriba Clean (Limpiar)  y presione Entrar
  7. Escriba Create Partition Primary y presione Enter
  8. Escriba Active y presione Entrar
  9. Escriba Format fs = Fat32 Quick y presione Entrar
  10. Escriba Salir y presione Entrar

diskpart

Aternativamente si Diskpart   no ha servido , los usuarios de Windows pueden usar la herramienta  BOOTICE:

  1. Descargue , extraiga y ejecute la herramienta BOOTICE de Pauly
  2.  Seleccione su unidad flash USB de la lista, (2) Haga clic en Parts Manage( Administrar partes )
  3.  Haga clic en Re-Partitioning ( Reparticionar )
  4.  En Modo disco, elija USB-FDD , USB-HDD , o modo USB-ZIP . Uso USB-HDD ya que funciona con cada BIOS que uso. >(2) Haga clic en Aceptar

 

 SdFormatter :

Los usuarios de Windows y / o Mac OS pueden usar la herramienta SD Formatter para reformatear y restaurar una unidad SD o USB  .Este método no siempre es eficaz para unidades USB pero bastante fiable para SD   así que merece  la pena intentarlo

sdfor

Para aquellos que prefieran   Linux, esta tarea se puede realizar  a través de  linea de comandos ,pero debemos advertir querido lector que si no le ha respondido los métodos anteriores tampoco probablemente le   funcione ,pero si tiene un equipo Linux ( por ejemplo con Lubuntu)  ,tal  vez merzca la pena intentarlo

Primero, debemos eliminar las viejas particiones que permanecen en la llave USB.

    1. Vaya a la consola del sistema
    2. Ejecute sudo su
    3. Escriba la contraseña del administrador
    4. Escriba fdisk -l y anote la letra de su unidad USB.
    5. Escriba fdisk / dev / sd x (reemplazando x con la letra de su unidad)1 para seleccionar la primera partición y presione enter
    6. Escriba d para proceder a eliminar una partición
    7. Escriba d para proceder a eliminar otra partición (fdisk debería seleccionar automáticamente la segunda partición)

Luego, necesitamos crear la nueva partición.

  1. Escriba n para crear una nueva partición
  2. Escriba p para hacer que esta partición sea primaria y presione enter .1 para hacer que esta sea la primera partición y luego presione enter 
  3. Presione enter para aceptar el primer cilindro predeterminado
  4. Presione enter nuevamente para aceptar el último cilindro predeterminado
  5. Escriba w para escribir la nueva información de partición en la llave USB
  6. Escriba umount / dev / sd x 1 (reemplazando x con la letra de su unidad)

El último paso es crear el sistema de archivos .

  1. Escriba mkfs.vfat -F 32 / dev / sd x 1 (reemplazando x con la letra de la unidad de memoria USB)

Eso es todo, ahora deberías tener una llave USB restaurada con una sola partición 32 que se deberia poder leer desde cualquier ordenador

 

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

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