2017-05-04 2 views
0

J'essaie d'accéder file_name dynamiquement à partir de l'utilisateur, puis le passer à videoCapture(file_name), puis le traiter.cv2.videoCapture (nom de fichier) attribuer un nom de fichier dynamiquement (fermé)

code:

import cv2 
import numpy as np 
import os 
import sqlite3 
import pickle 
from PIL import Image 
import sys 


faceDetect = cv2.CascadeClassifier('haarcascade_frontalface_default.xml'); 
rec = cv2.createLBPHFaceRecognizer(); 


''' 
Dynamically accessing the fileName 

Error seems to be here in the following couple of codes 
Note: i am assigning file_name as <"test.mp4"> 
''' 
file_name = raw_input("Enter file name: ") 
print file_name 


cam = cv2.VideoCapture(file_name) 

while cam.isOpened(): 
    ret,img = cam.read() 

    if ret == True: 
     gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)   
     faces = faceDetect.detectMultiScale(gray,1.3,5); 
     for(x,y,w,h) in faces : 
      cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2) 
      id,conf=rec.predict(gray[y:y+h,x:x+w]) 
      ''' 
      Few lines of code 
      ''' 

     cv2.imshow("Face",img); 
     if (cv2.waitKey(1) == ord('q')): 
      break; 
    else : 
     print ('ret is false') 
     break 
cam.release() 
cv2.destroyAllWindows() 

il montre aucune erreur, mais il n'exécute pas la boucle while(cam.isOpened):. Ai-je raté quelque chose?

+0

si vous hardcode le nom de fichier fonctionne? –

+0

oui. cela fonctionne bien si cam = cv2.VideoCapture (nom_fichier) est remplacé par cam = cv2.VideoCapture ("test.mp4"). –

+1

J'ai essayé votre code sur ma machine, a bien fonctionné. Que dit ret? est-ce vrai ou pas? J'ai déjà observé que VideoCapture ne génère pas d'erreur dans de nombreux cas. – harshkn

Répondre

1

Entrez le nom de fichier sans les guillemets. Ça fonctionne bien. Parce que l'entrée a des alphabets, il sera déjà un objet chaîne. Ajouter des citations revient à entrer un mauvais nom de fichier. Comme je l'ai dit dans les commentaires, video capture ne lance pas d'erreur parfois si le nom de fichier entré n'existe pas. Espérons que cela aide