py

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import datetime     #时间

import Adafruit_DHT #温湿度
sensor = Adafruit_DHT.DHT11
pin = 4  #GPIO4


import RPi.GPIO as GPIO
GPIO.setwarnings(False) 
GPIO.setmode(GPIO.BCM)

#修改全局变量需要使用global
txt_src="/home/pi/Work/WorkPlace/python/2waibao/2face_lab/info"
time_begin="8:00"
time_over ="22:00"

temperature_alram=40
humidity_alram=50


pinA1=6  #人脸识别门锁
pinA2=13 #风扇
pinB1=19 #总电源
pinB2=26

GPIO.setup(pinA1, GPIO.OUT) #设置脚为输出模式
GPIO.setup(pinA2, GPIO.OUT) #设置脚为输出模式
GPIO.setup(pinB1, GPIO.OUT) #设置脚为输出模式
GPIO.setup(pinB2, GPIO.OUT) #设置脚为输出模式

GPIO.output(pinA1, GPIO.HIGH)  #high指示灯关
GPIO.output(pinA2, GPIO.HIGH)  #high指示灯关
GPIO.output(pinB1, GPIO.HIGH)  #high指示灯关
GPIO.output(pinB2, GPIO.HIGH)  #high指示灯关

#函数名 读取txt中指定参数内容
#函数输入
# path_txt  txt文件地址
# canshu    要从txt读取的内容
# fengefu   参数名字和值的分隔符号 默认 -
#函数输出
# 返回字符型结果

def readtxt(path_txt,canshu):
    
    #/home/pi/Desktop/info
    fengefu="-"
    f = open(path_txt, mode='r+', encoding='utf-8')  # 打开txt文件,以‘utf-8’编码读取
    lines = f.readlines()   # 以行的形式进行读取文件
     
    for line in lines:
        a=line.strip().split(fengefu)    # x.strip()#除去每行的换行符 按照:分割
        b = a[0:1] # list--str
        c = "".join(b).strip()  # 去除空格
        
        if  c==canshu:
            b = a[1:2]   # 这是选取需要读取的位数
            c="".join(b).strip()  # 去除空格   
            #print(c)
            return c
    f.close()
    
#获取初始化参数
    #报警时间和温度,湿度范围
def read_config():
    
    #修改全局变量需要使用global在函数内部声明下
    global txt_src
    global time_begin
    global time_over 

    global temperature_alram
    global humidity_alram
    
    print("---获取初始配置信息---")
    #读取开始时间 字符型 
    time_begin=readtxt(txt_src,"time_begin")
    print("最早时间:"+time_begin)
    #读取结束时间
    time_over=readtxt(txt_src,"time_over")
    print("最晚时间:"+time_over) 
    #读取报警温度 字符型 数字需要转化 int()
    temperature_alram=int(readtxt(txt_src,"temperature_alram"))
    print("温度高温报警:"+str(temperature_alram))
    #读取湿度报警值
    humidity_alram=int(readtxt(txt_src,"humidity_alram"))
    print("湿度报警报警:"+str(humidity_alram)) 
    print("---获取初始配置信息结束---")

#时间控制电源
def pow_timecontrol():
    #获取当前和时间
    now = datetime.datetime.now().strftime("%H:%M")
    #print("当前时间:" + now)
    #比较是否在时间段内
    if time_begin < now < time_over:
        print("当前时间:" + now+",在此实验室正常开启时间段,电源打开")
        GPIO.output(pinB1, GPIO.LOW)  #不亮
    else:
        print("当前时间:" + now+",不在实验室正常开启时间段,电源关闭")
        GPIO.output(pinB1, GPIO.HIGH)  #亮

# 温湿度
# 输入警报数值 其中湿度为百分比小数
def dh11_data(alram_tem,alram_hum):
    humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
     
    if humidity is not None and temperature is not None:
     
        print('当前温度={0:0.1f}*C  当前湿度={1:0.1f}%'.format(temperature, humidity))
        
        if int(temperature)>int(alram_tem):
            print("温度警报-打开风扇散热")
            GPIO.output(pinA2, GPIO.LOW)  #亮
        else:
            print("温度正常-关闭风扇")
            GPIO.output(pinA2, GPIO.HIGH)  #亮
            
        if int(humidity)>int(alram_hum):
            print("湿度警报-打开风扇除湿")
            GPIO.output(pinA2, GPIO.LOW)  #亮
        else:
            print("湿度正常-关闭风扇")
            GPIO.output(pinA2, GPIO.HIGH)  #亮
        
    else:
     
        print('Failed to get reading. Try again!')
#主函数
def main():
    #1读取配置文件
    read_config()
    #2电源时间管理判断
    pow_timecontrol()
    #3温适度判断
    dh11_data(int(temperature_alram),int(humidity_alram))

main()

  

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import datetime     #时间

import Adafruit_DHT #温湿度
sensor = Adafruit_DHT.DHT11
pin = 4  #GPIO4


import RPi.GPIO as GPIO
GPIO.setwarnings(False) 
GPIO.setmode(GPIO.BCM)

from multiprocessing import Process

import cv2
import numpy as np
import os




#修改全局变量需要使用global
txt_src="/home/pi/Work/WorkPlace/python/2waibao/2face_lab/info"
time_begin="8:00"
time_over ="22:00"

temperature_alram=40
humidity_alram=50


pinA1=6  #人脸识别门锁
pinA2=26 #风扇
pinB1=19 #总电源
pinB2=13

GPIO.setup(pinA1, GPIO.OUT) #设置脚为输出模式
GPIO.setup(pinA2, GPIO.OUT) #设置脚为输出模式
GPIO.setup(pinB1, GPIO.OUT) #设置脚为输出模式
GPIO.setup(pinB2, GPIO.OUT) #设置脚为输出模式

GPIO.output(pinA1, GPIO.HIGH)  #high指示灯关
GPIO.output(pinA2, GPIO.HIGH)  #high指示灯关
GPIO.output(pinB1, GPIO.HIGH)  #high指示灯关
GPIO.output(pinB2, GPIO.HIGH)  #high指示灯关




    
    
    
    
#函数名 读取txt中指定参数内容
#函数输入
# path_txt  txt文件地址
# canshu    要从txt读取的内容
# fengefu   参数名字和值的分隔符号 默认 -
#函数输出
# 返回字符型结果

def readtxt(path_txt,canshu):
    
    #/home/pi/Desktop/info
    fengefu="-"
    f = open(path_txt, mode='r+', encoding='utf-8')  # 打开txt文件,以‘utf-8’编码读取
    lines = f.readlines()   # 以行的形式进行读取文件
     
    for line in lines:
        a=line.strip().split(fengefu)    # x.strip()#除去每行的换行符 按照:分割
        b = a[0:1] # list--str
        c = "".join(b).strip()  # 去除空格
        
        if  c==canshu:
            b = a[1:2]   # 这是选取需要读取的位数
            c="".join(b).strip()  # 去除空格   
            #print(c)
            return c
    f.close()
    
#获取初始化参数
    #报警时间和温度,湿度范围
def read_config():
    
    #修改全局变量需要使用global在函数内部声明下
    global txt_src
    global time_begin
    global time_over 

    global temperature_alram
    global humidity_alram
    
    print("---获取初始配置信息---")
    #读取开始时间 字符型 
    time_begin=readtxt(txt_src,"time_begin")
    print("最早时间:"+time_begin)
    #读取结束时间
    time_over=readtxt(txt_src,"time_over")
    print("最晚时间:"+time_over) 
    #读取报警温度 字符型 数字需要转化 int()
    temperature_alram=int(readtxt(txt_src,"temperature_alram"))
    print("温度高温报警:"+str(temperature_alram))
    #读取湿度报警值
    humidity_alram=int(readtxt(txt_src,"humidity_alram"))
    print("湿度报警报警:"+str(humidity_alram)) 
    print("---获取初始配置信息结束---")

#时间控制电源
def pow_timecontrol():
    
    #获取当前和时间
    now = datetime.datetime.now().strftime("%H:%M")
    #print("当前时间:" + now)
    #比较是否在时间段内
    if time_begin < now < time_over:
        print("当前时间:" + now+",在此实验室正常开启时间段,电源打开")
        GPIO.output(pinB1, GPIO.LOW)  #不亮
    else:
        print("当前时间:" + now+",不在实验室正常开启时间段,电源关闭")
        GPIO.output(pinB1, GPIO.HIGH)  #亮

# 温湿度
# 输入警报数值 其中湿度为百分比小数
def dh11_data(alram_tem,alram_hum):
    humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
     
    if humidity is not None and temperature is not None:
     
        print('当前温度={0:0.1f}*C  当前湿度={1:0.1f}%'.format(temperature, humidity))
        
        if int(temperature)>int(alram_tem):
            print("温度警报-打开风扇散热")
            GPIO.output(pinA2, GPIO.LOW)  #亮
        else:
            print("温度正常-关闭风扇")
            GPIO.output(pinA2, GPIO.HIGH)  #亮
            
        if int(humidity)>int(alram_hum):
            print("湿度警报-打开风扇除湿")
            GPIO.output(pinA2, GPIO.LOW)  #亮
        else:
            print("湿度正常-关闭风扇")
            GPIO.output(pinA2, GPIO.HIGH)  #亮
        
    else:
     
        print('FailedAQ to get reading. Try again!')
        
def face():
    
    recognizer = cv2.face.LBPHFaceRecognizer_create()
    recognizer.read('trainer/trainer.yml')
    cascadePath = "haarcascade_frontalface_default.xml"
    faceCascade = cv2.CascadeClassifier(cascadePath);
    font = cv2.FONT_HERSHEY_SIMPLEX
    #iniciate id counter
    id = 0
    # names related to ids: example ==> Marcelo: id=1,  etc
    names = ['None', 'me', 'he', 'Ilza', 'Z', 'W'] 
    # Initialize and start realtime video capture

    cam = cv2.VideoCapture(0)
    cam.set(3, 640) # set video widht
    cam.set(4, 480) # set video height
    # Define min window size to be recognized as a face
    minW = 0.1*cam.get(3)
    minH = 0.1*cam.get(4)
    while True:
        ret, img =cam.read()
        #img = cv2.flip(img, -1) # Flip vertically
        gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

        faces = faceCascade.detectMultiScale( 
            gray,
            scaleFactor = 1.2,
            minNeighbors = 5,
            minSize = (int(minW), int(minH)),
           )
        for(x,y,w,h) in faces:
            cv2.rectangle(img, (x,y), (x+w,y+h), (0,255,0), 2)
            id, confidence = recognizer.predict(gray[y:y+h,x:x+w])
            # Check if confidence is less them 100 ==> "0" is perfect match 
            if (confidence < 100):
                id = names[id]
                confidence = "  {0}%".format(round(100 - confidence))
            else:
                id = "unknown"
                confidence = "  {0}%".format(round(100 - confidence))

            cv2.putText(img, str(id), (x+5,y-5), font, 1, (255,255,255), 2)
            cv2.putText(img, str(confidence), (x+5,y+h-5), font, 1, (255,255,0), 1)
            
            cut = img[y:y+h,x:x+w]
            
            cv2.imwrite('face_save/cut.jpg', cut)

        cv2.imshow('camera',img)
       # cam = cv2.VideoCapture(url)
        k = cv2.waitKey(10) & 0xff # Press 'ESC' for exiting video
        if k == 27:
            break
    # Do a bit of cleanup
    print("
 [INFO] Exiting Program and cleanup stuff")
    cam.release()
    cv2.destroyAllWindows()

    
    
    
#主函数
def main():
    #1读取配置文件
    read_config()
    #2电源时间管理判断
    p1=Process(target=pow_timecontrol,args=()) #必须加,号 
    p2=Process(target=dh11_data,args=(int(temperature_alram),int(humidity_alram))) #必须加,号 
    p3=Process(target=face) #必须加,号 
    p1.deamon=True
    p2.deamon=True
    p3.deamon=True
    p1.start()
    p2.start()
    p3.start()
    #p1.join()
    #p2.join()
    p3.join()
    print("end")
    
main()