Python 实现的猫脸识别、人脸识别器。

代码地址如下:
http://www.demodashi.com/demo/13071.html

前言:

OpenCV是开源的跨平台计算机视觉库,提供了Python等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

opencv中内置了基于Viola-Jones目标检测框架的Harr分类器,只需要载入一个配置文件(haarcascade_frontalface_alt.xml)就能直接调用detectObject去完成检测过程,同时也支持其他特征的检测(如鼻子、嘴巴等)。

本程序用wxPython开发GUI界面,利用OpenCv实现一个简易的猫脸识别、人脸识别器。

本程序的运行效果如下:

准备工作:

1.安装必要的第三方库:

     pip install numpy
     pip install wxPython 

安装PIL,在以下地址下载PIL库进行安装:

http://effbot.org/media/downloads/PIL-1.1.7.win32-py2.7.exe

(或在http://effbot.org/downloads/ 中找到与你操作系统及python版本相对应

版本的PIL)

安装OpenCv,建议在以下地址下载相应的版本进行安装:

https://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv

如下载了opencv_python-3.1.0-cp27-none-win32.whl;

输入:

pip install opencv_python-3.1.0-cp27-none-win32.whl

即可完成安装。

项目结构图:

整体的项目结构十分简单,一共两个脚本文件,一个是GUI界面脚本(detect_gui.py),

一个是检测器脚本(model.py);另有三个已经训练好的分类器文件,分别是检测人脸的

human_face.xml,检测人眼的human_eye.xml,检测猫脸的eye_face.xml 文件。

还有一个“face_detect-0.1-win32.msi”是根据本脚本进行编译后的可执行程序。

如下:

实现过程的部分代码展示

  1. 在model.py中导入相关的库,其实只需导入opencv库:
import cv2
  1. 加载各个分类器文件:
human_face = cv2.CascadeClassifier(r‘human_face.xml‘)
human_eye = cv2.CascadeClassifier(r‘human_eye.xml‘)
cat_face = cv2.CascadeClassifier(r‘cat_face.xml‘)
  1. 编写model.py中的相关类及函数,

    用cv2.imread()函数读入图像后,需要通过cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    函数将图像转为灰度格式。

    首先用人脸分类器检出人脸区域,再在人脸区域中用人眼分类器检出人眼区域,

    同时绘制矩形框选出目标区域。

    详细代码如下:

    class Faces(object):

    def human_face(self,fileName):

    """人脸、人眼检测"""

    img = cv2.imread(fileName)

    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    faces = human_face.detectMultiScale(gray, scaleFactor = 1.2, minNeighbors = 3, minSize = (32, 32))

        """在目标区域绘制矩形"""
         for (x,y,w,h) in faces:
             img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
             roi_gray = gray[y:y+h, x:x+w]
             roi_color = img[y:y+h, x:x+w]
             eyes = human_eye.detectMultiScale(roi_gray)
             for (ex,ey,ew,eh) in eyes:
                 cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)
         return img

同理写出检测猫脸的函数:

    def cat_face(self,fileName):
        """猫脸检测"""
        img = cv2.imread(fileName)
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        faces = cat_face.detectMultiScale(gray,scaleFactor= 1.02,
                                             minNeighbors=9,
                                             minSize=(70, 70),
                                             flags=cv2.CASCADE_SCALE_IMAGE)
        for (x, y, w, h) in faces:
            cv2.rectangle(img, (x, y), (x+w, y+h), (0, 0, 255), 2)
            cv2.putText(img,‘Cat‘,(x,y-7), 3, 1.2, (0, 255, 0), 2, cv2.LINE_AA)
        return img

4.在detect_gui.py中编写用户界面:

导入相关的库,从我们model.py中导入Faces类:

import wx
import os
import cv2
from collections import namedtuple
import  wx.lib.rcsizer  as rcs
from PIL import Image
from model import Faces

编写界面:

class MainWindow(wx.Frame):
    def __init__(self,parent,title):
        wx.Frame.__init__(self,parent,title=title,size=(600,-1))
        Size = namedtuple("Size",[‘x‘,‘y‘])
        s = Size(100,50)

        self.human = None
        self.cat = None

        """创建输入框"""
        self.in1 = wx.TextCtrl(self,-1,size = (2*s.x,s.y))
        self.in2 = wx.TextCtrl(self,-1,size = (2*s.x,s.y))

        """创建按钮"""
        b1 = wx.Button(self,-1,‘human image‘)
        b2 = wx.Button(self, -1, "run")
        b3 = wx.Button(self,-1,‘cat image‘)
        b4 = wx.Button(self,-1,‘run‘)

        """设置输入框的提示信息"""
        self.in1.SetToolTipString(‘choose a human image‘)
        self.in2.SetToolTipString(‘choose a cat image‘)

        """界面布局"""
        self.sizer0 = rcs.RowColSizer()
        self.sizer0.Add(b1,row = 1,col = 1)
        self.sizer0.Add(self.in1,row = 1,col = 2)
        self.sizer0.Add(b2,row = 1,col = 3)
        self.sizer0.Add(b3,row = 2,col = 1)
        self.sizer0.Add(self.in2,row = 2,col = 2)
        self.sizer0.Add(b4,row = 2,col = 3)

        """绑定回调函数"""
        self.Bind(wx.EVT_BUTTON, self.img_read, b1)
        self.Bind(wx.EVT_BUTTON, self.human_face, b2)
        self.Bind(wx.EVT_BUTTON, self.img_read_cat, b3)
        self.Bind(wx.EVT_BUTTON, self.cat_face, b4)

        self.SetSizer(self.sizer0)
        self.SetAutoLayout(1)
        self.sizer0.Fit(self)
        self.CreateStatusBar()
        self.Show(True)

界面如下:

编写控件的回调函数:

    def img_read(self,evt):
        """read and show image"""
        self.human = None
        self.human = self.choose_file()
        if self.human is None:
            pass
        else:
            self.in1.Clear()
            self.in1.write(self.human)
            im = Image.open(self.human)
            im.show()

    def img_read_cat(self,evt):
        """read and show image"""
        self.cat = None
        self.cat = self.choose_file()
        if self.cat is None:
            pass
        else:
            self.in2.Clear()
            self.in2.write(self.cat)
            im = Image.open(self.cat)
            im.show()

    def human_face(self,evt):
        if self.human is None:
            self.raise_msg(u‘plaese choose an image first.‘)
            return None
        else:
            face = Faces()
            img = face.human_face(self.human)
            self.imgs_show(img,‘Human face detect‘)

    def cat_face(self,evt):
        if self.cat is None:
            self.raise_msg(u‘plaese choose an image first.‘)
            return None
        else:
            face = Faces()
            img = face.cat_face(self.cat)
            self.imgs_show(img,‘Cat face Detect‘)            

其他注意事项:

项目文件中的“face_detect-0.1-win32.msi”是根据本脚本进行编译打包后、

可以在windows系统下独立运行的安装程序,双击该文件即可安装软件,

安装完成后,点击安装路径下的“detect_gui.exe”即可运行本软件

(即使目标PC没有安装OpenCv或Python)

如下图所示:

代码地址如下:
http://www.demodashi.com/demo/13071.html

注:本文著作权归作者,由demo大师代发,拒绝转载,转载需要作者授权

原文地址:https://www.cnblogs.com/demodashi/p/9437763.html

时间: 2024-12-13 11:16:58

Python 实现的猫脸识别、人脸识别器。的相关文章

07-人脸识别-人脸矫正

人脸矫正有几个问题. 1.歪头: 2.侧脸: 3.半边脸:缺失另外半边脸,要寻找其他的解决方案. 大多数情况下,截取到的人脸是包含歪头和侧脸的现象的.这两个问题,可以同时通过仿射变换来矫正. 但是要注意,侧脸,是缺少一部分脸部信息的. 人脸矫正,对歪头的正确度提高有帮助,对侧脸就一般了. 思路: 1.之前步骤已经在每张人脸上找到5个特征: 2.测量 正面脸 的五点对应坐标 pts_dst(这是测量出来的,重要的是5点的位置相对关系): 3.每张脸的5个点坐标 pts_src,其中的鼻子坐标要设置

《刷脸背后:人脸检测 人脸识别 人脸检索 》PDF 学习下载

发现一本系统讲解人脸识别一系列技术的好书,叫做<刷脸背后:人脸检测 人脸识别 人脸检索>,这里给大家分享一下,共同学习. 本书高清PDF版下载链接:<刷脸背后:人脸检测 人脸识别 人脸检索 >高清带标签可复制PDF 1 内容介绍: 人脸识别是当今热门的研发方向,在安防.金融.旅游等领域具有十分广泛的应用.本书全面.系统地介绍“刷脸”背后的技术,包括人脸检测.人脸识别.人脸检索相关的算法原理和实现技术.本书中讲解的算法具有高度的可操作性和实用性.通过学习本书,研究人员.工程师能够在3

机器学习原来如此有趣:用深度学习识别人脸

本系列文章目前已经更新两期,分别是: 机器学习原来如此有趣!全世界最简单的机器学习入门指南. 机器学习原来如此有趣:如何故意欺骗神经网络 你是否有注意到Facebook最近开发了一个非同寻常的功能:将你照片中的好友识别出来.过去,Facebook 让你手动点击照片上的好友,输入他们的名字,然后加上标签.现在只要你上传一张照片,Facebook就会像变魔术一样为你自动标记出所有人: 这项技术就叫做人脸识别.在你的朋友的脸被标记了几次之后,Facebook的算法就可以识别他了.这是一个让人惊艳的技术

Git版本管理器与猫脸五爪鱼

Git版本管理器与猫脸五爪鱼 (声明:内容按个人实践经验并部分整合自网络,供学习参考) 一.git软件是什么?它与SVN有什么异同? Git 是一个快速.可扩展的分布式版本控制系统,它具有极为丰富的命令集,对内部系统提供了高级操作和完全访问. svn属于集中化的版本控制系统:有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的成员通过客户端连接到这台服务器,进行文件上传和更新. 优点:a.使用简单,比较符合我们的常规思维.b.同步代码比较简单,只要一步操作即可. 缺点:a.丢失数据

京东金融大数据竞赛猪脸识别(1)-从视频提取图像

2017年11月的京东金融大数据竞赛参与人数最多的是猪脸识别的算法比赛,参加整个大数据比赛的有四千多人,而猪脸识别算法组就有一千多人.可见,搞图像识别的的人很多啊.想要提升自己价值的小伙伴们,向语音.文本.机器人等领域进发吧,有了机器学习的基础,入门这些领域应该都不是太难.比赛给的数据是30头猪的视频,做识别的第一步还是从视频中去图像吧.本想用以前写过的视频取帧程序.看Matlab示例的时候发现用Matlab取帧更简便易行,那就用它吧.这样又省了很多时间.代码如下: %exam1.m extra

京东金融大数据竞赛猪脸识别(7)- 识别方法之四

除了softmax层构建的深度网络,Matlab还有一个简单的构建数据分类的函数,那就是patternnet,其用法类似.可以直接对图像特征数据处理,也可以对图像集处理.代码如下: %exam1.m 用训练图像特征构建深度网络并计算测试图像得分 clear; load('JDPig_mlhmslbp_spyr.mat'); m = numel(classe_name); n = length(y); label = [] for i=1:n label(:,i) = zeros(m,1); la

腾讯优图及知脸(ZKface)人脸比对接口测试(python)

一.腾讯优图 1.开发者地址:http://open.youtu.qq.com/welcome/developer 2.接入流程:按照开发者页面的接入流程接入之后,创建应用即可获得所需的AppID.SecretID和SecretKey这是进行接口调用必须的凭证 3.测试流程: 3.1.测试可以直接调用网络接口,或者下载相应语言的sdk(http://open.youtu.qq.com/welcome/developer#/tool-sdk),我采用的是下载python版本的sdk(该sdk对应的

Python scikit-learn 学习笔记—PCA+SVM人脸识别

人脸识别是一项实用的技术.但是这种技术总是感觉非常神秘,在sklearn中看到了人脸识别的example,代码网址如下: http://scikit-learn.org/0.13/auto_examples/applications/face_recognition.html#example-applications-face-recognition-py 首先介绍一些PCA和SVM的功能,PCA叫做主元分析,它可以从多元事物中解析出主要影响因素,揭示事物的本质,简化复杂的问题.计算主成分的目的

脸识别API微软牛津项目

微软牛津项目人脸识别API初探 按照董子的这篇博客中的介绍,到微软牛津项目的网站申请到测试用的人脸识别Key,按照官方文档的介绍,把wpf项目建好之后,按照一步步的流程下来就可以完成example中的功能了.但是这仅仅是个example,图片不能太大,不然会出现溢出错误.之前关注过牛津项目,后来不知道竟然中文版的官网也出来了,只是中文的文档翻译的是在是太不堪入目了,不过这也保持了微软的一贯的风格. 我的环境是:win7 64bit+VS2015+.Net4.5+C#PS:最好把 drawingC