python跑个人脸识别的例子,遇到的琐碎事情

本文使用的是windows7+python3.5+pycharm

源码来自GitHub

https://github.com/shantnu/FaceDetect


注意,opencv3使用face_detect.py会出错,需要使用face_detect_cv3.py。一般大牛们会提供多个版本的代码,在此表示敬佩。


使用pycharm打开工程,执行,遇到找不到cv2模块。但是清清楚楚的记得我用anaconda已经安装了opencv-python。没办法,又去anaconda prompt安装,却提示已经安装成功。

提示找不到,却又已经安装了。尴尬。。。

此时想到每次打开时,pycharm需要选择Python解释器(interpreter)。

于是想到可能存在多个解释器,该解释器没有安装opencv-python。

查到下文:

http://blog.csdn.net/pfm685757/article/details/46122225

即在File->Setting->Project: FaceDetect-master(工程名)->Project Interpreter中可以设置解释器,如下图:

python跑个人脸识别的例子,遇到的琐碎事情_第1张图片

图中右上方是选择解释器版本。

右下是选种的解释器所安装的库。

可以看出解释器所在目录,也就是anaconda目录下的Python才是使用anaconda安装库所使用的解释器。设置为图中所示的即可。


下图中可以看到工程目录,和解释器、库的目录,就可以知道该解释器安装了那些库了

python跑个人脸识别的例子,遇到的琐碎事情_第2张图片


再次运行,发现不提示缺库了。但是提示sys.argv[1]。

有vs使用经验的肯定知道,去设置运行配置,将参数输进去(不包括程序名称)

Run->Edit Configuration->Python->face_detect_cv3->Configuration->Script parameters.输入参数,运行,当然是成功的

但是想到这里就觉得很麻烦了,点那么多下。有没有更简单的方法呢?

当然有。

Python是解释语言,可以在命令行下敲代码,像matlab一样。所以查阅资料。

http://blog.csdn.net/github_35160620/article/details/52487618

发现下图,具体下图思路网页找不到了:


右面那个放大镜是可以搜索的,可以搜到Terminal,回车后出现Terminal窗口。可以敲命令,敲了之后还是提示找不到cv2。尴尬。。。。。

去setting里搜Terminal的配置(下图左上角的放大镜也可以搜索哦~~~)

python跑个人脸识别的例子,遇到的琐碎事情_第3张图片

看到里面的shell path,明白了。这家伙是调用的cmd.exe,所以和cmd下的一样(我在cmd下使用命令也找不到cv2,但是在anaconda prompt打开的命令行里能找到)。这是因为环境变量的关系。环境变量中没有安装opencv-python库的解释器路径在anaconda解释器路径之前。把它调到所有路径之后。让寻找解释器时先找到anaconda路径下的解释器就好了。


设置完了之后环境变量没有立刻生效。由于电脑正在跑代码,不想重启,当然,这并不是个好办法。于是查资料

http://blog.csdn.net/shuixin536/article/details/8084612

即cmd中用echo %path%获得当前path值,复制编辑好后,再用set path=xxxxxx设置path,即可生效。重启pycharm。成功。。。。


然后点执行按钮又不行了,因为setting设置运行参数的没有保存。可以在default setting里面设置,OK啦。


修改了face_detect_cv3.py中的代码,让它支持视频检测,如下(未删除源码)。

import cv2
import sys
################### add################
#import imageio
################### add################
# Get user supplied values
imagePath = sys.argv[1]
cascPath = "haarcascade_frontalface_default.xml"

# Create the haar cascade
faceCascade = cv2.CascadeClassifier(cascPath)

# Read the image
image = cv2.imread(imagePath)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Detect faces in the image
faces = faceCascade.detectMultiScale(
    gray,
    scaleFactor=1.1,
    minNeighbors=5,
    minSize=(30, 30)
    #flags = cv2.CV_HAAR_SCALE_IMAGE
)

print("Found {0} faces!".format(len(faces)))

# Draw a rectangle around the faces
for (x, y, w, h) in faces:
    cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2)

cv2.imshow("Faces found", image)
cv2.waitKey(1)


################### add################
#cap = cv2.VideoCapture('C:/Users/wjt/Desktop/jumping.avi')
cap = cv2.VideoCapture(0)
while(cap.isOpened()):
    ret, image=cap.read()
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

    # Detect faces in the image
    faces = faceCascade.detectMultiScale(
        gray,
        scaleFactor=1.1,
        minNeighbors=5,
        minSize=(30, 30)
        # flags = cv2.CV_HAAR_SCALE_IMAGE
    )
    for (x, y, w, h) in faces:
        cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)

    cv2.imshow('image',image)
    k=cv2.waitKey(20)
    #q键退出
    if(k&0xff==ord('q')):
        break
cap.release()
cv2.destroyAllWindows()
################### add################



你可能感兴趣的:(Python)