Read the statement by Michael Teeuw here.
i want to add phython code in 'MMM-Facial-Recognition-OCV3'
-
i’m making magicmirror about style fashion.
but i don’t know how to add this code.
Without MagicMirror this phython is very well.
but i want to put this open cv phython code, and work this open cv in MagicMirror.
please teach me how to put this code.
i’m using this modeul MMM-Facial-Recognition-OCV3import cv2 import numpy as np import sys casc='haarcascade_frontalface_default.xml' eye_cas='haarcascade_eye.xml' faceCascade=cv2.CascadeClassifier(casc) eyeCascade=cv2.CascadeClassifier(eye_cas) cap=cv2.VideoCapture(0) ret=cap.set(3,240) ret=cap.set(4,180) while True: num=input('input numbers 1~15= hair, 16~18 = glass') if int(num)>0 and int(num)<19: break while True: ret,frame=cap.read() frame=cv2.flip(frame,1) gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) faces=faceCascade.detectMultiScale( gray, scaleFactor=1.1, minNeighbors=5, minSize=(100,100), ) sz=0 a,b,c,d=0,0,0,0 x,y,w,h=0,0,0,0 count=0 for (x,y,w,h) in faces: if w>sz: sz=w a,b,c,d=(x,y,w,h) count=count+1 if count>0: (x,y,w,h)=a,b,c,d roi_gray=gray[y:y+h,x:x+w] roi_color=gray[y:y+h,x:x+w] eye=eyeCascade.detectMultiScale(roi_gray) cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,0),2) sz=0 count=0 eyes=[] for ex,ey,ew,eh in eye: if ey<int(h/2) and ew>sz: sz=ew a,b,c,d=(ex,ey,ew,eh) count=count+1 eyes.append((a,b,c,d)) eyes.sort(reverse=True) if count>1:#눈이 발견된경우 xi,yi,wi,hi=eyes[0] xxi,yyi,wwi,hhi=eyes[1] lx=0 ly=0 rx=0 ry=0 if xi<int(w/2):# xi : left lx=x+xi+int(wi/2) ly=y+yi+int(hi/2) cv2.line(frame,(lx,ly),(lx,ly),(255,255,0),8,cv2.LINE_AA) else : rx=x+xi+int(wi/2) ry=y+yi+int(hi/2) cv2.line(frame,(rx,ry),(rx,ry),(255,0,0),8,cv2.LINE_AA) cv2.imshow('video',frame) hair_url='./images/'+num+'.png' hair=cv2.imread(hair_url,cv2.IMREAD_UNCHANGED) height,width,channel=hair.shape origin_ratio=int(w/h) height=origin_ratio*width ratio=int(width/w) height=int(height/ratio) width=int(width/ratio) if w>0 and h>0: if int(num)>15:# 선글래스 합성# print('3channel') height=int(height/3) y=y+int(height/2) x=x-int(width/12) hair=cv2.resize(hair,(width,height),interpolation=cv2.INTER_AREA) cut_img=frame[y:y+height,x:x+width] gray_hair=cv2.cvtColor(hair,cv2.COLOR_BGR2GRAY) gray_hair=cv2.bitwise_not(gray_hair) ret,mask=cv2.threshold(gray_hair,100,255,cv2.THRESH_BINARY) mask_inv=cv2.bitwise_not(mask) fg=cv2.bitwise_and(hair,hair,mask=mask) bg=cv2.bitwise_and(cut_img,cut_img,mask=mask_inv) result=cv2.add(fg,bg) frame[y:y+height,x:x+width]=result cv2.imshow('result',frame) else:# 머리합성 r,g,b,a=cv2.split(hair) r=cv2.bitwise_and(r,r,mask=a) g=cv2.bitwise_and(g,g,mask=a) b=cv2.bitwise_and(b,b,mask=a) hair=cv2.merge((r,g,b)) height=height*2 width=width*3 if x>int(width/2) and y>int(height/2): x=x-w y=y-int(h/2) cv2.rectangle(frame,(x,y),(x+width,y+height),(0,2,255),2) hair=cv2.resize(hair,(width,height),interpolation=cv2.INTER_AREA) cut_img=frame[y:y+height,x:x+width] gray_hair=cv2.cvtColor(hair,cv2.COLOR_BGR2GRAY) ret,mask=cv2.threshold(gray_hair,10,255,cv2.THRESH_BINARY) mask_inv=cv2.bitwise_not(mask) fg=cv2.bitwise_and(hair,hair,mask=mask) bg=cv2.bitwise_and(cut_img,cut_img,mask=mask_inv) result=cv2.add(fg,bg) frame[y:y+height,x:x+width]=result cv2.imshow('result',frame) else: print('step back too close') if cv2.waitKey(1)&0xff==ord('q'): break cap.release() cv2.destroyAllWindows()
-
@김윤호 import cv2
import numpy as np
import sys
from PyQt5 import QtCore,QtGui
from PyQt5.QtWidgets import QPushButton,QWidget,QGridLayout,QLabel,QApplication
from PyQt5.QtCore import QThread
import os
import timecasc=‘haarcascade_frontalface_default.xml’
eye_cas=‘haarcascade_eye.xml’faceCascade=cv2.CascadeClassifier(casc)
eyeCascade=cv2.CascadeClassifier(eye_cas)
cap=cv2.VideoCapture(0)
ret=cap.set(3,240)
ret=cap.set(4,180)
images=[]
for i in range(1,19):
images.append(‘./images/’+str(i)+‘.png’)
print(images)
num=0
class MyApp(QWidget):def __init__(self): super().__init__() self.initUI() def initUI(self): global images grid=QGridLayout() self.setLayout(grid) self.btn1=QPushButton('1') self.btn2=QPushButton('2') self.btn3=QPushButton('3') self.btn4=QPushButton('4') self.btn5=QPushButton('5') self.btn6=QPushButton('6') self.btn7=QPushButton('7') self.btn8=QPushButton('8') self.btn9=QPushButton('9') self.btn10=QPushButton('10') self.btn11=QPushButton('11') self.btn12=QPushButton('12') self.btn13=QPushButton('13') self.btn14=QPushButton('14') self.btn15=QPushButton('15') self.btn16=QPushButton('16') self.btn17=QPushButton('17') self.btn18=QPushButton('18') self.btns=[self.btn1] self.btns.append(self.btn2) self.btns.append(self.btn3) self.btns.append(self.btn4) self.btns.append(self.btn5) self.btns.append(self.btn6) self.btns.append(self.btn7) self.btns.append(self.btn8) self.btns.append(self.btn9) self.btns.append(self.btn10) self.btns.append(self.btn11) self.btns.append(self.btn12) self.btns.append(self.btn13) self.btns.append(self.btn14) self.btns.append(self.btn15) self.btns.append(self.btn16) self.btns.append(self.btn17) self.btns.append(self.btn18) self.btns[0].clicked.connect(self.cbtn1) self.btns[1].clicked.connect(self.cbtn2) self.btns[2].clicked.connect(self.cbtn3) self.btns[3].clicked.connect(self.cbtn4) self.btns[4].clicked.connect(self.cbtn5) self.btns[5].clicked.connect(self.cbtn6) self.btns[6].clicked.connect(self.cbtn7) self.btns[7].clicked.connect(self.cbtn8) self.btns[8].clicked.connect(self.cbtn9) self.btns[9].clicked.connect(self.cbtn10) self.btns[10].clicked.connect(self.cbtn11) self.btns[11].clicked.connect(self.cbtn12) self.btns[12].clicked.connect(self.cbtn13) self.btns[13].clicked.connect(self.cbtn14) self.btns[14].clicked.connect(self.cbtn15) self.btns[15].clicked.connect(self.cbtn16) self.btns[16].clicked.connect(self.cbtn17) self.btns[17].clicked.connect(self.cbtn18) for i in range(18): self.btns[i].resize(24,24) self.btns[i].setIcon(QtGui.QIcon(images[i])) self.btns[i].setIconSize(QtCore.QSize(24,24)) grid.addWidget(self.btns[0],0,0,1,1) grid.addWidget(self.btns[1],0,1,1,1) grid.addWidget(self.btns[2],0,2,1,1) grid.addWidget(self.btns[3],0,3,1,1) grid.addWidget(self.btns[4],0,4,1,1) grid.addWidget(self.btns[5],1,0,1,1) grid.addWidget(self.btns[6],1,1,1,1) grid.addWidget(self.btns[7],1,2,1,1) grid.addWidget(self.btns[8],1,3,1,1) grid.addWidget(self.btns[9],1,4,1,1) grid.addWidget(self.btns[10],2,0,1,1) grid.addWidget(self.btns[11],2,1,1,1) grid.addWidget(self.btns[12],2,2,1,1) grid.addWidget(self.btns[13],2,3,1,1) grid.addWidget(self.btns[14],2,4,1,1) grid.addWidget(self.btns[15],3,0,1,1) grid.addWidget(self.btns[16],3,1,1,1) grid.addWidget(self.btns[17],3,2,1,1) self.setWindowTitle('set image') self.show() def cbtn1(self): global num num=1 self.close() def cbtn2(self): global num num=2 self.close() def cbtn3(self): global num num=3 self.close() def cbtn4(self): global num num=4 self.close() def cbtn5(self): global num num=5 self.close() def cbtn6(self): global num num=6 self.close() def cbtn7(self): global num num=7 self.close() def cbtn8(self): global num num=8 self.close() def cbtn9(self): global num num=9 self.close() def cbtn10(self): global num num=10 self.close() def cbtn11(self): global num num=11 self.close() def cbtn12(self): global num num=12 self.close() def cbtn13(self): global num num=13 self.close() def cbtn14(self): global num num=14 self.close() def cbtn15(self): global num num=15 self.close() def cbtn16(self): global num num=16 self.close() def cbtn17(self): global num num=17 self.close() def cbtn18(self): global num num=18 self.close()
app=QApplication(sys.argv)
ex=MyApp()
app.exec_()
print(num)
num=str(num)
while True:
ret,frame=cap.read()
frame=cv2.flip(frame,1)
gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
faces=faceCascade.detectMultiScale(
gray,
scaleFactor=1.1,
minNeighbors=5,
minSize=(100,100),
)
sz=0a,b,c,d=0,0,0,0 x,y,w,h=0,0,0,0 count=0 for (x,y,w,h) in faces: if w>sz: sz=w a,b,c,d=(x,y,w,h) count=count+1 if count>0: if True:#눈이 발견된경우 #cv2.imshow('video',frame) hair_url='./images/'+num+'.png' hair=cv2.imread(hair_url,cv2.IMREAD_UNCHANGED) height,width,channel=hair.shape origin_ratio=int(w/h) height=origin_ratio*width ratio=int(width/w) height=int(height/ratio) width=int(width/ratio) if w>0 and h>0: if int(num)>15:# 선글래스 합성# print('3channel') height=int(height/3) y=y+int(height/2) x=x-int(width/12) hair=cv2.resize(hair,(width,height),interpolation=cv2.INTER_AREA) cut_img=frame[y:y+height,x:x+width] gray_hair=cv2.cvtColor(hair,cv2.COLOR_BGR2GRAY) gray_hair=cv2.bitwise_not(gray_hair) ret,mask=cv2.threshold(gray_hair,100,255,cv2.THRESH_BINARY) #cv2.rectangle(frame,(x,y),(x+width,y+height),(0,2,255),2) mask_inv=cv2.bitwise_not(mask) fg=cv2.bitwise_and(hair,hair,mask=mask) bg=cv2.bitwise_and(cut_img,cut_img,mask=mask_inv) result=cv2.add(fg,bg) frame[y:y+height,x:x+width]=result cv2.imshow('result',frame) else:# 머리합성 r,g,b,a=cv2.split(hair) r=cv2.bitwise_and(r,r,mask=a) g=cv2.bitwise_and(g,g,mask=a) b=cv2.bitwise_and(b,b,mask=a) hair=cv2.merge((r,g,b)) height=height*2 width=width*3 if x>int(width/2) and y>int(height/2): x=x-w y=y-int(h/2) #cv2.rectangle(frame,(x,y),(x+width,y+height),(0,2,255),2) hair=cv2.resize(hair,(width,height),interpolation=cv2.INTER_AREA) cut_img=frame[y:y+height,x:x+width] gray_hair=cv2.cvtColor(hair,cv2.COLOR_BGR2GRAY) ret,mask=cv2.threshold(gray_hair,10,255,cv2.THRESH_BINARY) mask_inv=cv2.bitwise_not(mask) fg=cv2.bitwise_and(hair,hair,mask=mask) bg=cv2.bitwise_and(cut_img,cut_img,mask=mask_inv) result=cv2.add(fg,bg) frame[y:y+height,x:x+width]=result cv2.imshow('result',frame) else: print('step back too close') if cv2.waitKey(1)&0xff==ord('q'): break
cap.release()
cv2.destroyAllWindows() -
@김윤호 # -- coding: utf-8 --
from PyQt5 import QtCore, QtGui, QtWidgets #pip install pyqt5(pip install python3-pyqt5)
import forecastio #pip install python-forecastio [Weather api] [https://github.com/ZeevG/python-forecast.io]
import yapi #pip install yapi [https://github.com/ahmetkotan/yapi]
import feedparser #pip install feedparser [News api] [http://w3devlabs.net/wp/?p=16964]
import datetime
from time import sleep
import threading
import tkinter as tk #this can’t pip install
import requests
import json
import cv2
from PyQt5.QtGui import QPixmap, QImage
import pafy #pip install pafy , pip install youtube_dl#==================================================================================================
#==============UI_MAIN==============================================================================
#==================================================================================================class Ui_MainWindow(object):
hello_world = 0
root = tk.Tk()
width = root.winfo_screenwidth()
height = root.winfo_screenheight()
News_url = “http://fs.jtbc.joins.com//RSS/newsflash.xml”
start_or_stop=False
start=Truedef setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") palette = QtGui.QPalette() brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush) brush = QtGui.QBrush(QtGui.QColor(0, 0, 0)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush) MainWindow.setPalette(palette) #MainWindow.resize(800, 600) MainWindow.showFullScreen() self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") #날씨 이모티콘 ==================================================================== self.weather = QtWidgets.QLabel(self.centralwidget) self.weather.setGeometry(QtCore.QRect(20, 15, 150,130)) self.weather.setObjectName("weather") #온도 label [온도 출력] self.temperature = QtWidgets.QLabel(self.centralwidget) self.temperature.setGeometry(QtCore.QRect(25, 120, 150,130)) self.temperature.setObjectName("temperature") self.temperature.setFont(QtGui.QFont("맑은 고딕",20)) #================================================================================ #clock 이라는 이름으로 label 생성 [hello world]=================================== self.clock = QtWidgets.QLabel(self.centralwidget) self.clock.setGeometry(QtCore.QRect(200,300,100,50)) self.clock.setObjectName("clock") #time 이라는 이름으로 label 생성 [(오전/오후)시/분] self.time = QtWidgets.QLabel(self.centralwidget) self.time.setGeometry(QtCore.QRect(170,80,800,60)) self.time.setObjectName("time") #setFont(QtGui.QFont("Font_name",Font_size)) self.time.setFont(QtGui.QFont("맑은 고딕",50)) #date 이라는 이름으로 label 생성 [년/월/일] self.date = QtWidgets.QLabel(self.centralwidget) self.date.setGeometry(QtCore.QRect(180, 15, 300, 50)) self.date.setObjectName("date") self.date.setFont(QtGui.QFont("맑은 고딕",20)) #=============================================================================== #clock_button 이라는 이름으로 버튼을 생성 [쓰레드가 잘 작동하는지 확인] # self.clock_button = QtWidgets.QPushButton(self.centralwidget) # self.clock_button.setGeometry(QtCore.QRect(200, 280, 75, 23)) # self.clock_button.setObjectName("clock_button") # self.youtube_button = QtWidgets.QPushButton(self.centralwidget) # self.youtube_button.setGeometry(QtCore.QRect(1500, 450, 75, 23)) # self.youtube_button.setObjectName("youtube_button") #=================================================================== #new 라벨 생성======================================================== self.news1 = QtWidgets.QLabel(self.centralwidget) self.news1.setGeometry(QtCore.QRect(self.width-470,self.height-350,470,50)) self.news1.setObjectName("news1") self.news1.setFont(QtGui.QFont("맑은 고딕",11)) self.news2 = QtWidgets.QLabel(self.centralwidget) self.news2.setGeometry(QtCore.QRect(self.width-470,self.height-320,470,50)) self.news2.setObjectName("news2") self.news2.setFont(QtGui.QFont("맑은 고딕",11)) self.news3 = QtWidgets.QLabel(self.centralwidget) self.news3.setGeometry(QtCore.QRect(self.width-470,self.height-290,470,50)) self.news3.setObjectName("news3") self.news3.setFont(QtGui.QFont("맑은 고딕",11)) self.news4 = QtWidgets.QLabel(self.centralwidget) self.news4.setGeometry(QtCore.QRect(self.width-470,self.height-260,470,50)) self.news4.setObjectName("news4") self.news4.setFont(QtGui.QFont("맑은 고딕",11)) self.news5 = QtWidgets.QLabel(self.centralwidget) self.news5.setGeometry(QtCore.QRect(self.width-470,self.height-230,470,50)) self.news5.setObjectName("news5") self.news5.setFont(QtGui.QFont("맑은 고딕",11)) self.news6 = QtWidgets.QLabel(self.centralwidget) self.news6.setGeometry(QtCore.QRect(self.width-470,self.height-200,470,50)) self.news6.setObjectName("news6") self.news6.setFont(QtGui.QFont("맑은 고딕",11)) self.news7 = QtWidgets.QLabel(self.centralwidget) self.news7.setGeometry(QtCore.QRect(self.width-470,self.height-170,470,50)) self.news7.setObjectName("news7") self.news7.setFont(QtGui.QFont("맑은 고딕",11)) self.news8 = QtWidgets.QLabel(self.centralwidget) self.news8.setGeometry(QtCore.QRect(self.width-470,self.height-140,470,50)) self.news8.setObjectName("news8") self.news8.setFont(QtGui.QFont("맑은 고딕",11)) self.news9 = QtWidgets.QLabel(self.centralwidget) self.news9.setGeometry(QtCore.QRect(self.width-470,self.height-110,470,50)) self.news9.setObjectName("news9") self.news9.setFont(QtGui.QFont("맑은 고딕",11)) self.news10 = QtWidgets.QLabel(self.centralwidget) self.news10.setGeometry(QtCore.QRect(self.width-470,self.height-80,470,50)) self.news10.setObjectName("news10") self.news10.setFont(QtGui.QFont("맑은 고딕",11)) #==================================================================== #meal_label 생성 ===================================================== self.b_label = QtWidgets.QLabel(self.centralwidget) self.b_label.setGeometry(QtCore.QRect(50,self.height-500,470,200)) self.b_label.setObjectName("b_label") self.b_label.setText("아침") self.b_label.setFont(QtGui.QFont("맑은 고딕",11)) self.breakfast_label = QtWidgets.QLabel(self.centralwidget) self.breakfast_label.setGeometry(QtCore.QRect(125,self.height-500,470,200)) self.breakfast_label.setObjectName("breakfast_label") self.breakfast_label.setFont(QtGui.QFont("맑은 고딕",11)) self.l_label = QtWidgets.QLabel(self.centralwidget) self.l_label.setGeometry(QtCore.QRect(50,self.height-350,470,200)) self.l_label.setObjectName("l_label") self.l_label.setText("점심") self.l_label.setFont(QtGui.QFont("맑은 고딕",11)) self.lunch_label = QtWidgets.QLabel(self.centralwidget) self.lunch_label.setGeometry(QtCore.QRect(125,self.height-350,470,200)) self.lunch_label.setObjectName("lunch_label") self.lunch_label.setFont(QtGui.QFont("맑은 고딕",11)) self.d_label = QtWidgets.QLabel(self.centralwidget) self.d_label.setGeometry(QtCore.QRect(50,self.height-200,470,200)) self.d_label.setObjectName("d_label") self.d_label.setText("저녁") self.d_label.setFont(QtGui.QFont("맑은 고딕",11)) self.dinner_label = QtWidgets.QLabel(self.centralwidget) self.dinner_label.setGeometry(QtCore.QRect(125,self.height-200,470,200)) self.dinner_label.setObjectName("dinner_label") self.dinner_label.setFont(QtGui.QFont("맑은 고딕",11)) #==================================================================== #video_viewer_label 생성 ===================================================== self.video_viewer_label = QtWidgets.QLabel(self.centralwidget) self.video_viewer_label.setGeometry(QtCore.QRect(self.width-400,0,400,225)) self.video_viewer_label.setObjectName("video_viewer_label") self.video_name_label = QtWidgets.QLabel(self.centralwidget) self.video_name_label.setGeometry(QtCore.QRect(self.width-400,250,400,20)) self.video_name_label.setObjectName("video_name_label") self.video_name_label.setFont(QtGui.QFont("맑은 고딕",11)) #=================================================================== #=================================================================== MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21)) self.menubar.setObjectName("menubar") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "SmartMirror")) # self.clock_button.setText(_translate("MainWindow", "PushButton")) # self.youtube_button.setText(_translate("MainWindow", "Youtube")) #----------------------------------------------------------------------------------------- # 이벤트 # EVENT #----------------------------------------------------------------------------------------- #버튼을 누를시 # def button(self,MainWindow): # self.clock_button.clicked.connect(self.hello) #누를시 hello 함수랑 연결 # self.youtube_button.clicked.connect(self.Stop_video) #프린트 hello world 함수 def hello(self,MainWindow): self.hello_world = self.hello_world + 1 self.clock.setText("%d %s" %(self.hello_world, "hello world")) #시간을 알려주는 함수 메인 화면에 생성 # now.(year,month,day,hour,minute,second) def set_time(self,MainWindow): EvenOrAfter = "오전" while True: now=datetime.datetime.now() #현재 시각을 시스템에서 가져옴 hour=now.hour if(now.hour>=12): EvenOrAfter="오후" hour=now.hour%12 if(now.hour==12): hour=12 else: EvenOrAfter="오전" self.date.setText("%s년 %s월 %s일"%(now.year,now.month,now.day)) self.time.setText(EvenOrAfter+" %s시 %s분" %(hour,now.minute)) sleep(1) #weather (아이콘 설정 및 기온 출력) def weather_icon(self,MainWindow): while True: api_key = "darksky_api_key" #대구소프트웨어고등학교 위치 lat = 35.663106 lng = 128.413759 #서버 접속후 데이터를 받아옴 forecast = forecastio.load_forecast(api_key, lat, lng) weather=forecast.currently() weather_cashe=weather.icon self.temperature.setText("[ %.1f ℃ ]" %(weather.temperature)) if "day" in weather_cashe: if "partly-cloudy" in weather_cashe: self.weather.setPixmap(QtGui.QPixmap("weather_icon\cloudy_day.png")) elif "cloudy" in weather_cashe: self.weather.setPixmap(QtGui.QPixmap("weather_icon\clouds.png")) elif "clear" in weather_cashe: self.weather.setPixmap(QtGui.QPixmap("weather_icon\sun.png")) elif "night" in weather_cashe: if "partly-cloudy" in weather_cashe: self.weather.setPixmap(QtGui.QPixmap("weather_icon\cloudy_night.png")) elif "cloudy" in weather_cashe: self.weather.setPixmap(QtGui.QPixmap("weather_icon\clouds.png")) elif "clear" in weather_cashe: self.weather.setPixmap(QtGui.QPixmap("weather_icon\moon.png")) elif "cloudy" in weather_cashe: self.weather.setPixmap(QtGui.QPixmap("weather_icon\clouds.png")) elif "rain" in weather_cashe: self.weather.setPixmap(QtGui.QPixmap("weather_icon\drop.png")) elif "snow" in weather_cashe: self.weather.setPixmap(QtGui.QPixmap("weather_icon\snowflake.png")) sleep(300) #News (타이틀&기사 출력) def News(self,MainWindow) : d = feedparser.parse(self.News_url) while True : num = 1 for e in d.entries : if num%10==1: self.news1.setText("[%d] %s"%(num,e.title)) elif num%10==2: self.news2.setText("[%d] %s"%(num,e.title)) elif num%10==3: self.news3.setText("[%d] %s"%(num,e.title)) elif num%10==4: self.news4.setText("[%d] %s"%(num,e.title)) elif num%10==5: self.news5.setText("[%d] %s"%(num,e.title)) elif num%10==6: self.news6.setText("[%d] %s"%(num,e.title)) elif num%10==7: self.news7.setText("[%d] %s"%(num,e.title)) elif num%10==8: self.news8.setText("[%d] %s"%(num,e.title)) elif num%10==9: self.news9.setText("[%d] %s"%(num,e.title)) elif num%10==0: self.news10.setText("[%d] %s"%(num,e.title)) num=num+1 sleep(1) #급식 출력 def School_meal(self,MainWindow): while True: now=datetime.datetime.now() response = requests.get('https://schoolmenukr.ml/api/high/D100000282?year='+str(now.year)+'&month='+str(now.month)+'&date='+str(now.day)+'&hideAllergy=true') meal_menu = json.loads(response.text) str_menu=str(meal_menu) breakfast="" lunch="" dinner="" br=0 lu=0 di=0 i=0 while True: try : if "'" in str_menu[br]: if "[" in str_menu[br-1] : if " " in str_menu[br-2] : if ":" in str_menu[br-3] : if "'" in str_menu[br-4] : if "t" in str_menu[br-5] : br=br+1 break br=br+1 except IndexError as e : pass breakfast=breakfast+" " while True: try : if "]" in str_menu[br] : break elif "'" in str_menu[br] : pass elif "," in str_menu[br] : breakfast=breakfast+"\n" else : breakfast=breakfast+str_menu[br] br=br+1 except IndexError as e : pass self.breakfast_label.setText(breakfast) while True: try : if "'" in str_menu[lu]: if "[" in str_menu[lu-1] : if " " in str_menu[lu-2] : if ":" in str_menu[lu-3] : if "'" in str_menu[lu-4] : if "h" in str_menu[lu-5] : lu=lu+1 break lu=lu+1; except IndexError as e: pass lunch=lunch+" " while True: try : if "]" in str_menu[lu] : break elif "'" in str_menu[lu] : pass elif "," in str_menu[lu] : lunch=lunch+"\n" else : lunch=lunch+str_menu[lu] lu=lu+1 except IndexError as e: pass self.lunch_label.setText(lunch) while True: try : if "'" in str_menu[di]: if "[" in str_menu[di-1] : if " " in str_menu[di-2] : if ":" in str_menu[di-3] : if "'" in str_menu[di-4] : if "r" in str_menu[di-5] : di=di+1 break di=di+1; except IndexError as e : pass dinner=dinner+" " while True: try : if "]" in str_menu[di] : break elif "'" in str_menu[di] : pass elif "," in str_menu[di] : dinner=dinner+"\n" else : dinner=dinner+str_menu[di] di=di+1 except IndexError as e: pass self.dinner_label.setText(dinner) def Video_to_frame(self, MainWindow): while True: url = "https://youtu.be/" api = yapi.YoutubeAPI('youtube_data_api_ver3_key') video_name="자막뉴스 " results = api.general_search(video_name, max_results=2) str_results=str(results) i=0 TrueOrFalse=False video_id="" #print(str_results) while True: try : if "'" in str_results[i]: if "=" in str_results[i-1]: if "d" in str_results[i-2]: if "I" in str_results[i-3]: if "o" in str_results[i-4]: i=i+1 TrueOrFalse=True break i=i+1 except IndexError as e: print("error") break while TrueOrFalse: if "'" in str_results[i]: break else : video_id=video_id+str_results[i] i=i+1 url = url+video_id try : vPafy = pafy.new(url) self.video_name_label.setText(vPafy.title) video_length=vPafy.length/60 except Exception as e : self.video_viewer_label.setText("Error") self.start=False print(video_length/60) play = vPafy.getbest(preftype="mp4") cap = cv2.VideoCapture(play.url) while self.start: self.ret, self.frame = cap.read() if self.ret: self.rgbImage = cv2.cvtColor(self.frame, cv2.COLOR_BGR2RGB) self.convertToQtFormat = QImage(self.rgbImage.data, self.rgbImage.shape[1], self.rgbImage.shape[0], QImage.Format_RGB888) self.pixmap = QPixmap(self.convertToQtFormat) self.p = self.pixmap.scaled(400, 225, QtCore.Qt.IgnoreAspectRatio) self.video_viewer_label.setPixmap(self.p) self.video_viewer_label.update() sleep(0.02) #Youtube 영상 1프레임당 0.02초 else : break if self.start_or_stop: break cap.release() cv2.destroyAllWindows() # def Stop_video(self,MainWindow) : # if self.start_or_stop : # self.start_or_stop=False # else : # self.start_or_stop=True #---------------------------------------------------------------------------------------------------- #------------------------ 쓰레드 --------------------------------------------------------------------- #---------------------------------------------------------------------------------------------------- #Set_time을 쓰레드로 사용 def time_start(self,MainWindow): thread=threading.Thread(target=self.set_time,args=(self,)) thread.daemon=True #프로그램 종료시 프로세스도 함께 종료 (백그라운드 재생 X) thread.start() #weather_icon을 쓰레드로 사용 def weather_start(self,MainWindow): thread=threading.Thread(target=self.weather_icon,args=(self,)) thread.daemon=True #프로그램 종료시 프로세스도 함께 종료 (백그라운드 재생 X) thread.start() #News를 쓰레드로 사용 def News_start(self,MainWindow): thread=threading.Thread(target=self.News,args=(self,)) thread.daemon=True #프로그램 종료시 프로세스도 함께 종료 (백그라운드 재생 X) thread.start() #school_meal을 쓰레드로 사용 def meal_start(self,MainWindow): thread=threading.Thread(target=self.School_meal,args=(self,)) thread.daemon=True #프로그램 종료시 프로세스도 함께 종료 (백그라운드 재생 X) thread.start() #video_to_frame을 쓰레드로 사용 def video_thread(self,MainWindow): thread=threading.Thread(target=self.Video_to_frame,args=(self,)) thread.daemon=True #프로그램 종료시 프로세스도 함께 종료 (백그라운드 재생 X) thread.start()
#-------------메인---------------------------------------------------------------------------------
#--------------------------------------------------------------------------------------------------if name==“main”:
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()ui = Ui_MainWindow() ui.setupUi(MainWindow) # ui.button(MainWindow) ui.time_start(MainWindow) #time thread ui.weather_start(MainWindow) #weather thread ui.News_start(MainWindow) #news thread ui.meal_start(MainWindow) #meal thread ui.video_thread(MainWindow) #video thread MainWindow.show() sys.exit(app.exec_())
it is my coding about hair and glasses
-
1st, please use code block tags around code… mark the text and hit the button above the editor that looks like </>
i will fix one, u fix the others…
now, I’m not sure that this code does…
you cannot manipulate (change) the UI/webpage with python in MagicMirror…
you can send info to a node_helper spawn routine that can send info onto the module, which can manipulate (change) the UI/webpagethe module u are using has not been updated in 3 years…
https://github.com/nischi/MMM-Face-Reco-DNN, HAS been updated recently, and u might get help by posting an issue to its repo
the module u are using, launches a python script in the background and checks for responses
pyshell.on('message', function (message) { if (message.hasOwnProperty('status')){ console.log("[" + self.name + "] " + message.status); } if (message.hasOwnProperty('login')){ console.log("[" + self.name + "] " + "User " + self.config.users[message.login.user - 1] + " with confidence " + message.login.confidence + " logged in."); self.sendSocketNotification('user', {action: "login", user: message.login.user - 1, confidence: message.login.confidence}); } if (message.hasOwnProperty('logout')){ console.log("[" + self.name + "] " + "User " + self.config.users[message.logout.user - 1] + " logged out."); self.sendSocketNotification('user', {action: "logout", user: message.logout.user - 1}); } });
and the DNN does similar
self.pyshell.on('message', function(message) { // A status message has received and will log if (message.hasOwnProperty('status')) { console.log('[' + self.name + '] ' + message.status); } // Somebody new are in front of the camera, send it back to the Magic Mirror Module if (message.hasOwnProperty('login')) {
only checking for login and logout