|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- # -*- coding: UTF-8 -*-
- # MindPlus
- # Python
- import sys
- sys.path.append("/root/mindplus/.lib/thirdExtension/nick-pyttsx3-thirdex")
- sys.path.append("/root/mindplus/.lib/thirdExtension/liliang-pyflaskweb-thirdex")
- sys.path.append("/root/mindplus/.lib/thirdExtension/liliang-dfr0231_pinpong_nfc-thirdex")
- sys.path.append("/root/mindplus/.lib/thirdExtension/37ck-face_recognition-thirdex")
- sys.path.append("/root/mindplus/.lib/thirdExtension/nick-face_recognition-thirdex")
- import os
- import siot
- import pyttsx3
- import requests
- import pyautogui
- from unihiker import GUI
- import datetime
- import os
- from pinpong.board import Board
- from pinpong.board import Servo
- from pinpong.board import Board,Pin
- from pinpong.extension.unihiker import *
- import time
- import cv2
- import numpy as np
- from PIL import ImageFont, ImageDraw, Image
- from pinpong.libs.dfrobot_pn532 import PN532_I2C
- import train_model
- import cv2
- import numpy as np
- def nfc_get_uid_to_str(info):
- if info == None:
- return 'None'
- uidstr=""
- for i in range(info.length):
- uidstr=uidstr+hex(info.uid[i]).replace('0x' , '')
- return uidstr
- # 自定义函数
- def FUN_BT(_1, _2, _3, _4, X, Y, W, H, BT1, BT2, BT3, BT4):
- if bool(_1):
- u_gui.add_button(text=_1,x=X,y=Y,w=W,h=H,onclick=BT1)
- if bool(_2):
- u_gui.add_button(text=_2,x=((W * 1) + X),y=Y,w=W,h=H,onclick=BT2)
- if bool(_3):
- u_gui.add_button(text=_3,x=((W * 2) + X),y=Y,w=W,h=H,onclick=BT3)
- if bool(_4):
- u_gui.add_button(text=_4,x=((W * 3) + X),y=Y,w=W,h=H,onclick=BT4)
- def FUN_DiBu():
- global 学生信息
- global 老师信息
- global 家长信息
- global 卡号
- global 学生
- ZiHao = 10
- 学生信息=u_gui.draw_text(text="姓名:曾念欣",x=0,y=200,font_size=ZiHao, color="#FF0000")
- 老师信息=u_gui.draw_text(text="老师:高一2班放学",x=0,y=220,font_size=ZiHao, color="#0000FF")
- 家长信息=u_gui.draw_text(text="家长:曾念欣爸爸到1号车位",x=0,y=240,font_size=ZiHao, color="#FF0000")
- 学生=u_gui.draw_text(text="学生:曾念欣赶往1号车位",x=0,y=260,font_size=ZiHao, color="#0000FF")
- 实时=u_gui.draw_text(text="实时:实时动态",x=0,y=280,font_size=ZiHao, color="#FF0000")
- 卡号=u_gui.draw_text(text="卡号:20200808",x=0,y=300,font_size=ZiHao, color="#000099")
- def UI():
- FUN_TouBu()
- FUN_DiBu()
- FUN_CaoZuo()
- def fun_DongTai(msg):
- 作者.config(text=msg)
- def DuQuXinXi(CanShu):
- global res
- global MingZi
- global JiaChang
- global LaoShi
- global XueSheng
- global ID
- res = (GETurl((str("http://iot.37ck.cn:85/cxjs/") + str(CanShu)))[0])
- print(res)
- ID = (res["编号"])
- MingZi = (res["名字"])
- JiaChang = (res["家长"])
- LaoShi = (res["老师"])
- XueSheng = (res["学生"])
- 学生信息.config(text=(res["名字"]))
- 老师信息.config(text=(res["老师"]))
- 家长信息.config(text=(res["家长"]))
- 学生.config(text=(res["学生"]))
- 卡号.config(text=(str((res["卡号"])) + str((str(":卡号--人脸:") + str((res["人脸"]))))))
- return res
- def XianShi(_1, _2, _3, _4, _5, _6):
- if bool(_1):
- 学生信息.config(text=_1)
- if bool(_2):
- 老师信息.config(text=_2)
- if bool(_3):
- 家长信息.config(text=_3)
- if bool(_4):
- 学生.config(text=_4)
- if bool(_5):
- 实时.config(text=_5)
- if bool(_6):
- 卡号.config(text=_6)
- def DuKaNFC():
- nfc = PN532_I2C()
- while not nfc.begin():
- pass
- KaHao = ''
- if nfc.scan():
- info = nfc.get_information()
- if info !=None:
- print(nfc_get_uid_to_str(info))
- KaHao = nfc_get_uid_to_str(info)
- else:
- print("空卡")
- KaHao = '空卡'
- 卡号.config(text=(str("卡号:") + str(KaHao)))
- return KaHao
- def fun_BeiJing(TuPian):
- bj.config(image=TuPian)
- def FUN_TouBu():
- global 作者
- global bj
- bj=u_gui.draw_image(image="bj.png",x=0,y=0)
- 项目名字=u_gui.draw_text(text=G_ZuoPin,x=40,y=0,font_size=16, color="#CC0000")
- 作者=u_gui.draw_text(text="请选择操作",x=5,y=30,font_size=11, color="#0000FF")
- u_gui.draw_round_rect(x=2,y=75,w=236,h=120,r=5,width=3,color="#FF0000")
- def FUN_CaoZuo():
- FUN_BT('', '', '语音', '背景', 3, 35, 58, 30, bt_语音, bt_清空, bt_语音, bt_背景)
- FUN_BT('录入', '建模', '识别', '读卡', 3, 80, 58, 35, bt_人脸录入, bt_建模, bt_人脸识别, bt_读卡)
- FUN_BT('老师', '学生', '家长', '清空', 3, 115, 58, 35, bt_老师, bt_学生, bt_老师, bt_清空)
- FUN_BT('读取', '领取', '接送区', '等待区', 3, 150, 58, 35, bt_31, bt_32, bt_33, bt_34)
- def QingKong():
- global CiShu
- CiShu = 0
- for index in range(10):
- CiShu = (CiShu + 1)
- GETurl((str("http://iot.37ck.cn:85/mjs/") + str((str(CiShu) + str((str("/老师/") + str("空")))))))
- GETurl((str("http://iot.37ck.cn:85/mjs/") + str((str(CiShu) + str((str("/学生/") + str("空")))))))
- GETurl((str("http://iot.37ck.cn:85/mjs/") + str((str(CiShu) + str((str("/家长/") + str("空")))))))
- GETurl((str("http://iot.37ck.cn:85/mjs/") + str((str(CiShu) + str((str("/备注/") + str("空")))))))
- def FaSong(msg, topic):
- siot.publish(topic=topic, data=msg)
- def AnQuanJieSong(XinXi):
- GETurl((str("http://iot.37ck.cn:85/mjs/") + str((str(XinXi) + str((str("/家长/") + str("空")))))))
- GETurl((str("http://iot.37ck.cn:85/mjs/") + str((str(XinXi) + str((str("/老师/") + str("空")))))))
- GETurl((str("http://iot.37ck.cn:85/mjs/") + str((str(XinXi) + str((str("/学生/") + str("空")))))))
- GETurl((str("http://iot.37ck.cn:85/mjs/") + str((str(XinXi) + str((str("/备注/") + str("空")))))))
- def JieSong(XueSheng):
- global msg
- DuQuXinXi(XueSheng)
- if (LaoShi == '空'):
- GETurl((str("http://iot.37ck.cn:85/mjs/") + str((str(ID) + str((str("/老师/") + str("高一2班放学")))))))
- else:
- if (JiaChang == '空'):
- msg = '到安全接送区'
- GETurl((str("http://iot.37ck.cn:85/mjs/") + str((str(ID) + str((str("/学生/") + str("1/老师/高一2班放学")))))))
- else:
- msg = '前往接送车位'
- GETurl((str("http://iot.37ck.cn:85/mjs/") + str((str(ID) + str((str("/学生/") + str((str(MingZi) + str(msg)))))))))
- return (str(MingZi) + str(msg))
- def YuYinHeCheng(NaRong, YinPin):
- engine = pyttsx3.init()
- engine.setProperty('volume',1)
- engine.setProperty('rate',200)
- if (YinPin == ''):
- engine.say(NaRong)
- engine.runAndWait()
- else:
- engine.save_to_file(NaRong, YinPin+'.mp3')
- engine.runAndWait()
- def YuYin(msg):
- p_gravitysynthesis.speak(msg)
- def httpPost():
- dic = requests.get("http://iot.37ck.cn:85/getlog/677").json()
- dic["ID"]='677'
- dic["name"]='QZH'
- dic["S"]='QZH'
- dic["T"]='QZH'
- dic["J"]='QZH'
- print(dic)
- GETurl((str("http://iot.37ck.cn:85/aedb/677/") + str((str((str(DuKaNFC()) + str("/"))) + str("banana")))))
- return (dic["name"])
- def LMQTT():
- pass
- def RenLianShiBie():
- def numberMap(x, in_min, in_max, out_min, out_max):
- return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min
- def drawChinese(text,x,y,size,r, g, b, a,img):
- font = ImageFont.truetype("HYQiHei_50S.ttf", size)
- img_pil = Image.fromarray(img)
- draw = ImageDraw.Draw(img_pil)
- draw.text((x,y), text, font=font, fill=(b, g, r, a))
- frame = np.array(img_pil)
- return frame
- cap = cv2.VideoCapture(0)
- cap.set(cv2.CAP_PROP_FRAME_WIDTH, 240)
- cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 320)
- cap.set(cv2.CAP_PROP_BUFFERSIZE, 1)
- cv2.namedWindow('cvwindow',cv2.WND_PROP_FULLSCREEN)
- cv2.setWindowProperty('cvwindow', cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)
- pic_counta = 0
- pic_countb = 0
- font = cv2.FONT_HERSHEY_SIMPLEX
- while not cap.isOpened():
- continue
- detector=cv2.CascadeClassifier(cv2.data.haarcascades+ 'haarcascade_frontalface_default.xml')
- recognizer = cv2.face.LBPHFaceRecognizer_create()
- recognizer.read("/root/face_recognition/model.yml")
- global img_id, confidence
- img_id, confidence = 0,0
- while True:
- cvimg_success, img_src = cap.read()
- cvimg_h, cvimg_w, cvimg_c = img_src.shape
- cvimg_w1 = cvimg_h*240//320
- cvimg_x1 = (cvimg_w-cvimg_w1)//2
- img_src = img_src[:, cvimg_x1:cvimg_x1+cvimg_w1]
- img_src = cv2.resize(img_src, (240, 320))
- gray = cv2.cvtColor(img_src, cv2.COLOR_BGR2GRAY)
- faces = detector.detectMultiScale(gray, 1.3, 5)
- cv2.imshow('cvwindow', img_src)
- if len(faces)>0:
- img_id, confidence = 0,0
- for (x, y, cvimg_w, cvimg_h) in faces:
- cv2.rectangle(img_src, (x - 50, y - 50), (x + cvimg_w + 50, y + cvimg_h + 50), (0, 255, 0), 2)
- img_array = gray[y:y + cvimg_h, x:x + cvimg_w]
- img_id, confidence = recognizer.predict(img_array)
- confidence = (numberMap(confidence, 150, 0,0,100))
- if confidence ==100:
- confidence = 0
- if (confidence > 40):
- MingZi = ((GETurl((str("http://iot.37ck.cn:85/cxjs/") + str(img_id)))[0])["名字"])
- DingYueZhuTi(reshttp, JieSong(MingZi))
- img_src = drawChinese(text=str((str(MingZi) + str(JiaChang))),x=10, y=20,size=25,r= 50,g=200,b=0,a=0,img=img_src)
- cv2.imshow('cvwindow', img_src)
- print(img_id)
- else:
- img_src = drawChinese(text=str("检测中"),x=10, y=60,size=25,r= 200,g=0,b=0,a=0,img=img_src)
- cv2.imshow('cvwindow', img_src)
- else:
- pass
- cv2.imshow('cvwindow', img_src)
- cv2.waitKey(5)
- def DingYueZhuTi(TZhuTi, TXiaoXi):
- siot.getsubscribe(topic=TZhuTi)
- siot.publish(topic=TZhuTi, data=TXiaoXi)
- def GETurl(TWangZhi):
- try:
- gethttp = requests.get(TWangZhi)
- gethttp.raise_for_status()
- return gethttp.json()
- except:
- return '没有数据'
- def FenJieMingZi(NaRong):
- return (NaRong[0:(NaRong.find(":"))])
- def LuRuRenLian(ID, ShuLiang):
- def numberMap(x, in_min, in_max, out_min, out_max):
- return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min
- def drawChinese(text,x,y,size,r, g, b, a,img):
- font = ImageFont.truetype("HYQiHei_50S.ttf", size)
- img_pil = Image.fromarray(img)
- draw = ImageDraw.Draw(img_pil)
- draw.text((x,y), text, font=font, fill=(b, g, r, a))
- frame = np.array(img_pil)
- return frame
- cap = cv2.VideoCapture(0)
- cap.set(cv2.CAP_PROP_FRAME_WIDTH, 240)
- cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 320)
- cap.set(cv2.CAP_PROP_BUFFERSIZE, 1)
- cv2.namedWindow('cvwindow',cv2.WND_PROP_FULLSCREEN)
- cv2.setWindowProperty('cvwindow', cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)
- pic_counta = 0
- pic_countb = 0
- font = cv2.FONT_HERSHEY_SIMPLEX
- while not cap.isOpened():
- continue
- detector=cv2.CascadeClassifier(cv2.data.haarcascades+ 'haarcascade_frontalface_default.xml')
- recognizer = cv2.face.LBPHFaceRecognizer_create()
- while not (cv2.waitKey(10)==ord('a')):
- time.sleep(0.1)
- while not (pic_counta >=ShuLiang):
- cvimg_success, img_src = cap.read()
- cvimg_h, cvimg_w, cvimg_c = img_src.shape
- cvimg_w1 = cvimg_h*240//320
- cvimg_x1 = (cvimg_w-cvimg_w1)//2
- img_src = img_src[:, cvimg_x1:cvimg_x1+cvimg_w1]
- img_src = cv2.resize(img_src, (240, 320))
- gray = cv2.cvtColor(img_src, cv2.COLOR_BGR2GRAY)
- faces = detector.detectMultiScale(gray, 1.3, 5)
- cv2.imshow('cvwindow', img_src)
- img_dir_path ="/root/face_recognition/picture/1/"
- img_name_path=str(datetime.datetime.now().strftime('%Y%m%d_%H%M%S_%f'))+".jpg"
- img_save_path=img_dir_path+img_name_path
- img_dir_path ="/root/face_recognition/picture//ID/"
- img_name_path=str(datetime.datetime.now().strftime('%Y%m%d_%H%M%S_%f'))+".jpg"
- img_save_path=img_dir_path+img_name_path
- try:
- if not os.path.exists(img_dir_path):
- print("The folder does not exist,created automatically")
- os.system("mkdir -p /root/face_recognition/picture//ID/")
- except IOError:
- print("IOError,created automatically")
- break
- for (x, y, w, h) in faces:
- cv2.rectangle(img_src, (x, y), (x + w, y + h), (0, 255, 0), 2)
- if pic_counta <= ShuLiang:
- cv2.putText(img_src, 'shooting', (10, 50), font, 0.6, (0, 255, 0), 2)
- cv2.imwrite(img_save_path,img_src)
- pic_counta=pic_counta+1
- print("save picture path:",img_save_path)
- print("save ID-picture count:"+str(pic_counta))
- cv2.putText(img_src, 'ID', (x, y+h), font, 0.6, (0, 0, 255), 2)
- time.sleep(0.05)
- else:
- cv2.putText(img_src, 'Done,Please quit', (10, 50), font, 0.6, (0, 255, 0), 2)
- time.sleep(2)
- cv2.imshow('cvwindow', img_src)
- cv2.waitKey(5)
- cap.release()
- cv2.destroyAllWindows()
- def DuoJi(BianHao, JiaoDu):
- if (BianHao == 8):
- servo1 = Servo(Pin((Pin.P8)))
- servo1.write_angle(JiaoDu)
- elif (BianHao == 9):
- servo2 = Servo(Pin((Pin.P9)))
- servo2.write_angle(JiaoDu)
- def JianMo():
- print("开始训练模型")
- detector=cv2.CascadeClassifier(cv2.data.haarcascades+ 'haarcascade_frontalface_default.xml')
- recognizer = cv2.face.LBPHFaceRecognizer_create()
- faces, Ids = train_model.get_images_and_labels('/root/face_recognition/picture/')
- recognizer.train(faces, np.array(Ids))
- img_dir_path ="/root/face_recognition/model.yml"
- img_dir_path = os.path.abspath(os.path.dirname(img_dir_path))
- print(img_dir_path)
- try:
- if not os.path.exists(img_dir_path):
- print("The folder does not exist,created automatically")
- os.mkdir(img_dir_path)
- except IOError:
- print("IOError,created automatically")
- recognizer.save("/root/face_recognition/model.yml")
- print("训练完成")
- return '训练完成'
- def ChuWuGui(msg):
- if (msg.find("8")!=-1):
- if (msg.find("开门")!=-1):
- DuoJi(8, 0)
- elif (msg.find("关门")!=-1):
- DuoJi(8, 80)
- elif (msg.find("9")!=-1):
- if (msg.find("开门")!=-1):
- DuoJi(9, 0)
- elif (msg.find("关门")!=-1):
- DuoJi(9, 80)
- def GET(TWangZhi, TJian):
- try:
- gethttp = requests.get(TWangZhi)
- gethttp.raise_for_status()
- return gethttp.json().get(TJian)
- except:
- return '没有数据'
- # 事件回调函数
- def on_buttona_click_callback():
- DuQuXinXi(DuKaNFC())
- def bt_人脸录入():
- LuRuRenLian(1, 10)
- def bt_清空():
- QingKong()
- YuYinHeCheng('清空数据完成', '')
- def bt_31():
- FaSong('有留言', reshttp)
- def bt_建模():
- JianMo()
- def bt_读卡():
- DuQuXinXi(DuKaNFC())
- def bt_32():
- FaSong('有寄存物品', reshttp)
- def bt_33():
- FaSong('赶往接送车位', reshttp)
- def bt_人脸识别():
- RenLianShiBie()
- def bt_语音():
- YuYinHeCheng('测试语音', '')
- def bt_34():
- FaSong('等待区等待家长', reshttp)
- def bt_学生():
- DuQuXinXi(DuKaNFC())
- DingYueZhuTi(reshttp, JieSong(ID))
- def bt_老师():
- DingYueZhuTi(reshttp, '高一2班放学')
- def bt_背景():
- global G_BeiJing
- if (G_BeiJing == 0):
- fun_BeiJing('bj.png')
- G_BeiJing = 1
- else:
- fun_BeiJing('bj1.png')
- G_BeiJing = 0
- def on_buttonb_click_callback():
- siot.publish_save(topic=reshttp, data=httpPost())
- def on_message_callback(client, userdata, msg):
- print((str(msg.topic) + str(msg.payload.decode())))
- 作者.config(text=msg.payload.decode())
- YuYinHeCheng(msg.payload.decode(), '')
- if (msg.payload.decode().find("接送完成")!=-1):
- DuQuXinXi(FenJieMingZi(msg.payload.decode()))
- print(res)
- AnQuanJieSong(ID)
- if (msg.payload.decode().find("放学")!=-1):
- global CiShu
- CiShu = 0
- for index in range(10):
- CiShu = (CiShu + 1)
- GETurl((str("http://iot.37ck.cn:85/mjs/") + str((str(CiShu) + str((str("/老师/") + str("高一2班放学")))))))
- if (msg.payload.decode().find("号车位")!=-1):
- GETurl((str("http://iot.37ck.cn:85/mjs/") + str((str(ID) + str((str("/家长/") + str(msg.payload.decode())))))))
- u_gui=GUI()
- Board().begin()
- siot.init(client_id="8549116620837305",server="iot.37ck.cn",port=1883,user="37ck",password="20200808")
- u_gui.on_a_click(on_buttona_click_callback)
- u_gui.on_b_click(on_buttonb_click_callback)
- siot.connect()
- siot.loop()
- siot.set_callback(on_message_callback)
- global reshttp
- G_BeiJing = 0
- G_ZuoPin = '安全蜂速:接送'
- ID = '安全蜂速:接送'
- reshttp = '37ck/莘村中学'
- UI()
- print(reshttp)
- LMQTT()
- DingYueZhuTi(reshttp, ID)
- while True:
- pass
复制代码
|
|