一个基于Python2.7的智慧校园系统

一个基于python和pcduino的智慧校园系统,本着开(zhuang)源(bi)的精神可以用来借鉴。233。

运行在pcduino上的,需要搭配一些元件。

在程序的函数里已经写的很详细了。结合硬件,里面可以实现在线人脸识别,火灾警报,太阳能充电控制,雨水收集灌溉,大屏幕控制,上放学语音灯控等功能。

p.s.上学铃声是个双和弦的《小星星》,虽然歌很简单,但是写死我了-_-

至于像analog_read,digital_write,digital_read一类的函数还是需要根据嵌入设备型号自己写的。

这个小程序是今天3月份全国创客竞赛初中组特等奖的作品。个人觉得由此可见初中创客学生水平低下。勿喷。

#!/usr/bin/python2.6
# -*- coding:utf-8 -*-
#--------------UTF-8!!!!!!-------------
from pcduino import *
import time
import numpy as np
import cv2
import Image
import sys
import os
#import os.system
import datetime
import time
import random
import string

# Definitions of musical notes:-----------------
ISOTIME = '%Y-%m-%d %X'
Z = 261.9
X = 293.7
C = 329.6
V = 349.2
B = 392.0
N = 440
M = 493.9
A = 523.3
S = 587.3
D = 659.3
F = 698.5
G = 784
H = 880
J = 987.5
Q = 1047
W = 1175
E = 1319
R = 1397
T = 1568
Y = 1760
U = 1970
X = 0
#muse_dict ={'.1'=261.9,'.2'=293.7,'.3'=329.6,'.4'=349.2,'.5'=392.0,'.6'=440,'.7'=493.9,'1'=523.3,'2'=587.3,'3'=659.3,'4'=698.5,'5'=784,'6'=880,'7'=987.5,'1.'=1047,'2.'=1175,'3.'=1319,'4.'=1397,'5.'=1568,'6.'=1760,'7.'=1970}
def f(x): 
    return muse_dict[x];


#definitions over。----------------------.
tempthreshold = 38
smokethreshold = 300

nums = string.digits
cam = cv2.VideoCapture(0)
#facedetection.-----------------.
IMAGE_FR = "FACE" # frontal name...
_CONTENT_TYPES = { 'image/png': '.png', 'image/gif': '.gif',
        'image/jpeg':'.jpg', 'image/jpeg': '.jpeg' }  #supporting types dictionary

#def lenIM(text):
#    n = 0
#    for i in text:
#        if i not in ' \n!"#$%^&*?/.:;[\\]@_-|`~'
#            n ++
#        return n
def sound(muse,port=5,times=0.5,volume=8):
    if muse != 0:
        pin_mode(port,PWM)    #sound a note
        pwm_set(port,volume,muse)
        pwm_enable(port)
        time.sleep(times)
    else:
        time.sleep(times)

def Soil(port = 4):
    return analog_read(port) >= 100

#def dualsound(musea,museb,porta=5,portb=6,times=0.5):
#    pin_mode(porta,pwm)
#    pin_mode(portb,pwm)
#    pwm_set(porta,8,musea)
#    pwm_set(portb,5,museb)
#    pwm_enable(porta)
#    pwm_enable(portb)
#    time.sleep(times)

def dualsound(musea,museb,porta,portb,time=0.5):
    sound(musea,porta,0.1,8)
    sound(museb,portb,time,4)
    pwm_disable(porta)
    pwm_disable(portb)

def mute():
    pwm_disable(5)
    pwm_disable(6)
    
def clear():
    for i in range(1,10):    #clear all
        pin_mode(i,0)
        digital_write(i,0)
        pwm_disable(5)

def readWater(port=1):
    return analog_read(port) >= 2000    #if there is water and how deep?

def readHumid(port=5):
        #found a question!!!!the port is definitly not this(5).
    pin_mode(port,INPUT)    #if there is water
    return "question!!!"

def readSmoke(port=1):
    return analog_read(port) >= smokethreshold    #if the voltage of sensor is smaller than 300

def changedirection(normal = 1,porta=1,portb=0):
    pin_mode(porta,OUTPUT)
    pin_mode(portb,OUTPUT)
    if normal == 0:
        digital_write(portb,LOW)
        digital_write(porta,LOW)
    elif normal == 1:
        digital_write(portb,HIGH)
        digital_write(porta,LOW)
    elif normal == 2:
        digital_write(porta,HIGH)
        digital_write(portb,LOW)

def readTemp(port=3):
    return analog_read(port)/10

def LightCtrl(state,port=10):
    pin_mode(port,OUTPUT)
    if state == True:
        digital_write(port,HIGH)
    else:
        digital_write(port,LOW)

def cls(): # clear screen
    temp = os.system('clear')

def mediumprint(strs): 
    ad = strs
    if len(ad) >= 57:
        print 'an error occured:string length mismatch.'
    total = 57 
    beginpoint = (total-len(ad))/2
    print beginpoint*' ',strs 
    
def ScreenCali(str=None): 
    timecur = time.strftime(ISOTIME,time.localtime())
    mediumprint('HHHHHHHHHHHHHHHH')
    mediumprint(timecur)
    #temp = readTemp() & ' C'
    #mediumprint(temp)
    mediumprint(str)

def ReadFile(filepath):
    file = open(filepath)
    try:
        tempa = file.read()
    finally:
        file.close()
    return tempa

def WaterPump(open,port=2):
    pin_mode(port,OUTPUT)
    if open:
        digital_write(port,HIGH)
    else:
        digital_write(port,LOW)
def check(a):
        try:
                f = float(a)
        except ValueError:
                return False
        return True


def facecomp(): # face recognization
    #print 'start!'
    cmd = 'curl -X POST "https://api-cn.faceplusplus.com/facepp/v3/compare" -F "api_key=jb0zKEEB2jiG2GMNt29Gej-GxNTPbeCM" -F "api_secret=5AHULy15PjagzVvnHLUa2ouVJpWCPHMZ" -F "face_token1=f216f8b56678831f6dc5720ae10f341f" -F "image_file2=@photo.jpg"'
    #print 'here is the datas!'
    result = os.popen( cmd ).read()
    print result
    #print result
    
    #print 'here is the splited data:'
    splresult = result.split(',')
    confidenceraw =  splresult[-1]
    confidencestr = confidenceraw[-7:-1]
    if check(confidencestr):
        confidence = string.atof(confidencestr)
    else:
        confidence = 0
    print confidenceraw,confidencestr,confidence,'.'
    if confidence >= 70:
        return True
    else:
        return False

#-----------------START-------------
#tempb = os.system('rm /var/log/apache2/access.log')
tempb = os.system('mkdir /var/log/apache2')
tempb = os.system('cd /var/log/apache2')
tempb = os.system('touch /var/log/apache2/access.log')
tempb = os.system('/etc/init.d/apache2 restart')
cls()
waiting = True
bef = ReadFile('/var/log/apache2/access.log')
cur = bef

while waiting:
    time.sleep(0.5)
    if bef != cur  :
        waiting = False

        bef = cur
    cur = ReadFile('/var/log/apache2/access.log')


#notes = [E,E,E,E,D,C,C,B1,A1,A1,B1,C,E,A,A,A,A,G,F,F,E,D,D,E,F,E,F,E,G,F,E,E,D,C,C,B1,A1,B1,B1,B1,B1,C,B1,A1] #爱的罗曼史
#notes = [A]
notes = [Q,J,H,G,D,D,S,A,S,G,D,D,S,A,S,A,A,A]
#notesII = [C,G,G,G,G,G,C,G,G,G,G,C,G,G,G,G,C,A,A,A,A,D,A,A,A,A,A,B1,G,C,G,C,G,G,G,G,G,C,G,B1,G,A1,E,E,E,E,A1,E,E,E,E,F1,C,C,C,C,C2]
blinkingI = [A]
#blinkingI = [Q,X,Q,X,T,X,T,X,Y,X,Y,X,T,X,X,X,R,X,R,X,E,X,E,X,W,X,W,X,Q]
blinkingII = [A,G,D,G,A,G,D,G,A,H,F,H,A,G,D,G,M,G,S,G,A,G,D,G,M,G,S,G,A,G,D,G,A]
for i in range(0,len(blinkingI)):
    dualsound(blinkingI[i],blinkingII[i],5,6,0.4)

clear()
curnote = 0
needtoplay = False
current = True
#thedebugworldexistence = False
tot = 0
while True: #大循环------------------------------------------.
    cls()
    mat = [8,5,7,2]
    for b in mat: #open the desired ports
        pin_mode(b,OUTPUT) #read datas...
    bef = cur
    cur = ReadFile('/var/log/apache2/access.log')
#    watercur = readWater()
#    humidcur = readHumid()
    tempcur = readTemp()
    ifsmoke = readSmoke() #read ended.
        _, frame = cam.read()
        issoil = Soil()
        tempb = os.system('sudo rm /home/photo.jpg')
        cv2.imwrite('/home/photo.jpg',frame)
        #face = facecomp()

                        #thedebugworldexistence = True
        if ifsmoke:
            changedirection(2)
            sound(U,volume=18)
            sound(T,volume=18)
            ScreenCali('火情发现,请学生有序撤离。')
        else:
            if tempcur >= tempthreshold:
                changedirection(1)
            else:
                changedirection(0)
            ScreenCali('浙师大附属杭州笕桥实验中学欢迎您!')
        
        if not issoil:
            WaterPump(True)
        else:
            WaterPump(False)

        tot = tot + 1
        if tot >= 3:
            tot = 0
            if facecomp():
                sound(U,volume=18)
                sound(T,volume=18)

                ### --------!!!--------- ###

        #if face != None:
        #    cv2.namedWindow('Image')
        #    cv2.imshow('Video',face)
        #    cv2.waitKey(0)
        #    cv2.destroyWindow('Video')

        time.sleep(1)
        if cur != bef:
            tempb = os.system('sudo rm /home/photo.jpg')
            break  #found user terminated the program.
#-----while over-------------------------------------------------.
digital_write(0,HIGH)
digital_write(0,LOW)
digital_write(7,LOW)
digital_write(10,LOW)
digital_write(0,HIGH)
digital_write(1,HIGH)

for a in notes: 
    time.sleep(0.1)
    sound(a)

clear() 
LightCtrl(False) 
# shutdown...

 

转载于:https://www.cnblogs.com/pityhero233/p/7246862.html

实现简单的查询,各风景的查询,调用各函数,实现课程设计的目标。其中包含三个功能,一个是直接进入导航系统,利用主函数中已有的数据,进行查询:一个是进行创建数据,本程序中初始数据为农大的导航数据,如果需要也可以自己建立一个;最后一个是退出功能。设计该函数的目的是为了能够多次得应用dijkstra函数进行查询最短路径。同时该函数可以列出各景点的代号和对应的名称,这样大家只要输入代号就行了。方便进行查询。下面分别描述这些函数,建立它们函数原型。 1、主函数 函数原型:void main(void) 功 能:控制程序。 参 数:void 返 回 值:void 要 求:管理菜单命令并完成初始化。 2、菜单选择和处理函数 函数原型:int menu() 功 能:处理选择的菜单命令并接收用户选择的命令代码。 参 数:int 返 回 值:int 工作方式:返回命令代码的整数值,根据命令,调用相应函数。 要 求:只允许选择规定键,如果输入不合要求,则提醒用户重新输入。 3、建立邻接矩阵函数 函数原型:void createadj() 功 能:重新建立一个学生信息的记录。 参 数:void 返 回 值:void 工作方式:在需要的时候就可以有主菜单中调用 void createadj()函数。 要 求:必需输入信息记录,然后才能调用出search()函数进行查询。 4、dijkstra函数 函数原型:void dijkstra(intx,inty) 功 能:求两点间的最短路径 参 数:void 返 回 值:void 工作方式: 该函数被其它一些函数调用。 5、结束程序 函数原型:int Exit() 功 能:使程序正常结束运行 参 数:int 返 回 值:1 工作方式:在操作都完成后,可以调用int Exit()函数,使函数最终返回 1 运行exit(1),程序正常结束。 要 求:运行Exit()函数后可以选择是否要保存,选择y则先保存再返 回1值;如果选择n直接返回1值。详细的程序设计应从下到上,在本设计中就要先设计createadj函数;然后设计dijkstra函数;接着是search函数;menu函数;最后才是main函数。如此设计能大大提升设计速度,因为从下往上使编程时的高试过程简单许多,而做课程设计花费时间最多的就是调试过程。对于各函数的详细设计,各函数的N—S图如下: (1)Createadj函数 (2)Dijkstra函数          (3)Search函数          (4)Menu函数          (5)main函数          2.4 程序编码   把详细设计的结果进一步求精为程序设计语言程序。同时加入一些注解和断言,使程序中逻辑概念清楚;编写过程中参考各种的教材和材料,使程序编写的正确性大有提高,同时也许到许多实践知识,增加了实践经验。 2.5 程序调试与测试    程序编写总是出现各种各样的错误,但是难点不是修改错误,而是找出错误。在大量的源程序中找出错误难度很大,但有了一定的方法,就能节省大量的时间,在这次课程设计中我运用的调试方法主要有2种:     一是借助调试工具。利用Turbo C中提供的程序专门调试工具Debugger程序,可以很容易找出程序中的各种语法错误。但是遇到一些逻辑错误时却又无从着手。这时我就用下面一种方法。     二是在程序中插入打印语句。猜测出大致的错误位置,选则一些主要变量,在关键部位插入打印语句,打印出这个主要变量,看其是否与理论上的一样,在多个位置插入,如果有个位置的值与理论值一样,另一个位置与理论值不一样,则错误就落在这两个位置之间,然后再多测试几个位置缩小范围,直到找出错误。  例如;我在调试main()主函数时,程序能够运行,三个选项都能选择,创建函数能够正常运行,也能正常退出,但在选第一条进入校园导航后,打印出来的列表却是空的,源程序中的初始化数据没有显示出来,我又尝试输入两个结点进行查找,发现没有输出路线,所以我猜测初始化数据没有被正常写入。但不知道为何没有被正常写入,首先怀疑是初始化时附值发生错误,查阅各种资料进行校验,发现没有错误。后来经过综合分析,发现最有可能是n值在search()函数中发生错误,于是我在search()函数中插入打印n 的语句,运行后发现输出的n为0,初始化数据中有11个结点,n应该为11,所以n 在这个地方发生错误,我又在main()主函数中打印出n 的值,n=11,是正确的。所以错误就在search()函数中,也就说是当运行case1,运行到search()函数时,n从11变为0,针对这个错误,我把变量n改为宏定义,因为n 是代表结点个数,不管在哪个函数中它的值都是一样的才对。改完后运行程序,成功! 本设计文件的注释如上,已给出详细的说明,下面仅以文件为单位说明各个函数的作用和特点,在必要的地方给予一定说明。  3.1、guide.h文件 使用条件编译。以下是头文件中语句 /********************************************* *头文件(.h) ********************************************/ #include "stdio.h" #include "conio.h" #include "alloc.h" #define n0 100 #define infi 32767 /*“无穷大*/ int adjmatrix[n0+1][n0+1];     /*邻接矩阵*/ int n=11; struct node             /*表结点*/ { char name[20];       /*下一个表结点与它们之间的距离*/ }place[12]={{"ShiDiGongYuan"},   /*表结点初始化,即写各景点名称*/    {"CangRongGongYu"},    {"YinHuiLou"},    {"TuoHuanGuanChang"},    {"DiBaShiTang"},    {"XiaoYiYuan"},    {"TuShuGuan"},    {"TiYuGuan"},    {"ZhongHuaGuanChang"},    {"ChuangXinLou"},    {"YiFuTuShuGuan"},    {"BoXueLou"}};  void createadj()          /*建立邻接表*/  void dijkstra( int x,int y)     /*dijkstra求最小生树*/  void search()            /*搜索最短路径*/  menu()               /*菜单函数*/          /********************************************* *建立邻接表 ********************************************/ void createadj()  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值