csi python 摄像头 树莓派_树莓派之摄像头和人脸识别

安装好Python与树莓派外置硬件GPIO库文件

sudo apt-get install python-rpi.gpio

在python中使用GPIO示例:

import RPi.GPIO as GPIO

#### gpio init

GPIO.setmode(GPIO.BCM)

GPIO.setup(7, GPIO.OUT) #LED2

GPIO.setup(8, GPIO.OUT) #LED1

GPIO.output(7, GPIO.LOW) #LED2 ON

GPIO.output(8, GPIO.HIGH)#LED1 OFF

fswebcam,这是一款小型摄像头程序,可以直接通过Raspbian的仓库来安装,

sudo apt-get install fswebcam

fswebcam --help

以下运行的示例:

pi@raspberrypi:~ $ fswebcam --no-banner --device /dev/video0 -r 1600x1200 b.jpg

--- Opening /dev/video0...

Trying source module v4l2...

/dev/video0 opened.

No input was specified, using the first.

--- Capturing frame...

Captured frame in 0.00 seconds.

--- Processing captured image...

Disabling banner.

Writing JPEG image to 'b.jpg'.

使用opencv自带的VideoCapture()函数定义摄像头对象,其参数0表示第一个摄像头,保存一张照片:

#-*- coding=utf-8 -*-

import cv2

import numpy as np

import time

cap = cv2.VideoCapture(1)

ret,frame = cap.read()

#cv2.imshow('frame',frame)#一个窗口用以显示原视频

filename = "/home/pi/" + time.strftime('%Y%m%d-%H%M%S') + ".jpg"

cv2.imwrite(filename, frame)

cap.release()

cv2.destroyAllWindows()

以下实例通过USB摄像头拍摄一张图片,并通过载入特征文件对图片进行人脸识别,取出对应的人脸部分并保存为小图。

特征文件可以通过在命令行中用find命令来查找:

sudo find / -iname "*haarcascades*" > /home/pi/opencv_find.txt

完整的代码如下:

#-*- coding=utf-8 -*-

import os

from PIL import Image, ImageDraw

import cv2.cv as cv

import cv2

#OPCV_PATH = "/opt/Wolfram/WolframEngine/11.2/SystemFiles"

def detect_object(image):

'''检测图片,获取人脸在图片中的坐标'''

grayscale = cv.CreateImage((image.width, image.height), 8, 1)

cv.CvtColor(image, grayscale, cv.CV_BGR2GRAY)

#cascade = cv.Load(OPCV_PATH+"/Data/haarcascades/frontalface.xml")

cascade = cv.Load("/opt/Wolfram/WolframEngine/11.2/SystemFiles/Data/Haarcascades/frontalface.xml")

rect = cv.HaarDetectObjects(grayscale, cascade, cv.CreateMemStorage(), 1.1, 2,

cv.CV_HAAR_DO_CANNY_PRUNING, (20,20))

result = []

for r in rect:

result.append((r[0][0], r[0][1], r[0][0]+r[0][2], r[0][1]+r[0][3]))

return result

def process(infile):

'''在原图上框出头像并且截取每个头像到单独文件夹'''

image = cv.LoadImage(infile);

if image:

faces = detect_object(image)

im = Image.open(infile)

path = os.path.abspath(infile)

save_path = os.path.splitext(path)[0]+"_face"

#save_path = "/home/pi" + "_face"

try:

os.mkdir(save_path)

except:

pass

if faces:

draw = ImageDraw.Draw(im)

count = 0

for f in faces:

count += 1

draw.rectangle(f, outline=(255, 0, 0))

a = im.crop(f)

file_name = os.path.join(save_path,str(count)+".jpg")

# print file_name

a.save(file_name)

drow_save_path = os.path.join(save_path,"out.jpg")

im.save(drow_save_path, "JPEG", quality=80)

else:

print "Error: cannot detect faces on %s" % infile

if __name__ == "__main__":

os.system("fswebcam --no-banner --device /dev/video0 -r 1600x1200 b.jpg")

process("b.jpg")

拍到的照片如下:

通过以上程序的运行,框出了脸所在区域,

并将这些部分区域截取出来,存成小文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/262483.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

dns-prefetch—DNS预解析技术

今天在看一个网站的源代码时 发现了 <link rel"dns-prefetch" href"//static.tuweia.cn/"> 对dns-prefetch有点儿好奇&#xff0c;因为不止一次地见到&#xff0c;今天终于忍不住要看看他到底是什么技术&#xff1f; 下面是在网上找到的一篇关于dns-…

用最简单的方法判断一个LONG整形的数A是2^n(2的n次方)

如果一个数是2的n次方,则化成二进制数肯定是 1000...000 的形式,那么 假设这个数是x,则 x-1 肯定是 0111...111 的形式,位数比x少一位 那么 x & (x-1) 则有 1000...000 & 0111...111 0000...000 所以当 x & (x-1) 0时,说明x是2的n次方 转载于:https://www.cnblo…

事务保存点savepoint

一、 转载于:https://www.cnblogs.com/wmqiang/p/11618714.html

复习--SQL Server (一) -系统数据库

SQL Server 2000自带了四个数据库&#xff1a; 1. Master数据库&#xff08;系统数据库&#xff09;: 记录了SQL Server 的所有服务器级别的系统信息&#xff08;16张服务器系统表&17张数据库级系统表&#xff09;&#xff0c;数据库的注册账户和密码&#xff0c;系统设置信…

关于sencha touch 2的mvc问题的思考。

1.文档定义了app.application的setcontroller方法为公共方法&#xff0c;这个方法如果不配合instantiateControllers这个私有方法&#xff0c;那么你设置的contorller将没有用&#xff0c;又为什么设置为公共方法。为什么不是给定义一个addcontroller方法&#xff0c;用于动态加…

Spring - bean的lazy-init属性(懒加载)

默认情况下&#xff0c;容器初始化的时候便会把bean实例化&#xff0c;通常这样做可以让一些配置或者bean实例化的异常在容器启动的时候就发现&#xff0c;而不是在N久之后。但有时候&#xff0c;我们希望某个可能不会用到但又不是100%不用的bean能够在我们用的时候才实例化&am…

FormsAuthentication 和 Session 超时时间不一的问题

因为FormsAuthentication 和 Session 的cookies不一样,造成了FormsAuthentication 还能进入 而 session已经超时的问题.目前看最好的办法就是当让FormsAuthentication 执行logout 然后再转到同一个页面.你可能定制一个module来解决这个问题: public class CheckSessionModule: …

python怎样分析文献综述怎么写_怎么写文献综述?

请允许我介绍一种比较简短好上手的方法~最近一次和导师的面谈中,我亲爱的导师花了半个多小时给我耐心地讲了如何写好研究生英文论文的 Literature Review文献综述部分&#xff0c;我听完觉得特别有用&#xff0c;真的超感动啊(ಥ_ಥ)我的导师把每一步都说的很清楚&#xff0c;这…

掌握基于AOP事务管理

一、手动管理和半自动工厂模式 二、AOP事务管理 1、表达式中&#xff0c;第一个※是返回值所有类型&#xff0c;service包下一个点意思是service包下的类&#xff0c;两个点意思是service包下的类和其子包下的类也包含&#xff0c;括号前面※代表的是所有方法&#xff0c;括号里…

win7无法将应用程序锁定到任务栏的几种解决方法

Windows7操作系统提供了一个比较人性化的功能&#xff1a;就是将常用的应用程序锁定到任务栏。但是可能部分用户发现这个功能最近不好用了&#xff0c;在任务栏上右键单击某应用程后&#xff0c;不会出现“将此程序锁定到任务栏”这个菜单项的提示&#xff0c;这是怎么回事呢&a…

canvas-star7.html

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>添加土地</title> </head> <body><canvas id"canvas" style"margin:0 auto;">The current browser does…

Oracle 中使用 fetch bulk collect into 批量效率的读取游标数据

通常我们获取游标数据是用 fetch some_cursor into var1, var2 的形式&#xff0c;当游标中的记录数不多时不打紧。然而自 Oracle 8i 起&#xff0c;Oracle 为我们提供了 fetch bulk collect 来批量取游标中的数据。它能在读取游标中大量数据的时候提高效率&#xff0c;就像 SN…

ai钢笔工具怎么描线_骨灰级的AI钢笔工具运用技巧

明白了方向线的方向对曲线形态的影响后&#xff0c;我们来看一下方向线长短造成的影响如下图般&#xff0c;在同一方向上拖拉方向线&#xff1a;(可使用"直接选择工具")对于一个锚点而言&#xff0c;如果方向线越长&#xff0c;那么曲线在这个方向上走的路程就越长&a…

基于注解的事务管理

一、Transactional 注解的源码&#xff0c;定义属性时给默认值 二、基于注解的事务管理代码实现 1、bean.xml中配置 2、业务实施层的代码注解配置&#xff1a; 其中&#xff0c;配在类上则所有方法都被事务管理&#xff0c;也可配置在单独方法上&#xff1b; 转载于:https://ww…

typedef 深入剖析

typedef是一个我们常常会用到的关键字&#xff0c;而这个关键字有许多陷阱或者说许多不为我们深入理解的地方。很多书上都是很简单地一笔代过&#xff0c;并没有真正地让我们理解这个关键字。本文对其进行详细地说明。综合网络上找到的资料对其进行分析&#xff0c;这其中会涉及…

jquery数组(操作数组元素)

HTML&#xff1a; <h3>数组map方法</h3> <div id"show4"></div> jquery&#xff1a; $(document).ready(function(){var animals [dog,cat,tiger,pig,bird]; animals $.map(animals, function(n,i){return i.This is n;});$(#show4).h…

系统分析师考试大纲

一、考试说明 1.考试要求&#xff1a;  &#xff08;1&#xff09;具有系统工程的基础知识&#xff1b;  &#xff08;2&#xff09;掌握开发信息系统的综合技术知识&#xff08;硬件、软件、网络、数据库&#xff09;&#xff1b;  &#xff08;3&#xff09;熟悉企业和…

configure project qt,如何为Qt Framework配置CLion IDE?

How to configure CLion IDE for Qt Framework?Is this IDE compatible with Qt, or are there other IDEs compatible with Qt?I just want to try to use something else than Qt Creator.解决方案I was as desperate as you, until I read this Quora discussion.It worke…

PostgreSQL入门篇学习笔记(七)

2019独角兽企业重金招聘Python工程师标准>>> pg数据库&#xff1a;能提供读写全功能的服务器称为Primary database或者master database。若备份服务器在接受主数据库同步数据和应用同步数据库时&#xff0c;不能提供只读的服务&#xff0c;则该备份数据库称之为warm…

Qt的元对象(Meta-Object)系统简介(转)

Qt的元对象系统基于如下三件事情&#xff1a; 1.类&#xff1a;QObject&#xff0c;为所有需要利用原对象系统的对象提供了一个基类。 2.宏&#xff1a;Q_OBJECT&#xff0c;通常可以声明在类的私有段中&#xff0c;让该类可以使用元对象的特性&#xff0c;比如动态属性&#x…