Python - Python openCV con Sqlite

 
Vista:

Python openCV con Sqlite

Publicado por Arturo (1 intervención) el 01/12/2019 23:10:56
Buenas tardes, estoy realizando un programa que se encargue de capturar los rostros de una persona y almacenarlos en una base de datos sqlite. la idea es que al correr el programa este active la cámara y muestre que identifica el rostro y lo asocia con una placa de auto.

El problema que tengo es al momento de hacer el insert dentro de la base de datos ya que cuando ejecuto elprograma me manda el siguiente error

Traceback (most recent call last):
File "c:/Users/Artur/Desktop/Detector_de_Rostros/DatosRostros.py", line 49, in <module>
insertOrUpdate(Id,name,placa)
File "c:/Users/Artur/Desktop/Detector_de_Rostros/DatosRostros.py", line 39, in insertOrUpdate
conn.execute(cmd)
sqlite3.OperationalError: no such column: Arturo



alguna sugerencia o consejo de como solucionarlo? en seguida dejo mi código
gracias!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import cv2
import numpy as np
import sqlite3
 
 
faceDetect = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
cam = cv2.VideoCapture(0)
 
def insertOrUpdate(Id, Nombres, Placas ):
    conn = sqlite3.connect("USUARIOS.db")
    cmd = "SELECT * FROM Personas WHERE Id = " + str(Id)
    cursor = conn.execute(cmd).fetchall()
    isRecordExist = 0
    for row in cursor:
        isRecordExist = 1
    if(isRecordExist==1):
        cmd  = "UPDATE Personas set Nombres= " + str(Nombres) + "WHERE ID = " + str(Id)
        cmd  = "UPDATE Personas set Placa= " + str(Placas) + "WHERE ID = " + str(Id)
    else:
        cmd = "INSERT INTO personas(Id,Nombres,Placas) VALUES(?,?),(" + str(Id) + "," + str(Nombres) + "," + str(Placas) + ")"
 
    conn.execute(cmd)
 
    conn.commit()
    conn.close()
 
#------------------------------------------------------------------------------------------------
 
Id = input("Ingresa el ID: ")
name = input("Ingresa el nombre: ")
placa = input("Ingresa la placa del auto: ")
insertOrUpdate(Id,name,placa)
sampleNum = 0
while True:
    ret , img = cam.read()
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = faceDetect.detectMultiScale(gray,1.3,5)
    for(x,y,w,h) in faces:
        sampleNum = sampleNum +1
        cv2.imwrite("C:/Users/Artur/Desktop/Detector_de_Rostros/Fotos/" + str(Id) + "." + str(sampleNum) + ".jpg" , gray[y:y+h, x:x+w])
        cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)
        cv2.waitKey(100)
    cv2.imshow("Face",img)
    cv2.waitKey(1)
    if sampleNum > 20:
        break
cam.release()
cv2.destroyAllWindows()
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de José Manuel
Val: 54
Ha disminuido su posición en 2 puestos en Python (en relación al último mes)
Gráfica de Python

Python openCV con Sqlite

Publicado por José Manuel (19 intervenciones) el 02/12/2019 11:16:49
Hola Arturo:

No me cuadra mucho esta línea:
1
20: cmd = "INSERT INTO personas(Id,Nombres,Placas) VALUES(?,?),(" + str(Id) + "," + str(Nombres) + "," + str(Placas) + ")"

Sobre todo la parte referente a VALUES(?, ?). Son tres valores los que tiene que tratar, ¿no es así?

Por otro lado yo pasaría a cmd solamente la consulta INSERT INTO y dejaría la parte de los valores como segundo parámetro de execute:

1
2
3
cmd = "INSERT INTO personas(Id,Nombres,Placas) VALUES(?,?,?)"
datos = (str(Id), str(Nombres), str(Placas))
conn.execute(cmd, datos)

Espero que te sirva, cuéntanos. Un saludo,
https://obelearningservices.com/blog
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar